matlab 矩阵特征值如何提取一百张相似图片的hvs特征值计算平均数

我用MATLAB做的水印,怎么用stirmark进行攻击?急求_百度知道
我用MATLAB做的水印,怎么用stirmark进行攻击?急求
我有更好的答案
v)中,S是非负整数(且满足T1=S/4, T2=3*T1)。嵌入完成后,对c’(u,v)实施反2阶三维DCT变换就得到了嵌入水印后的视频数据,大多数的DCT域水印算法把水印信号嵌入到DCT系数的低频部分。但低频区域是图像的能量集中部分,嵌入到低频会降低透明性。而嵌入在高频虽然透明性比较好,如图2-3所示,y’)是变换后新图像的像素点,N是图像阶数,从而降低水印的鲁棒性.于是大多数的水印算法将水印信号嵌入在载体图像DCT系数的中频部分,(x,y)是原图像的像素点,所有用到的参数都应作为密钥保留: (Period-times)次即可使其恢复至原图,可以视为先对视频的每一帧进行2D-DCT,再对帧间方向进行1D-DCT,可以提高水印信息的安全性;(2) 置乱技术可以分散错误比特的分布,提高数字水印的视觉效果,从而增强其鲁棒性,且为了抵抗滤波和压缩攻击,我们将置乱后的水印序列嵌入到了第一帧DCT系数c(u。在接下来的嵌入过程中,充分利用了这些特性。如图3-1中间分支所示。嵌入过程如图3-1所示。 图3-1
水印嵌入过程从视频中读取亮度分量Y。3,所以可以把视频的每一帧看作是一幅静止的图像。 图3-3
水印盲提取过程方案如下:从待提取水印的视频数据 (可能是被攻击过后的视频)中抽取出亮度分量Y’,根据密钥,把所有的Y分量分为32组;(3) 每组4帧:(1) 对行分块(4块);(2) 对列分块(5块)。根据式(3-2)所示的运动敏感性阈值计算公式,寻找32帧满足敏感性比较大的视频帧Yi (i=1,存入变量Lm;(2) 去掉这个最大的块再比较;(4) 赋第一块的L的权重为20, ,但依然需要一些参数;获得了上面的各项参数,水印的提取就十分简单,w(u:(1) 读取视频文件;(2) 提取所有的Y分量,维数不同,只能逐个象素赋值,2,…32)。
(t代表当前帧的编号)接下来:嵌入水印数据将置乱的水印序列嵌入所选的DCT系数中,将Y32中的数据按照64*64的尺寸切分成20块BYij (j=1,再将它们放回原来的位置即可:根据公式计算数据块BY的亮度敏感性L和纹理敏感性D第四步:选取L和D都比较大的一块嵌入水印(1) 判断最大的L,2,v)是水印序列中的数据。第三步,(x’: (1) 水印的结构;(2) 水印的嵌入区域;(3) 嵌入技巧,从各组中选出一个最运动敏感的,判断每组中最大的Y_deltmax,存入变量m;(4) 定位最大的Y_deltmax、式(3-4)所示的亮度敏感性Lk和纹理敏感性Dk计算公式,通过计算。需要说明的是,在整个嵌入过程中,再将其继续,具体过程如图3-3所示。最后,折衷考虑复杂度和性能。这就是利用Arnold的正变换来进行的置乱恢复方案,即图像的尺寸大小,一般多为正方形图像。由于Arnold变换具有周期性,因此可利用其周期性Period来对图像进行反变换.2 视频水印的嵌入水印嵌入算法关键在于以下三点、纹理敏感性和亮度敏感性,v)是嵌入水印后的系数;Y32是就是所需的视频帧中Y分量满足敏感性的32帧视频 (355*288*32)。第二步:分块过程,但对大多数的图像处理对高频成分影响较大,存入变量w。第七步。它们是,以达到透明性和鲁棒性的最佳折衷;(5) 计算第2块到第20块的L的权重;第五步:(1) 采用置乱技术的合法者可以自由控制算法的选择:三维DCT变换由于视频是由图像数据流组成的,我们选择计算值都比较高的20块数据中的一块
( )作为水印的嵌入块。
(3-4) 其中,
是BYk中的亮度数据,我们对选定的一块数据块 实施了2阶三维DCT变换。根据NEC算法的思想,即嵌入经过3D-DCT变换后的数据块中的第一帧数据中。然后把这些数据进行反3D-DCT变换后放回原位置,参数的选择以及使用随机数技术,从而使非法使用者难以破译图像内容:写视频文件3.3视频水印的检测水印提取是嵌入的逆过程,本算法的一大优势是,水印提取时无需原始视频数据的参与。即在水印嵌入过程中可将水印置乱次数作为密钥times,再进行水印嵌入,当水印提取出来时,v)是DCT变换后第一帧中的系数,c’(u;本文选取二值图像作为水印。为了提高水印的鲁棒性。Arnold变换次数由版权所有者保管。对水印进行置乱有以下优点:将所选的数据放回原位置最后一步,…20),于是我们可得到20块尺寸为64*64*32的三维数据块BYk (k=1,2,…20)。
亮度分量的分块根据式(3-3)。
第六步;(3) 隔十帧取一帧,共从32帧中取4帧以降低运算量;(4) 一个数一个数的赋值;切成20块,每块为64*64*4的数据块BY。对运动图像序列进行3D-DCT肯定对
望采纳3.1水印的预处理采用二值图像作为待嵌入的水印数据,本文针对的研究对象因为是二维图像故采用的是二维Arnold变换。二维Arnold变换定义为:
(3-1)其中,抽出32帧中的四帧亮度分量 ,然后分别从这组数据中提取水印。在图3-3中,首先将 分隔成20块 ,并找到和 对应的 。然后,对 做二阶三维DCT变换,根据式(3-6)提取出水印数据 。
(3-6)其中,
是DCT系数。最后,我们将 进行Arnold变换,得到水印图像,作为最终提取出的水印。具体步骤如下所述:第一步:抽取32帧视频Y分量数据:(1) 读取嵌入水印图像的视频文件;(2) 提取所有的Y分量,把所有的Y分量分为32组;(3) 每组4帧,从各组中选出一个最运动敏感的,判断每组中最大的Y_deltmax,存入变量m;(4) 定位最大的Y_deltmax,存入变量w;Y32是就是所需的视频帧中Y分量满足运动敏感性的32帧视频,Y32是一个355*288*32的三维数组。第二步:分块过程:(1) 对行分块(4块);(2) 对列分块(5块);(3) 隔十帧取一帧,从32帧中共取4帧以降低运算量;(4) 一个数一个数的赋值;切成20块,每块为64*64*4的数据块BY,维数不同,只能逐个象素赋值。经过计算其亮度敏感性和纹理敏感性并排序,index[20]就是本文算法中嵌入水印的块;第三步:三维DCT变换第四步:Arnold变换由于本算法中水印图像是二值图像,其Arnold变换是二维变换,周期是Period,嵌入水印时变换了times次,所以此处只需变换(Period-times)次就可得到结果。第五步:写图像文件提取水印图像数据并写成图像文件第六步:检测水印图像存在与否,并与原水印图像比较。最后一步:进行实验,验证本文算法的可见性和鲁棒性。经过以上步骤就是水印图像信息嵌入视频中的方法,具体实现过程见第四章。 4 用MATLAB实现视频水印的嵌入和检测Matlab是近年来在国内外广泛流行的一种可视化科学计算软件。它的特点是结构简单、数值计算高效、图形功能完备、图像处理方便,是国际公认的最优秀的科学计算与数学应用软件之一。利用Matlab实现数字水印图像算法便捷、高效,省去了繁琐的程序代码,避免了科研人员在编程上浪费精力。其内容已涉及矩阵代数、微积分、应用数学、信号与系统、神经网络、小波分析及应用、数字图像处理、计算机图形学、自动控制与通信技术等诸多方面,是科学计算、系统仿真、信号与图像处理的主流软件,受到了各方科研人员的青睐,在数字水印技术中得到了广泛的应用。将Matlab应用于数字水印技术,其优点主要有以下几个方面:(1) 强大的数值计算功能视频水印技术是针对图像进行研究的,而图像是由矩阵表达的,将水印嵌入视频中及从视频中将水印提取出来都意味着大量的矩阵运算,而矩阵运算更是Matlab语言的核心,表达自然、直接。因此,利用Matlab强大的矩阵运算功能来实现图像水印技术非常合适。(2) 方便的图像读取和显示功能视频水印首先要将数据从视频中读取出来,嵌入水印后还要将嵌入水印后的数据还原为视频。Matlab为用户提供了专门的图像处理函数,用于读写显示图像数据。这种方法不像其他编程语言那样,需要编写复杂的代码,只需要简单地调用Matlab提供的函数即可,相关的函数及其功能主要有下列一些:imread 将图像读入工作空间;imwrite 将图像写入磁盘;image 提供最原始的图像显示函数;imshow 是最常用的显示各种图像的函数;load将文件读入工作空间;(3) 高效的图像变换功能数字水印嵌入算法一般分空域方法和频域方法。空域方法指通过改变象素的亮度值来加入数字水印:频域方法指图像通过某种变换后再嵌入数字水印。与空域法相比,频域法具有如下优点:在变换域中嵌入的水印信号可以分布到空域的所有象素上,有利于保证水印的不可见性。在变换域中,视觉系统的某些特性(如视频特性)可以更方便地结合到水印编码过程中。变换域的方法可以与国际数据压缩标准兼容,从而实现压缩域内的水印编码。因此,变换域的方法应是水印算法未来趋势的主流。但是变换域的算法一般来讲计算量都比较大,需要复杂的编程运算,Matlab则改变了这种现状。在Matlab图像处理工具箱中,提供了常用的图像变换函数,复杂的变换域算法在Matlab中只需简单地调用函数即可实现,充分体现了使用Matlab的简便性和高效性。主要图像变换函数如下:dct是一维离散余弦变换;idct是一维离散余弦逆变换;dct2是二维离散余弦变换;idct2是二维离散余弦逆变换;(4) 丰富的图像处理函数水印技术要求嵌入的水印不可见且有较强的鲁棒性。不可见性可通过视觉效果和计算图像的峰值信噪比来比较优劣,而鲁棒性则要对水印后图像进行各种攻击,通过比较攻击后图像提取出的水印情况来说明问题。Matlab有各种图像处理函数,可实现对图像的各种攻击。综上所述,Matlab具有语言简洁、函数丰富、使用方便、数值计算高效等特点,将功能强大的Matlab软件应用于数字水印技术是有效的选择,因此,本文采用Matlab对图像水印进行研究。4.1水印的嵌入过程(1) 基于Arnold变换的图像置乱Matlab实现如下:Arnold变换由function r=Arnold(w0,row,colum,times) 实现,其中w0为读取的图像数据,row是行数,colum是列数,times是Arnold变换次数。function r=Arnold(w0,row,colum,times)
for k=1:times
for i=1:row
for j=1:colum
i1=mod(i1,row);
if j1&colum
j1=mod(j1,colum);
w1(i1,j1)=w0(i,j);
r=w0;用imwrite(w0,'Arnold.bmp', 'bmp')写置乱后的图像文件;在MATLAB中用imshow('Arnold.bmp')显示此图像。本文采用二维的二值水印图像watermark.bmp,我们将图像数据(64*64)扫描到二维的矩阵中并实施Arnold变换,从而得到置乱后的二维矩阵。随着迭代次数的增加,图像逐渐趋于混乱,不过到一定次数时,又将回到原图。因为watermark.bmp大小为64*64,故经过试验图像迭代48次后将回到原图,即周期性Period=48。本算法选择置乱8次,因为8次Arnold变换后原水印图像已经成为无形状的图像。实验结果表明,该方法能较好地刻划图像的置乱程度,与人的视觉基本相符。但需要指出的是不一定图像的置乱次数越多其置乱度就越高。所以,在水印嵌入时,为了提高其鲁棒性而增加置乱次数的方法是不科学的,合理的做法是计算置乱后图像的置乱度,达到较为满意的置乱度后就可停止置乱,避免盲目的提高置乱次数。置乱次数作为密钥有视频版权所有者保管,如果非法所有者不知道置乱次数就很难恢复出原水印图像。 原水印图像如图4-1所示,本算法实现置乱8次后效果如图4-2所示:
图4-1 水印原图像
图4-2 置乱8次后(2)Matlab实现嵌入过程:本文中选取352×288×142的yuv格式视频流进行测试。YUV颜色模型是一种常用的颜色模型,其基本特征是将亮度信号与颜色信号分离,由于人眼对亮度的变化比对颜色的变化敏感,因此,YUV模型中Y分量的值所占带宽大于等于彩色分量所占带宽。YUV色彩空间模型可以在一定程度上避免RGB模型的高分散性和高相关性所带来的闭值划分问题,计算也较为简单。这种色彩空间模型中Y和UV分量是相互独立的,反映了人眼观察彩色的视觉规律,在实际中应用较多。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V”表示的则是色度(Chrominan“或Chroma),作用是描述影像色彩及饱和度,用于指定像素颜色。因此选择YUV颜色空间更加稳定,易于分析。本文选择测试视频中的第39帧如图4-3所示。YUV格式的视频中Y:U:V=4:2:2,但通俗叫“420”格式。
图4-3 未嵌入水印的视频第一步:读取文件;读取视频文件由[yuv,Y,u,v,num_f]=loadyuv(filename)实现,filename是所选取得视频文件名称。yuv是一个四维数组,它返回的是视频的yuv分量,Y是亮度分量,u和v是色彩分量,num_f是视频文件中所有帧的数目。读取一帧数据的YUV分量在Matlab中由以下源代码实现:function [YUV,Y,U,V] = loadFileYUV(width,heigth,Frame,fileName,format)[Teil_h,Teil_b]=YUVFormat(format);fileId = fopen(fileName,'r');其中width:每一帧的宽度;heigth:每一帧的高度;Frame:当前load的那一帧;filename:视频文件名;Teil_h:垂直比例参数;Teil_b:水平比例参数;YUV:返回值,返回YUV分量,是一个三维变量,本文算法中将U、V分量的宽度和高度设成与Y一样的了,因此U、V分量中有重复的。YUV(:,:,1)存放Y分量;YUV(:,:,2)存放U分量;YUV(:,:,3)存放V分量;Y,U,V是三个分量的实际值,二维矩阵,没有重复,他们的长度可能不一样。Y_delt(j)=delt(Y(:,:,w(i)),Y(:,:,4*(i-1)+j)); 其中Y_delt是当前帧与下一组各帧的Y的差,m(i)=max(Y_delt(j));判断每组中最大的Y_deltmax,存入变量m,以此来得到每组中最运动敏感的视频帧。w(i+1)=4*(i-1)+k定位最大的Y_deltmax,存入变量w。
最后得到Y32=double(Y(:,:,w)), Y32是视频帧中Y分量满足敏感性的32帧视频是一个355*288*32的三维数组。第二步:分块;分块时因为需要块标号,由此造成维数不同,所以只能逐个象素赋值,在Matlab中由BY(t1,t2,t3,j*5+k+1)= double(Y32((64*j+t1),(64*k+t2),i))实现,切成20块,每块为64*64*4的数据块BY ,其中t1是块的杭坐标,t2是块的列坐标,t3帧标号,j*5+k+1是快标号。第三步:三维DCT变换;运动图像序列的每一帧可以看作是静止图像 对运动图像序列进行3D DCT,可以视为先对每帧进行2D DCT,再对帧间方向进行1D DCT。 %对每一块的帧间方向进行1D DCT变换 for i=1:64
for j=1:64
dcta(i,j,1:4,index(20))=dct(BY(i,j,1:4,index(20)));
end end%对每一块的每一帧进行2D DCT for i=1:4
dct3a(:,:,i,index(20))=dct2(dcta(:,:,i,index(20))); end 第四步:嵌入水印过程;读入二值水印图像由message=double(imread('watermark.bmp'))实现 ,message是一个由0和1组成的二维数组。
将置乱的水印序列嵌入所选的dct系数中,源代码如下所示:其中dct3a是DCT系数,index[20]是纹理敏感性和亮度敏感性都比较好的一块,S作为密钥由版权所有者保管。S=60;T1=S/4;T2=3*T1;for i=1:64
for j=1:64
if (w2(i,j)==1)
if (dct3a(i,j,1,index(20))&=0)
dipin(i,j)=dct3a(i,j,1,index(20))-mod(dct3a(i,j,1,index(20)),S)+T1;
if (dct3a(i,j,1,index(20))&0)
dipin(i,j)=dct3a(i,j,1,index(20))+mod(abs(dct3a(i,j,1,index(20))),S)-T1;
if (w2(i,j,:)==0)
if (dct3a(i,j,1,index(20))&=0)
dipin(i,j)=dct3a(i,j,1,index(20))-mod(dct3a(i,j,1,index(20)),S)+T2;
if (dct3a(i,j,1,index(20))&0)dipin(i,j)=dct3a(i,j,1,index(20))+mod(abs(dct3a(i,j,1,index(20))),S)-T2;
endend第五步:三维DCT反变换;先对块的第一帧进行二维DCT反变换,然后在对其它三帧进行二维反变换,最后对帧间方向进行一维DCT反变换。此过程由Matlab实现如下:二维DCT反变换:idcta(:,:,1,index(20))=idct2(dipin); for i=2:4
idcta(:,:,i,index(20))=idct2(dct3a(:,:,i,index(20))); end对每一块的帧间方向进行一维DCT反变换for i=1:64
for j=1:64
idct3a(i,j,1:4,index(20))=idct(idcta(i,j,1:4,index(20)));
end end第六步:把这些数据放入原位置;第七步:写视频文件;
写视频文件由以下程序实现,其中fileId为写入视频文件的位置。fileId = fopen('vectra_w.yuv','wb')fwrite(fileId,Y(:,:,i)' , 'uchar');fwrite(fileId,u(:,:,i)' , 'uchar');fwrite(fileId,v(:,:,i)' , 'uchar');4.2水印的检测过程水印的检测过程就是嵌入水印的逆过程,其Matlab实现如下所示:filename='vectra_w.yuv';此文件是对含有水印的视频(可能是被攻击过后的视频)文件。[yuv,Y,u,v,num_f]=loadyuv(filename);读取视频文件和三维DCT正变换其原理和嵌入过程相同,此处不再赘述。提取水印数据在Matlab中由以下程序实现,其中S、T1、T2等都是嵌入时的密钥,版权所有者拥有它。for i=1:64
for j=1:64
if (mod(abs(dct3b(i,j,1,index(20))),S)&((T1+T2)/2))
shuiyin(i,j)=1;
if (mod(abs(dct3b(i,j,1,index(20))),S)&=((T1+T2)/2))
shuiyin(i,j)=0;
endendArnold反变换如下所示: w0=w2=Arnold(w0,Hm,Wm,40);w0是检测到的水印数据,Hm和Wm是水印数据的行和列,变换次数为40。写水印文件,检测水印图像存在与否,并且和原水印图像有无差异。imwrite(w2,'恢复.bmp', 'bmp');imshow('恢复.bmp');综上,水印的嵌入主要经过将视频和水印分别进行预处理,然后根据嵌入算法选择水印的合适嵌入位置以及合理嵌入策略,从而得到含水印的视频数据。在各个环节中采用HVS特性来提高视频水印的鲁棒性.最后用相应的视频水印检测策略提取出水印从而实现视频的保护。结果显示本文算法能成功提取出水印图像。5 实验结果与分析对水印的性能建立合理的评估方法和基准是数字水印研究的一个重要内容。对视频水印的评估主要包括以下两方面:嵌入水印对视频引起的失真的主观和客观定量评估;水印鲁棒性的评估。一般而言,在水印的不可见性和鲁棒性之间需要进行折中。因此为了能够进行公平合理的性能评估,我们必须尽量保证水印系统是在可比较的条件下进行测试,即应该在给定视频视觉可见性要求的前提下进行测试。本文中首先对水印的不可见性进行测试,然后对其鲁棒性进行测试。。各种嵌入技巧的最终目的还是为了尽量地提高水印的鲁棒性和透明性。用于版权保护的数字水印在尽量提高鲁棒性的同时还要满足人类的视觉极限,因此必须根据HVS找到嵌入位置。本文将HVS归纳为运动敏感性,详见式(3-5)。
(3-5)其中:(1) 嵌入过程第四步产生的块BY的排序结果,由此我们可以得知水印的大致嵌入位置;(2) 嵌入时指定的参数S;(3) 需要Arnold变换的次数和周期,c(u。具体方案如下所述:第一步:抽取32帧视频Y分量数据;(6) 同理对D进行处理;(7) 计算每块BY的权重;
(8) 对所有的20块BY的权重qz按由小到大的顺序进行排序,并保持原来的位置索引index,则index[20]就是所要选取的块,因为它是最有效的数据,根据NEC算法,嵌入到它里面的水印才具有最强的鲁棒性
采纳率:50%
来自团队:
为您推荐:
其他类似问题
水印的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。网站已改版,请使用新地址访问:
Wpsnr2 图像质量评价方法-
采用HVS的 相似度准则计算
下面的MATLAB程序计 GDI-Bitmap 243万源代码下载- www.pudn.com
&文件名称: Wpsnr2& & [
& & & & &&]
&&所属分类:
&&开发工具: matlab
&&文件大小: 2 KB
&&上传时间:
&&下载次数: 0
&&提 供 者:
&详细说明:图像质量评价方法-Wpsnr
采用HVS的图像相似度准则计算WPSNR
下面的MATLAB程序计算两幅图像的加权峰值信噪比。相比常用的PSNR而言,考虑到HVS(human visual sytem)的影响。-Image quality
uation method of image-Wpsnr
similarity criteria using HVS computing program MATLAB WPSNR
below the weighted peak signal to noise ratio of the two images. Compared to conventional PSNR, given the impact of HVS (human visual sytem) a.
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&Wpsnr2.m
&输入关键字,在本站243万海量源码库中尽情搜索:【计算机视觉与图像处理】(22)
在无参考图像的质量评价中,图像的清晰度是衡量图像质量优劣的重要指标,它能够较好的与人的主观感受相对应,图像的清晰度不高表现出图像的模糊。本文针对无参考图像质量评价应用,对目前几种较为常用的、具有代表性清晰度算法进行讨论分析,为实际应用中选择清晰度算法提供依据。
(1)Brenner 梯度函数
Brenner梯度函数是最简单的梯度评价函数,它只是简单的计算相邻两个像素灰度差的平方,该函数定义如下:
其中:f(x,y) 表示图像f对应像素点(x,y)的灰度值,D(f)为图像清晰度计算结果(下同)。
(2)Tenengrad 梯度函数
Tenengrad 梯度函数采用Sobel算子分别提取水平和垂直方向的梯度值,基与Tenengrad 梯度函数的图像清晰度定义如下:
G(x,y) 的形式如下:
其中:T是给定的边缘检测阈值,Gx和Gy分别是像素点(x,y)处Sobel水平和垂直方向边缘检测算子的卷积,建议使用以下的Sobel算子模板来检测边缘:
(3)Laplacian 梯度函数
Laplacian 梯度函数与Tenengrad梯度函数基本一致,用Laplacian算子替代Sobel算子即可,该算子定义如下:
因此基于Laplacian 梯度函数的图像星清晰度的定义如下:
其中G(x,y)是像素点(x,y)处Laplacian算子的卷积。
(4)SMD(灰度方差)函数
当完全聚焦时,图像最清晰,图像中的高频分量也最多,故可将灰度变化作为聚焦评价的依据,灰度方差法的公式如下:
(5)SMD2 (灰度方差乘积)函数
灰度差分评价函数具有较好的计算性能,但其缺点也很明显,即在焦点附近灵敏度不高,即该函数在极值点附近过于平坦,从而导致聚焦精度难以提高。在文章《》中提出了一种新的评价函数,称之为灰度方差乘积法,即对每一个像素领域两个灰度差相乘后再逐个像素累加,该函数定义如下:
(6)方差函数
因为清晰聚焦的图像有着比模糊图像更大的灰度差异,可以将方差函数作为评价函数:
其中:为整幅图像的平均灰度值,该函数对噪声比较敏感,图像画面越纯净,函数值越小。
(7)能量梯度函数
能量梯度函数更适合实时评价图像清晰度,该函数定义如下:
(8)Vollath函数
Vollath函数定义如下:
其中:为整幅图像的平均灰度值,M和N分别为图像宽和高。
(9)熵函数
基于统计特征的熵函数是衡量图像信息丰富程度的一个重要指标,有信息论可知,一幅图像 f 的信息量是由该图像的信息熵 D(f) 来度量:
其中:Pi 是图像中灰度值为i的像素出现的概率,L为灰度级总数(通常取值256)。根据Shannon信息论,熵最大时信息量最多。将此原理应用到对焦过程,D(f)越大则图像越清晰。熵函数灵敏度不高,依据图像内容不同容易出现与真实情况相反的结果。
(10) EAV点锐度算法函数
徐贵力、张霞等提出了一种基于边缘锐度的算法用于评价图像的清晰度。通过统计图像某一边缘方向的灰度变化情况来评价。计算公式如下:
其中:df/dx为边缘法向的灰度变化率,f(b) - f(a)为该方向的总体灰度变化。该算法只对图像的特定边缘区域做统计,能否代表整幅图像的清晰度仍有疑问,此外计算前需人工选定边缘区域,不便实现程序运算的自动化,因为王鸿南等在论文
中对上述算法进行了改进,改进如下:
将针对边缘的梯度计算改为逐个像素领域梯度的计算,以便算法能对图像的整体进行评价,并使算法实现自动化。
对方格像素 8 领域的灰度变化进行距离加权,水平和垂直方向的权重为1,而45度和135度方向的权重为 。
对计算结果按图像的大小进行规格化,以便于图像的对比。
经过以上三步改进后的点锐度算法为:
其中:M和N为图像的行数和列数。
(11)Reblur 二次模糊
如果一幅图像已经模糊了,那么再对它进行一次模糊处理,高频分量变化不大;但如果原图是清楚的,对它进行一次模糊处理,则高频分量变化会非常大。因此可以通过对待评测图像进行一次高斯模糊处理,得到该图像的退化图像,然后再比较原图像和退化图像相邻像素值的变化情况,根据变化的大小确定清晰度值的高低,计算结果越小表明图像越清晰,反之越模糊。这种思路可称作基于二次模糊的清晰度算法,其算法简化流程如下图:
(12)NRSS 梯度结构相似度
Wang等利用人类视觉系统(HVS)非常适于提取目标的结构信息的特点,提出了图像结构相似度概念(SSIM),认为只要能计算目标结构信息的变化,就能够得到感知图像失真值。杨春玲等基于此思路,将该方法引入到计算全参考图像的清晰度评价中,认为图像的清晰度可以使用目标图像与参考图像间的结构相似度来表示,而图像间的结构相似度包含以下三个部分的比较:
而C1、C2和C3 是为了避免分母为0而设的常数。图像的结构相似度由下式计算可得:
为简单起见可以令
谢小甫等进一步改进了杨春玲等的方法,根据结构相似度的相关思想结合人烟视觉系统的相关特点,设计了无参考图像清晰度的评价指标(NRSS),计算方法如下:
(a)为待评价图像构造参考图像。定义待评价图像为I,而参考图像 ,即对待评价图像 I 进行低通滤波得到参考图像 。实验表明,基于圆盘模型的均值滤波器和高斯模型的平滑滤波器都可以取得较好的效果,为了更好的与成像系统匹配,建议采用 7x7 大小且 的高斯平滑滤波器。在需要实时处理的工程应用中7x7均值滤波器并不会是评价效果下降很大。
(b)提取图像 I 和 的梯度信息。利用人眼对水平和垂直方向的边缘信息最为敏感的特性,使用Sobel算子分别提取水平和垂直方向的边缘信息,定义
I 和 的梯度图像是G
(c)找出梯度图像 G 中梯度信息最丰富的 N 个图像块。将图像G划分为 8x8 的小块,块间的步长为4,即相邻块有50%重叠,这是为了避免丢失重要的边缘。计算每块的方差,方差越大说明梯度信息越丰富,找出其中方差最大的N块,记为,对应的中的对应块定义为
。N的值大小直接影响评价结果,同时也影响算法运行时间。在后面的实验中设
(d)计算结构清晰度NRSS。先计算每个xi和 yi的结构相似度SSIM(xi, yi),其中SSIM计算方法参见前面的定义,则图像的无参考结构清晰度定义为:
(13)FFT 图像变换域
(14)No-Reference
Perceptual Quality Assessment of JPEG Compressed Images
在这篇文章中,作者【Zhou Wang】等针对JPEG压缩图片提出了一种新的无参图像质量评价方法。
JPEG图片是基于8x8块的DCT变换的编码技巧,它是有损的因为对DCT变换系数做量化的时候会产生量化误差。量化就会导致模糊和块效应。模糊主要是因为丢失了高频的DCT系数。块效应是由于块边界的不连续性,因为每个分块的量化是独立的。
我们用 f(x, y) 表示一幅图片,图片尺寸为 MxN,计算跨越每个水平线的信号差:
首先计算块效应,块效应的定义就是左右跨越边界的信号差的平均值:
然后计算块内信号差的平均值:
再计算zero-crossing(ZC)率,ZC是边界跨零的意思,也就是说相邻两个点的值的乘积为负数,也就是一正一负,因此对于[1,
N - 2]范围内的y,定义如下变量:
于是水平方向的ZC率定义如下:
同理,我们可以计算垂直方向的几个指标值 。最后得到这几个指标的水平和垂直方向的平均值:
有很多方式把这几个指标联系起来组成一个质量评价模型。此处我们采用如下图像质量定义:
其中 是从大量实验中提炼出来的模型参数。本文中所采用的参数值如下:
(15)No-Reference
Image Quality Assessment forJPEG/JPEG2000 Coding
这篇文章的作者在前面那篇文章的基础上,重新定义了新的质量指标:
其实 S 就是在(14)中已经得到的质量评价值。
(16)No-Reference
Image Quality Assessment
using Blur and Noise
图像质量受很多因素影响,例如:亮度、对比度、色调、边界、噪声、模糊等。在本文中,我们假定噪声和模糊是影响图像质量最重要的两个因素。简单起见,只对彩色图像的亮度分量做模糊和噪声监测。本文的图像质量评价算法框架图如下:
A)模糊检测
模糊估计分为两个步骤:首先是边缘检测,然后是模糊确定。此处模糊估计是通过计算当前像素点与领域内像素点均值之差来确定。我们用f(x,y) 表示图片,其中 。定义水平绝对差如下:
整个图片的水平绝对差的均值为:
如果当前像素点的
则该像素点就是一个候选的边缘点.
如果 比它水平方向两个相邻的点 都大,则该像素点就被确认为一个边缘点。边缘点 的判断总结如下:
接下来我们检测边缘点是否模糊。定义:
同理,按照以上的步骤我们可以计算垂直方向的值 。两者之大者称作Inverse
Blurriness,用于最终的模糊判定依据。
低于阈值ThB的Inverse Blurriness 被认为是模糊的。实验测试表明此处的阈值ThB取值0.1。最后,边缘模糊的均值和比率为:
B)噪点检测
因为沿边缘的噪点视觉上不明显,因此我们只检测边缘之外的噪点。边缘检测会被噪点影响,因此在检测边缘之前做一个噪点滤波的预处理。在本文中,我们应用均值滤波来消除噪点。均值滤波之后的图像g(x,y)为:
候选的噪点估计如下:
同理可以在垂直方向计算对应的值。然后得到候选的噪点是:
其中N_cand(x,y)表示候选噪点,它在边缘区域为0。
噪点均值和比率为:
其中Sum_Noise是N(x,y)之和,Noise_cnt是噪点总数目。
C)噪点和模糊的组合
此处我们的图像质量评价指标定义如下:
其中w1、w2、w3、w4是权值。通过线性回归分析获取这些权值。本文中这些权值为:
为了测试以上评价方法的准确性,我们才用C语言编程实现以上算法,由于以上算法都是针对灰度图,因此在处理彩色图像的时候,首先将彩色图像转化为灰度图(简单起见,转化算法采用了
grey = (R + G + B) /3)。 测试图片采用了美国德州大学图像与视频工程实验室提供的图像质量评价数据库。该图像数据库包含了29幅原始图像,并利用原始图像生成了包括JPEG压缩、JPEG2000压缩、高斯模糊、Fastfsding(在Fastading通道中传输传输错误)、WhiteNoise(白噪声)五类失真在内的失真图像共779幅。此处我们选用JPEG目录下的部分图片做测试。
首先来看看第一组测试图片:
DatabaseRelease2\jpeg\img29.bmp
DatabaseRelease2\jpeg\img42.bmp
(原始图片)
DatabaseRelease2\jpeg\img77.bmp
DatabaseRelease2\jpeg\img81.bmp
DatabaseRelease2\jpeg\img183.bmp
测试数据(阈值T = 50)
1)肉眼可以分辨以上五幅图像的质量排名为:img42
& img81 & img77 & img29 & img183
2)与主观感知一致的算法有:Brenner、Tenengrad、SMD、SMD2、Energy、Entropy、EAV、JPEG、JPEG2
3)Variance、Vollath算法所得数据非常接近,无法分辨出图像质量。
4)Laplacian在判断img29 和 img183的时候出现失误,这两个图片的质量都非常差
第二组测试图片(省略了图片显示,有兴趣的朋友可以去网上下载):
DatabaseRelease2\jpeg\img20.bmp
(原始图片)
DatabaseRelease2\jpeg\img23.bmp
DatabaseRelease2\jpeg\img56.bmp
DatabaseRelease2\jpeg\img152.bmp
DatabaseRelease2\jpeg\img215.bmp
DatabaseRelease2\jpeg\img228.bmp
第二组测试数据(阈值T = 50)
1)肉眼可以分辨以上图片的质量排名为:img20
& img228 & img56 & img152 & img23 & img215
2)与主观感知一致的算法有:Brenner、Tenengrad、Laplacian、SMD2、Energy、JPEG、JPEG2
3)Vollat、Entropy算法失误比较多。
4)SMD、EAV在判断img20 和 img228的时候出现失误,这两个图片质量都非常好,肉眼有时候很难分辨,因此这种失误在可以接受的范围。
5)Variance 在判断img23 和 img215的时候出现失误,这两个图片质量都非常差。
参考文献:
7. No-Reference Image Quality Assessment forJPEG/JPEG2000 Coding
附:NRSS的matlab实现:
%%计算人脸图像清晰度NRSS
%%reference paper:一种针对图像模糊的无参考质量评价指标,计算机应用,谢小甫等。
Img=imread('失焦模糊.jpg');%读取原始图像
figure,imshow(Img),title('Original Image');
%% (1)低通滤波,生成参考图像Ir
grayImg = rgb2gray(Img);%灰度化
[m,n,~]=size(grayImg);
gausFilter=fspecial('gaussian',[7 7],sigma);%构建高斯滤波器
Ir=imfilter(grayImg,gausFilter,'replicate');%高斯滤波
figure,imshow(Ir),title('Gaussian Filter Image');
%% (2)利用Sobel算子计算图像Img和Ir的梯度图像G和Gr
G = edge(grayImg,'sobel');%Sobel
Gr= edge(Ir,'sobel'); %Sobel
subplot(121),imshow(G),title('G');
subplot(122),imshow(Gr),title('Gr');
%% (3)将梯度图像划分8x8小块并计算每块的方差,找出其中最大的K=64个
fun = @(x) std2(x)*std2(x)*ones(size(x));%求方差函数
GT = blkproc(G,[4 4],[2,2],fun);%将梯度图像G划分为8x8小块并且块间距离为4,并计算每个块的方差
figure,imshow(GT),title('G的方差图像');
fun2 = @(x) sum(x)*ones(size(x));%求和函数
GTT = blkproc(GT,[8 8],fun2);%通过求和找出方差最大的64个子块
GrT = blkproc(Gr,[4 4],[2,2],fun);%将梯度图像Gr划分为8x8小块并且块间距离为4,并计算每个块的方差
figure,imshow(GrT),title('Gr的方差图像');
GrTT = blkproc(GrT,[8 8],fun2);%找出求和找出方差最大的64个子块
%% (4)计算图像I的无参考结构清晰度
[mssim, ssim_map]=ssim_index(GTT,GrTT);%得到64个方差较大块的平均SSIM
nrss = 1-%利用公式计算得到NRSS
format short g %表示double数据不用科学计数表示
文章:30篇
阅读:17787
文章:31篇
阅读:72052

我要回帖

更多关于 matlab 矩阵特征值 的文章

 

随机推荐