数字图像处理报告

时间:2024.4.27

数字图像处理技术的应用

概述

数字图像处理是一种通过计算机采用一定的算法对图形图像进行处理的技术。通过总结目前数字图像处理技术的应用及发展,我们不难发现数字图像技术的应用领域十分广泛。例如通信方面(声音、文字、图像和数据结合等)、医学方面(超声、核磁共振、CT技术等)、生物特征识别方面(人脸识别,指纹识别,虹膜识别等)、军事方面(目标侦察、制导系统,警戒系统等)等。数字图像处理技术,在今后的现代化社会的总体建设和日常生活当中必将发挥更大的作用。 数字图像处理不仅仅限于IT领域,在日常生活中我们都有应用到数字图像处理技术。

例如在我们实验室研究方向核磁共振成像(MRI)上的应用。核磁共振成像据所释放的能量在物质内部不同结构环境中不同的衰减,通过外加梯度磁场检测所发射出的电磁波,即可得知构成这一物体原子核的位置和种类,据此可以绘制成物体内部的结构图像。在计算机系统上由射频接收器送来的信号经A/D转换器,把模拟信号转换成数字信号,根据与观察层面各体素的对应关系,经计算机处理,得出层面图像数据,再经D/A转换器,加到图像显示器上,按NMR的大小,用不同的灰度等级显示出欲观察层面的图像。这里用到数字图像处理就是将医学图像转换到空间域用变换域法处理得到清晰的MRI图像,大大提高医生的诊断效率。利用数字图像处理理论对被噪声污染的图像进行降噪处理也是MRI图像处理一个重要任务。

例如在人脸识别的应用上。人脸识别,特指利用分析比较人脸视觉特征信息进行身份鉴别的计算机技术,它是基于人的脸部特征,对输入的人脸图象或者视频流首先判断其是否存在人脸 , 如果存在人脸,则进一步的给出每个脸的位置、大小和各个主要面部器官的位置信息。并依据这些信息,进一步提取每个人脸中所蕴涵的身份特征,并将其与已知的人脸进行对比,从而识别每个人脸的身份。在这个过程中,就会利用到数字图像处理技术对输入图像或者视频流进行预处理,并且从中提取人像特征点,进行识别匹配。此外,由于图像质量的好坏会直接影响到识别的效果,所以利用图像处理技术进行图像增强、噪声去除也显得很有必要。

例如在车牌识别中的应用。车辆牌照自动识别系统是智能交通系统的基础环节和重要组成部分,广泛应用于大型停车场、收费站、交通违章管理等领域。数字图像处理技术能将输入的车辆图像通过处理和识别,转换为车牌号的字符串形式,为后续的计算机处理奠定基础,在车辆识别中发挥了关键的作用。。随着计算机技术、数字信号处理技术的发展,数字图像处理技术将能更好地应用于车牌识别中,为国民经济的发展做出更大贡献。

例如在多目标跟踪领域的应用。多目标跟踪在很多领域如军事领域(防空,多目标攻击等)、民用领域(ATM机安全监控、行人跟踪、交通车辆跟踪等)都具有广泛的应用价值,。要进行目标跟踪,首先必须要进行(运动)目标检测,常

用的方法有高斯背景建模、帧差法,光流法,但是不论运用哪种方法,都必须利用到滤波及形态学处理技术,以减少干扰和目标内部空洞。而在利用数据关联进行多目标跟踪的时候,由于获得的目标观测值都是带有噪声干扰的,所以在获得数据关联结果之后还需要利用统计滤波处理技术,以得到较为准确的状态估计。 总结:图像处理是在近30年来在计算机和大规模集成电路发展基础上发展起来的新兴学科。由于它的出现和发展,使人们观察自然界的视野更加开阔,改善自然界的能力更加增强。从19xx年美国喷气推进实验室为进行太空探测研究月球表面,用计算机处理了从卫星发送回来的月球表面照片,校正了从飞船上的电视摄像机传送回来照片中各种形式的图像畸变和干扰,首次进行了计算机图像处理的研究;到70年代计算机图像处理在遥感技术的发展中得到重要应用和发展,19xx年计算机断层x光照相技术(即CT技术)的研究成功,使得人们可以利用图像处理技术窥测到人体内部机体断层内图像,以及一般方法无法观察到的图像内容,这使得医学图像处理的研究开始取得了迅速的进展。70年代末期,开始了具有视觉功能的机器人的研究,计算机视觉作为图像处理学科一个新的重要分支开始形成和发展。在80年代,数字图像处理学科进入了成熟发展阶段.尤其随着大规模集成电路技术的发展,大容量存储芯片的容量大幅度增加,价格的大大下降,计算机的存储容量和运算速度以每年20%的比率迅速提高,这些都为图像处理技术的发展提供良好的物质基础,使图像处理不仅得以迅速发展而且得到愈来愈广泛的应用。同时,图像处理在实际的应用与发展中又大大地推动了这一学科的发展,但是和人类视觉能力相联系相比较,图像处理的发展还相差甚远、为此我们还需进行更多得研究工作。社会的需要是我们研究发展的强大推动力之一,我们相信图像处理技术将得到更快速的发展、给社会的信息发展提供更有力的支持。


第二篇:数字图像处理课设报告


第一章   引言

随着数字水印技术的发展,数字水印的应用领域也得到了扩展,数字水印的基本应用领域是版权保护、隐藏标识、认证和安全不可见通信。

  当数字水印应用于版权保护时,潜在的应用市场在于电子商务、在线或离线地分发多媒体内容以及大规模的广播服务。数字水印用于隐藏标识时,可在医学、制图、数字成像、数字图像监控、多媒体索引和基于内容的检索等领域得到应用。数字水印的认证方面主要ID卡、信用卡、ATM卡等上面数字水印的安全不可见通信将在国防和情报部门得到广泛的应用。

  随着信息时代的到来,特别是Internet的普及,信息的安全保护问题日益突出。当前的信息安全技术基本上都以密码学理论为基础,无论是采用传统的密钥系统还是公钥系统,其保护方式都是控制文件的存取,即将文件加密成密文,使非法用户不能解读。但随着计算机处理能力的快速提高,这种通过不断增加密钥长度来提高系统密级的方法变得越来越不安全。

  另一方面,多媒体技术已被广泛应用,需要进行加密、认证和版权保护的声像数据也越来越多。数字化的声像数据从本质上说就是数字信号,如果对这类数据也采用密码加密方式,则其本身的信号属性就被忽略了。最近几年,许多研究人员放弃了传统密码学的技术路线,尝试用各种信号处理方法对声像数据进行隐藏加密,并将该技术用于制作多媒体的“数字水印”。 

随着信息技术和计算机网络的飞速发展,数字式多媒体信息(图象、文本、音频、视频)的存储、复制与传播变得非常方便。人们不但可以通过互联网络和CD-ROM方便快捷地获得多媒体信息,还可以得到与原始数据完全相同的复制品。但是由此引发的盗版问题和版权纷争已成为日益严重的社会问题。

传统的加密方法对多媒体内容的保护和完整性认证也具有一定的局限性。首先,加密方法只用在通信的信道中,一旦被解密,则信息就完全变成明文;另外,密码学中的完整性认证是通过数字签名方式实现的,它并不是直接嵌到多媒体信息之中,因此无法察觉信息在经过加密系统之后的再次传播与内容的改变。这样,数字水印技术作为加密技术的补充,在多媒体信息的版权保护与完整性认证方面得到了迅猛的发展。

多媒体数据的数字化为多媒体信息的存取提供了极大的便利,同时也极大地提高了信息表达的效率和准确性。

第二章  数字水印技术的基本原理

数字水印(Digital  Watermark)技术是指用信号处理的方法在数字化的多媒体数据中嵌入隐蔽的标记,这种标记通常是不可见的,只有通过专用的检测器或阅读器才能提取。数字水印是信息隐藏技术的一个重要研究方向。

  在数字水印技术中,水印的数据量和鲁棒性构成了一对基本矛盾。从主观上讲,理想的水印算法应该既能隐藏大量数据,又可以抗各种信道噪声和信号变形。然而在实际中,这两个指标往往不能同时实现,不过这并不会影响数字水印技术的应用,因为实际应用一般只偏重其中的一个方面。如果是为了隐蔽通信,数据量显然是最重要的,由于通信方式极为隐蔽,遭遇敌方篡改攻击的可能性很小,因而对鲁棒性要求不高。但对保证数据安全来说,情况恰恰相反,各种保密的数据随时面临着被盗取和篡改的危险,所以鲁棒性是十分重要的,此时,隐藏数据量的要求居于次要地位。数字水印技术是通过一定的算法将一些标志性信息直接嵌到多媒体内容当中,但不影响原内容的价值和使用,并且不能被人的知觉系统觉察或注意到。水印信息可以是作者的序列号、公司标志、有特殊意义的文本等,可用来识别文件、图像或音乐制品的来源、版本、原作者、拥有者、发行人、合法使用人对数字产品的拥有权。与加密技术不同,数字水印技术并不能阻止盗版活动的发生,但它可以判别对象是否受到保护,监视被保护数据的传播、真伪鉴别和非法拷贝、解决版权纠纷并为法庭提供证据。为了给攻击者增加去除水印的难度,目前大多数水印制作方案都采用密码学中的加密(包括公开密钥、私有密钥)体系来加强,在水印的嵌入、提取时采用一种密钥,甚至几种密钥联合使用。通用的水印的嵌入和提取方法如图1,图2所示。

图1  通用数字水印嵌入方法

图2  通用数字水印提取方法

频域法加入数字水印的原理是首先将原始信号(语音一维信号、图像二维信号)变换到频域,常用的变换一般有DWT、DCT、DFT、WP和分形。然后,对加入了水印信息的信号进行频域反变换(IDWT、IDCT、DFT、WP),得到含有水印信息的信号。

频域法检测水印的原理是将原始信号与待检测信号同时进行变换域变换,比较两者的区别,进行嵌入水印的逆运算,得出水印信息。如果是可读的水印,那么就此结束,如果是不可读水印,如高斯噪声,就将得出的水印与已知水印作比较,由相关性判断,待检测信号含不含水印,故水印的检测有两个结束点。

第三章  数字水印技术的常用算法

3.1算法介绍

3.1.1算法分类

数字水印算法一般可分为两种空域法和频域法,频域法有以下优点:1)嵌入的水印信号能量可以分布到空域的所有像素上,有利于保证水印的不可见性;2)视觉系统(HVS)的某些特性(如频率的掩蔽特性)可以更方便地结合到水印编码过程中;3)频域法可与国际数据压缩标准兼容,从而实现在压缩域(compressed domain)内的水印编码。所以我们也以频域法为主介绍MATLAB在数字水印技术中的使用。

3.1.2 DCT法(Discreste Cosine Transformation)

对原始信号做DCT的算法:Cox和Piva等人提出的DCT技术的经典之作。Cox利用随机数发生器产生标准正态序列作为水印信息对图像进行整体DCT变换后,选取除去DC系数之外部分较低频率系数叠加水印信息;Piva则修改整幅图像的中频部分。

对原始信号分块后,再作DCT的算法:Hsu和Wu把图像进行8*8分块,将一个二进制序列作为水印放入DCT的中频区;有些学者则计算整个图像的DCT,把一个实数序列嵌入DCT的中频系数上。选择中频区的好处是一方面尽量减少嵌入信息对图像主观视觉的影响;同时,尽量避免有损压缩对水印信息可能带来的损失。

还有一种DCT方法就是把水印信息嵌入到高频系数上,但是采用这种方法,抗压缩性非常差。

DFT法(Discrete Fourier Transformation)

Swanson等利用时域小波变换和频率掩蔽特性结合,实现多分辨率视频水印;Kundur和Hatzinakos把水印植入灰度图像的小波变换域。

3.1.3其他方法

其它变换域还有Fourier-mellin域 、Fourier变换域、分形或WP(Wavelet Package)等。

以上的变换域算法计算量都非常大,编程实现这些变换和逆变换也需要好好下一番功夫,由此造成研究人员把大量的时间和精力浪费在与水印算法研究无关的问题上。

3.2数字水印的设计要考虑到的问题:

在数字水印技术中,水印的数据量和鲁棒性构成了一对基本矛盾。从主观上讲,理想的水印算法应该既能隐藏大量数据,又可以抗各种信道噪声和信号变形。然而在实际中,这两个指标往往不能同时实现,不过这并不会影响数字水印技术的应用,因为实际应用一般只偏重其中的一个方面。如果是为了隐蔽通信,数据量显然是最重要的,由于通信方式极为隐蔽,遭遇敌方篡改攻击的可能性很小,因而对鲁棒性要求不高。但对保证数据安全来说,情况恰恰相反,各种保密的数据随时面临着被盗取和篡改的危险,所以鲁棒性是十分重要的,此时,隐藏数据量的要求居于次要地位。 

3.2.1不可见性

对于以模拟方式存储和分发的信息(如电视节目),或是以物理形式存储的信息(如报刊、杂志),用可见的标志就足以表明其所有权。但在数字方式下,标志信息极易被修改或擦除。因此应根据多媒体信息的类型和几何特性,利用用户提供的密钥将水印隐藏到一系列随机产生的位置中,使人无法察觉。图3左侧为原始图像,右侧为加了水印后的图像。

图3

3.2.2鲁棒性。

水印必须对一般的信号处理操作(如滤波、平滑、增强、有失真压缩等)、删除攻击、迷惑攻击等具有鲁棒性。除非对数字水印具有足够的先验知识,任何破坏和消除水印的企图都将严重破坏多媒体信息的质量。

3.2.3水印容量。

嵌入的水印信息必须足以表示多媒体内容的创建者或所有者的标志信息,或是购买者的序列号。这样在发生版权纠纷时,创建者或所有者的信息用于标示数据的版权所有者,而序列号用于标示违反协议而为盗版提供多媒体数据的用户。

数字水印在多媒体信息安全中的另一个重要应用就是内容的真实性鉴定(即认证)。当多媒体内容发生改变时,具有较强的敏感性的易损水印(Fragile watermarking)会随之发生一定程度的改变,从而可以鉴定原始数据是否被篡改。

第四章  可实现数字水印技术的高效实用工具——Matlab

4.1Matlab简介

MATLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多.

  开放性使MATLAB广受欢迎.除内部函数外,所有MATLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包.

综上所述,Matlab语言的特点有: 1.编程效率高2.用户使用方便 3.扩充能力强4.高效方便的矩阵和数组运算 5.方便的绘图功能

4.2用Matlab研究数字水印的优点

1.MATLAB集成了DCT、DWT等函数有丰富的小波函数和处理函数,这不仅方便了研究人员,而且使源程序简洁明了、易实现。

2.强大的数学运算功能。能够方便、高效地实现音频、视频中的大量矩阵运算。

3.提供了图像处理工具箱、小波分析工具箱、数字信号处理工具箱。用来编制跨数字图像处理技术、数字信号处理等多学科的数字水印技术是非常好的选择。

4.MATLAB与目前最强大的编程工具——Visual C++具有良好的接口。

5.图像处理工具箱

4.3 图像和图像数据

   缺省情况下,MATLAB将图像中的数据存储为双精度类型(double),64位浮点数,所需存储量很大;MATLAB还支持另一种类型无符号整型(uint8),即图像矩阵中每个数据占用1个字节。在使用MATLAB工具箱时,一定要注意函数所要求的参数类型。另外,uint8与double两种类型数据的值域不同,编程需注意值域转换。

4.4 图像处理工具箱所支持的图像类型

4.4.1真彩色图像

R、G、B三个分量表示一个像素的颜色。如果要读取图像中(100,50)处的像素值,可查看三元数据(100,50,1:3)。真彩色图像可用双精度存储,亮度值范围是[0,1];比较符合习惯的存储方法是用无符号整型存储,亮度值范围[0,255]。

4.4.2索引色图像

包含两个结构,一个是调色板,另一个是图像数据矩阵。调色板是一个有3列和若干行的色彩映象矩阵,矩阵每行代表一种颜色,3列分别代表红、绿、蓝色强度的双精度数。注意:MATLAB中调色板色彩强度[0,1],0代表最暗,1代表最亮。

缺省情况下,调用上述函数灰产生一个64×3的调色板,用户也可指定调色板大小索引色图像数据也有double和uint8两种类型。当图像数据为double类型时,值1代表调色板中的第1行,值2代表第2行……如果图像数据为uint8类型,0代表调色板的第一行,,值1代表第2行……

4.4.3灰度图像

   存储灰度图像只需要一个数据矩阵。数据类型可以是double,[0,1];也可以是uint8,[0,255]

4.4.4二值图像

   二值图像只需一个数据矩阵,每个像素只有两个灰度值,可以采用uint8或double类型存储。MATLAB工具箱中以二值图像作为返回结果的函数都使用uint8类型。

4.4.5图像序列

   MATLAB工具箱支持将多帧图像连接成图像序列。图像序列是一个4维数组,图像帧的序号在图像的长、宽、颜色深度之后构成第4维。分散的图像也可以合并成图像序列,前提是各图像尺寸必须相同,若是索引色图像,调色板也必须相同。可参考cat()函数    A=cat(4,A1,A2,A3,A4,A5)

4.5. MATLAB图像类型转换

   im2bw      通过设定亮度阈值将真彩色、索引色、灰度图转换成二值图

   ind2gray    将索引色图像转换成灰度图像

   ind2rgb      将索引色图像转换成真彩色图像

   mat2gray   将一个数据矩阵转换成一副灰度图

   rgb2gray    将一副真彩色图像转换成灰度图像

   rgb2ind      将真彩色图像转换成索引色图像

4.6 图像文件的读写和查询

4.6.1图形图像文件的读取

   利用函数imread()可完成图形图像文件的读取,语法:

     A=imread(filename,fmt)

     [X,map]=imread(filename,fmt)

   通常,读取的大多数图像均为8bit,当这些图像加载到内存中时,Matlab就将其存放

在类uint8中。此为Matlab还支持16bit的PNG和TIF图像,当读取这类文件时,Matlab就将

其存贮在uint16中。

4.6.2图形图像文件的写入

   使用imwrite函数,语法如下:

   imwrite(A,filename,fmt)

当利用imwrite函数保存图像时,Matlab缺省的方式是将其简化道uint8的数据格式。

4.6.3图形图像文件信息的查询  

imfinfo()函数

4.7 图像文件的显示

4.7.1索引图像及其显示  

 方法一:

          image(X)

          colormap(map)  

 方法二:

          imshow(X,map)

 4.7.2 灰度图像及其显示

   Matlab 7.0 中,要显示一副灰度图像,可以调用函数 imshow 或 imagesc (即 imagescale,图像缩放函数)

imshow 函数显示灰度图像。使用 imshow(I)或使用明确指定的灰度级书目:imshow(I,32)。

   由于Matlab自动对灰度图像进行标度以适合调色板的范围,因而可以使用自定义大小的调色板。其调用格式如下:

           imshow(I,[low,high])

    其中,low 和 high 分别为数据数组的最小值和最大值。

   (2) imagesc 函数显示灰度图像

   下面的代码是具有两个输入参数的 imagesc 函数显示一副灰度图像

       imagesc(1,[0,1]);

       colormap(gray);

    imagesc 函数中的第二个参数确定灰度范围。灰度范围中的第一个值(通常是0),对应于颜色映象表中的第一个值(颜色),第二个值(通常是1)则对应与颜色映象表中的最后一个值(颜色)。灰度范围中间的值则线型对应与颜色映象表中剩余的值(颜色)。

在调用 imagesc 函数时,若只使用一个参数,可以用任意灰度范围显示图像。在该调用方式下,数据矩阵中的最小值对应于颜色映象表中的第一个颜色值,数据矩阵中的最大值对应于颜色映象表中的最后一个颜色值。

4.7.3 RGB 图像及其显示

   (1) image(RGB)

   不管RGB图像的类型是double浮点型,还是 uint8 或 uint16 无符号整数型,Matlab都
能通过 image 函数将其正确显示出来。

   (2) imshow(RGB) 参数是一个 m×n×3 的数组

4.7.4二进制图像及其显示

   (1) imshow(BW)

   在 Matlab 7.0 中,二进制图像是一个逻辑类,仅包括 0 和 1 两个数值。像素 0 显示为黑色,像素 1 显示为白色。显示时,也可通过NOT(~)命令,对二进制图象进行取反,使数值 0 显示为白色;1 显示为黑色。

   (2) 此外,还可以使用一个调色板显示一副二进制图像。如果图形是 uint8 数据类型,则数值 0 显示为调色板的第一个颜色,数值 1 显示为第二个颜色。

4.7.5直接从磁盘显示图像

   可使用一下命令直接进行图像文件的显示:imshow filename

   其中,filename 为要显示的图像文件的文件名。

   如果图像是多帧的,那么 imshow 将仅显示第一帧。但需注意,在使用这种方式时,图像数据没有保存在Matlab 7.0 工作平台。如果希望将图像装入工作台中,需使用 getimage 函数,从当前的句柄图形图像对象中获取图像数据,命令形式为: rgb = getimage;

五.使用MATLAB语言,设计并制作基于DCT变换的数字水印

5.1算法原理:

这个算法的基本原理是利用DCT法(Discreste Cosine Transformation)将空域图像变成频域,然后将水印信息嵌入其直流项之中,最后将频域转换成空域以完成图片的水印的嵌入。下面将具体说明嵌入的过程。

5.1.1.准备工作:

首先要读入一幅待嵌入的原始图片一I=f1(x,y)以及高斯噪声序列或者是一幅二值图像作为水印图M=f2(x,y)。由于DCT法需要给原图像进行8*8分块,所以为了便于将一个二进制序列作为水印放入DCT,最好让原图像的行x与列y象素数可以被8整除。如果不能整除需要将x/8与y/8的结果进行取整,其取法遵循向下取整原则。在整除的情况下,对于水印图像,它的行宽不得大于x/8列长不得大于y/8。在我们的例子中为了简便起见,取x和y均为256即256*256象素,水印图为32*32象素。由此可以看到,整个原图可以划分为x*y/64=1024个变换块如(图四)

图四

每个快的位置计为(m,n),那么所取的水印图像的每一个象素点可以对应一个变换块进行嵌入。

5.1.2.选取8*8变换块:

下面将原图像的每个8*8块分别作DCT变换,在此之前我们需要知道每个块中所包含象素点的坐标。通过图三我们不难总结出规律,即:所取(m,n)快中的左上点的行坐标为x=(m-1)*8+1而左上点的列坐标为y=(n-1)*block+1如图五。

图五

由此又可推出该块中所有象素点的坐标,用MATLAB的语句来表示可以写成block_dct1=I(x:x+block-1,y:y+block-1),这样block_dct1矩阵用来表示该块所有象素的值。之后对该块进行DCT变换,从而将空域图像8*8块矩阵变为频域8*8块矩阵。

5.1.3.边界自适应:

所谓边界自适应,也就是需要根据图像块的边缘信息密度自适应地调整嵌入强度,由于边界处的高频分量较高,相对低频分量不明显,所以在地频分量中嵌入的水印图像的强度应当比较大。同理在非边界区域嵌入的强度应当比较小。在这里我们取常量Alpha1=0.02作为非边界区的嵌入强度;Alpha2=0.1作为边界区的嵌入强度。关于区图像边界的问题可以通过MATLAB函数edge实现,这里另BW=edge(I,'prewitt')其中BW表示边缘图像的矩阵。要说明的是,首先边缘图像是二值图像,白色处表示原图像的边界。其次,edge函数中的I必须是灰度图像,如果I取的是彩色图像的话,就必须先将彩色图像变成灰度图象再取边界。

5.1.4.DCT变换与嵌入

首先,要检测变换块是否含有边界,可以将边界图像与原图相对应位置的象素块提出,将块中所有象素的值(只含0,1)求和的方法检测它是否含有边界,不妨设置一个阈值等于3,即该块中含有三个或以上的边界点就认为该块含有较多的边界信息,通过边界自适应的原理应当将较大的强度值嵌入。

然后,需要将每一个8*8块进行DCT变换,并将变换后的直流分量与强度值和水印图像相应点象素的信息相乘。在这里需要指出的是为了保证提取算法的简单可以令水印图像象素的值减一个比较小的值。

这一步用MATLAB来实现可以用block_dct1=dct2(block_dct1)分别将8*8块进行二维DCT变换,block_dct1(1,1)=block_dct1(1,1)* (1+Alpha*(mark(m,n)-0.1))其中的mark表示水印图像的象素值,将它嵌入块的直流项中。

5.1.5.恢复空域:

将嵌入后的块分别进行反DCT变换,并且按顺序存回I矩阵,这时的I就是嵌入水印后的图像。

5.2.嵌入算法扩展:

上面的方法一般只能对一幅灰度图象嵌入一幅二值图像,在下面将进行彩色图像嵌入三幅二值图像或一幅8色彩色图像的方法。

5.2.1 RGB彩色图像三个矩阵的划分

由于所有的RGB彩色图像都是由红绿蓝三个颜色组成的,在存储中这三个图像也是分为3个矩阵存储的,那么我们就可以将每个矩阵视为一个灰度,并且每个灰度图象中都可以分别潜入一个水印图像。

(1)   彩色图像的边缘图像

由于edge函数中的I必须是灰度图像,所以要想用GRAY=rgb2gray(I)语句将彩色图像变成灰度图象,再将灰度图象GRAY取其边界图像。

(2)   彩色图像分层

在MATLAB中,将彩色RGB图像读入I后,不同于灰度图象,I矩阵是一个三维矩阵。它可以表示为I(a,b,c)其中当c=1时,I(a,b,1)表示彩色图像中红色分量的矩阵,同样的,I(a,b,2)、I(a,b,3)分别表示彩色图像中绿色和蓝色分量的矩阵。在分层嵌入的时候,表示原图像矩阵就需要加入第三维分量c的值,否则MATLAB会默认c=1。

这里需要注意的是,在新图像的生成的时候,要将R、G、B三个矩阵全部存入输出的矩阵,否则会缺色。

5.2.2  八色彩色水印

   类似于上面的原理,作为水印的彩色图像也分为R,G,B三层,每层可以作为一幅水印图像分别嵌入原图像的矩阵中。提取的时候只要将提取出的三个水印图像存入一个三维矩阵即使一幅彩色图像。

但是这里要注意的是所用的水印图像的R、G、B分量分别只有0、1两个值。所以如果使用的彩色图像不当将会影响嵌入效果,甚至无法提取。

5.3  水印的提取

这里的水印提取方法可以看作是嵌入的反变换,由于在频域的8*8块的直流量中乘上了与水印信息有关的系数,那么同样我们可以通过原图像与水印图像8*8块直流分量的值相除得到的商即是与水印图像相关的值,由于嵌入时水印图像值只含0、1,而且我们在这个值得后面又减了一个小的常数,因此将除得的商减去1记为cc,这样就可以在嵌入的水印值为0的时候cc<0,反之在嵌入的水印值为1的时候cc>0。这样就可以绘制出水印图像。

5.4实验程序:

%定义常量

size=256;%图像大小:256*256

block=8;%块大小:8*8

%决定了水印图片不大于32*32

blockno=size/block;%每行块的个数

LENGTH=size*size/64;%总块的个数1024

Alpha1=0.03;%非边界处的强度因子

Alpha2=0.1; %边界处的强度因子

T1=3;%域值为三个边界点

I=zeros(size,size);%原始图像

BW=zeros(size,size);%原始图像的边缘图

block_dct1=zeros(block,block);

%mark=randn(1,LENGTH);%1行1024列的随机矩阵

mark=imread('bbc','bmp');%彩色水印图

mark1=logical(mark(:,:,1));%必须使用逻辑形式,否则57行的计算会有问题?

%以前在for里将mark1=mark(m,n,1)/255-0.5,再代入57行的式中,结果却不对?

mark2=logical(mark(:,:,2));

mark3=logical(mark(:,:,3));

figure(1)

subplot(2,2,1);

imshow(mark);title('水印图像');

%显示原图

subplot(2,2,2);I=imread('aa','bmp'); %读入彩色图象

imshow(I);title('原始图像:I');

%显示prewitt为算子的边缘图

GRAY=rgb2gray(I);%变灰度要用三位数,即彩色图片

BW=edge(GRAY,'prewitt');%取边界,用于边界自适应

subplot(2,2,3);imshow(BW);

title('原始图像的边缘');

%嵌入水印

for m=1:blockno;%到第(m,n)个块

   for n=1:blockno;

      x=(m-1)*block+1;%该块的起始像素

      y=(n-1)*block+1;

        block_dct1=I(x:x+block-1,y:y+block-1);%取该块所有像素

        block_dct1=dct2(block_dct1);%变换

        %第二维

        block_dct2=I(x:x+block-1,y:y+block-1,2);%取该块所有像素

        block_dct2=dct2(block_dct2);%变换

        %第三维

        block_dct3=I(x:x+block-1,y:y+block-1,3);%取该块所有像素

        block_dct3=dct2(block_dct3);%变换

    BW_8_8=BW(x:x+block-1,y:y+block-1);%取边缘的对应块像素

      if m<=1|n<=1;%m或n小于等于1时,

         T=0;

      else

         T=sum(BW_8_8);%列取和

         T=sum(T);%对整个BW_8_8中的数字取和

         %取和

      end

      if T>T1;%如果改为<则意味着高频区嵌入了低能量,低频区嵌入了高能量。所以在低频区嵌入的过高能量会是不该看出的水印显示出来

         %因此这里表示着边缘自适应性

          Alpha=Alpha2;%0.1

      else

         Alpha=Alpha1;%0.03

      end 

   block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*(mark1(m,n)-1));%对直流进行嵌入(*)

   block_dct2(1,1)=block_dct2(1,1)*(1+Alpha*(mark2(m,n)-1));%第二层

   block_dct3(1,1)=block_dct3(1,1)*(1+Alpha*(mark3(m,n)-1));%第三层

   block_dct1=idct2(block_dct1);%变回空域

   block_dct2=idct2(block_dct2);%第二层

   block_dct3=idct2(block_dct3);%第三层

   I(x:x+block-1,y:y+block-1)=block_dct1; %贴回原图像

   I(x:x+block-1,y:y+block-1,2)=block_dct2; %第二层

   I(x:x+block-1,y:y+block-1,3)=block_dct3;%第三层

   end

end

%显示嵌入水印后的图像

subplot(2,2,4);imshow(I);title('嵌入水印后的图像');

imwrite(I,'zhuwater.bmp','bmp');

figure(2);subplot(2,2,1);imshow(mark(:,:,1));title('原水印的第一层');

subplot(2,2,2);imshow(mark(:,:,2));title('原水印的第二层');

subplot(2,2,3);imshow(mark(:,:,3));title('原水印的第三层');

imwrite(I,'shuiyin90.jpg','jpg','quality',90);%压缩

%通过原图片对比提取水印

I=imread('aa.bmp','bmp');

J=imread('zhuwater.bmp','bmp');

K=zeros(32,32,3);%水银图片为32*32

for q=1:blockno;

    for p=1:blockno;

        x=(p-1)*block+1;

        y=(q-1)*block+1;

  BLOCK1=I(x:x+block-1,y:y+block-1);%取无水印图的块

  BLOCK2=J(x:x+block-1,y:y+block-1);%取带水印图的块

  BLOCK1=dct2(BLOCK1);

  BLOCK2=dct2(BLOCK2);

  a=BLOCK2(1,1)/BLOCK1(1,1)-1;

  %第二层

  BLOCK12=I(x:x+block-1,y:y+block-1,2);

  BLOCK22=J(x:x+block-1,y:y+block-1,2);

  BLOCK12=dct2(BLOCK12);

  BLOCK22=dct2(BLOCK22);

  b=BLOCK22(1,1)/BLOCK12(1,1)-1;

  %第三层

  BLOCK13=I(x:x+block-1,y:y+block-1,3);

  BLOCK23=J(x:x+block-1,y:y+block-1,3);

  BLOCK13=dct2(BLOCK13);

  BLOCK23=dct2(BLOCK23);

  c=BLOCK23(1,1)/BLOCK13(1,1)-1;

  if a<0

      W(p,q)=0;%恢复水印图像

  else

      W(p,q)=1;

  end

  if b<0

      W2(p,q)=0;

  else

      W2(p,q)=1;

  end

  if c<0

      W3(p,q)=0;

  else

      W3(p,q)=1;

  end

    end

end

figure(3);

subplot(2,2,1);imshow(W);

title('从第一层提取的水印(红)');%0表示黑色

subplot(2,2,2);imshow(W2);

title('从第二层提取的水印(绿)');

subplot(2,2,3);imshow(W3);

title('从第三层提取的水印(兰)');

K(:,:,1)=W;

K(:,:,2)=W2;

K(:,:,3)=W3;

subplot(2,2,4);imshow(K);title('合并的彩图');

%检测压缩后的水印图像

J=imread('shuiyin90.jpg','jpg');

for q=1:blockno;

    for p=1:blockno;

        x=(p-1)*block+1;

        y=(q-1)*block+1;

  BLOCK1=I(x:x+block-1,y:y+block-1);%取无水印图的块

  BLOCK2=J(x:x+block-1,y:y+block-1);%取带水印图的块

  BLOCK1=dct2(BLOCK1);

  BLOCK2=dct2(BLOCK2);

  a=BLOCK2(1,1)/BLOCK1(1,1)-1;

  %第二层

  BLOCK12=I(x:x+block-1,y:y+block-1,2);

  BLOCK22=J(x:x+block-1,y:y+block-1,2);

  BLOCK12=dct2(BLOCK12);

  BLOCK22=dct2(BLOCK22);

  b=BLOCK22(1,1)/BLOCK12(1,1)-1;

  %第三层

  BLOCK13=I(x:x+block-1,y:y+block-1,3);

  BLOCK23=J(x:x+block-1,y:y+block-1,3);

  BLOCK13=dct2(BLOCK13);

  BLOCK23=dct2(BLOCK23);

  c=BLOCK23(1,1)/BLOCK13(1,1)-1;

  if a<0

      W(p,q)=0;

  else

      W(p,q)=1;

  end

  if b<0

      W2(p,q)=0;

  else

      W2(p,q)=1;

  end

  if c<0

      W3(p,q)=0;

  else

      W3(p,q)=1;

  end

    end

end

K(:,:,1)=W;K(:,:,2)=W2;K(:,:,3)=W3;

figure(4);imshow(K);title('90压缩的提取');

5.5运行结果与分析

由以上结果可以看出,该方法在水印嵌入和提取中方法比较简单,在单层提取时误差虽然不是很大,但是在组成彩色水印还原图像时误差就稍微大了一些。

这个方法对于压缩攻击的抗性很低,可以说是脆弱的,很明显在90质量的压缩下已经很难分辨水印内容。

但是如果将第10页(*)处的语句改为:

block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*(mark1(m,n)-0.1));

则对压缩的抗性明显增强,这样却会影响不被攻击情况下的提取质量,当只嵌入一层水印时,效果却非常好,无论是普通提取还是压缩后提取。

结束语

数字水印在版权标识、隐藏标识和篡改提示、数据防伪上具有不可替代的作用,它将在商业、金融、军事和个人消费上带来巨大的商业利润。自1995年以来,该领域的研究工作已经取得了巨大的进展。随着数字水印技术的日趋成熟,数字水印技术将在电子商务、视频点播、远程教学和远程培训中发挥越来越大的作用。

参考文献

[1] 黄继武, YunQ.SHI, 程卫东. DCT域图像水印:嵌入对策和算法. 电子学报, 20## ,28(4):57-60

[2] 伯晓晨, 李涛, 刘路等编著. MATLAB工具箱应用掼—信息工程篇.北京:电子工业出版社,2000,4

[3] 胡昌华, 张军波等编著. 基于MATLAB的系统分析与设计—小波分析.西安: 西安电子科技大学出版社, 2000,6.

更多相关推荐:
数字图像处理报告

数字图像处理报告1上机内容及调试分析1编程实现打开一个灰度图像能够显示图像clearalltimread39F数字图像处理上机girlbmp39读取图像Irgb2grayt将彩色图像转为灰度图像imshowI显...

数字图像处理 实验报告(完整版)

数字图像处理实验一MATLAB数字图像处理初步一显示图像1利用imread函数读取一幅图像假设其名为lilytif存入一个数组中2利用whos命令提取该读入图像flowertif的基本信息3利用imshow函数...

数字图像处理实验报告

数字图像处理实验报告班级通信103学号20xx27201姓名计富威指导教师孙洁实验一MATLAB数字图像处理初步一实验目的与要求1熟悉及掌握在MATLAB中能够处理哪些格式图像2熟练掌握在MATLAB中如何读取...

数字图像处理读书报告1

数字图像处理读书报告钱增磊提要本人现进入江南大学物联网工程学院研究生开始进行研究计划所研究方向为图像处理以及智能视频分析先要对其基础学科进行深入学习着重掌握图像处理的基础概念等有关知识由导师梁教授的建议选择冈萨...

数字图像处理报告

基于MATLAB的字符识别研究汽车牌照识别程序的设计姓名苗盼盼学号20xx14018院系信息工程学院指导老师许丽张帆摘要本次课程设计的目的是通过对基于MATLAB的字符识别的研究以汽车牌照识别的设计为实例详细介...

数字图像处理报告

实验报告课程名称数字图像处理实验项目点运算和直方图处理实验仪器PC机MATLAB软件系别光电信息与通信工程学院专业测控技术与仪器班级学号测控090120xx010776学生姓名林云峰实验日期20xx年12月成绩...

数字图像处理报告

数字图像处理报告姓名张行学号20xx03284班级计科11202序号31院系计算机科学学院一实验目的1了解数字图像处理技术2通过上机实验编写算法实现各种功能3加深对数字图像处理的认识二实验原理1模糊处理1了解空...

数字图像处理实验报告

数字图像处理实验报告姓名罗靓学号0103120xx4班级地理信息系统1201指导教师梅小明地球科学与信息物理学院20xx年5月24日VisualC数字图像处理一程序功能视觉是人类从大自然中获取信息的最重要的手段...

数字图像处理实验报告

数字图像处理与分析课程设计20##~20##学年第二学期院(系)计算机科学与通信工程专业计算机科学与技术班级计算机1201学号学生姓名指导老师一.实验目的:熟悉数字图像处理中各种椒盐噪声的实质,明确各种滤波算法…

数字图像处理实验报告

实验报告实验名称:图像变换及频域滤波课程名称:数字图像处理1.实验目的(1)编写快速傅里叶变换算法程序,验证二维傅里叶变换的平移性和旋转不变性;(2)实现图像频域滤波,加深对频域图像增强的理解;(3)总结实验过…

《数字图像处理》综合性实验报告

数字图像处理综合性实验题目灰度图像边缘检测班级学生姓名学生学号指导老师提交时间成绩华南农业大学信息学院一实验目的1掌握各种边缘检测算子的概念及原理2掌握各种边缘检测算子的算法3掌握各种边缘检测算子VC实现的编制...

数字图像处理实验报告

数字图像处理实验报告小组序号第组组员蒋华熔1104210121刘野1104210125赵若昕1104210114高新宇1104210117查智超1104210116指导老师张玉珍20xx年5月28日实验二一实验...

数字图像处理报告(25篇)