鲁棒图像感知哈希实验
一、 *实验目的*
了解鲁棒性内容感知哈希技术的基本特点,设计并实现基于 DCT 的鲁棒性图
像感知哈希。了解鲁棒性内容感知哈希技术在数字内容保护中的作用,掌握基于
鲁棒性感知哈希的内容保护方法
二、 *实验内容*
本实验实现一种基于视觉特性的图像感知哈希算法,可通过密钥控制哈希序
列,保证安全性。
三、 *系统整体描述和分功能描述*
*系统整体描述*
*分功能描述*
1)读入两幅图像,对图像做预处理
用到的函数rgb2gray()
I = rgb2gray(RGB) 将真彩色图像 RGB 转换为灰度图像 I。rgb2gray 函数通过消除色调和饱和度信息,同时保留亮度,来将 RGB 图像转换为灰度图。
2) 对标准化图像进行 8*8 子块划分
用到的函数imresize(Picture1,[64,64])
B = imresize(A,scale) 返回图像 B,它是将 A 的长宽大小缩放图像 scale 倍之后的图像。输入图像 A 可以是灰度图像、RGB 图像、二值图像或分类图像。
3) 依次对各子块进行二维离散余弦变换
用到的函数 (Picture1,[8 8],fun)
对图像进行分块处理
4)通过密钥伪随机生成服从标准正态的、的 64*64 矩阵
用到的函数 randn(‘state’,key)
返回一个从标准正态分布中得到的随机标量。
5)用高斯低通滤波器进行迭代滤波
用到的函数 fspecial(‘gaussian’)
创建具有指定 type 的二维滤波器
Y = cell(1,Hashlen);
四、 *实验步骤、结果及分析*
- 读入两幅图像,对图像做预处理:如果读入的是彩色图像,将其转换为
灰度图像(rgb2gray);在灰度图像中利用差值方式将图像重采样为 64*64
的标准化图表示(imresize)
1 | Picture1 = rgb2gray(Picture1); |
对标准化图像进行 88 子块划分,将标准化图像划分为(6464)/(8*8)=64 个子块,依次对各子块进行二维离散余弦变换1,1)置为 0;
1
2
3
4
5
6
7
8
9
10% 对标准化图像进行 8*8 子块划分
Picture1 = imresize(Picture1,[64,64]);
Picture2 = imresize(Picture2,[64,64]);
% 依次对各子块进行二维离散余弦变换
fun = @dct2;
Picture1 = blkproc(Picture1,[8 8],fun);
Picture2 = blkproc(Picture2,[8 8],fun);
% 并依次将各分块的 DC 系数,即(1,1)置为 0
Picture1(1,1) = 0;
Picture2(1,1) = 0;生成 N 个 64*64 伪随机矩阵:首先通过密钥伪随机生成服从标准正态的、
的 64*64 矩阵(randn(‘state’,key),randn),然后用高斯低通滤波器
进行迭代滤波(K=fspecial(‘gaussian’); Y=filter2(K,Y);)
1 | % 通过密钥伪随机生成服从标准正态的、的 64*64 矩阵 |
设 DCT 敏感度矩阵 m,对矩阵 m 进行周期延拓得到大小为 64 ×64 的矩阵 M ,并将其每个元素作为 Ic 的对应位置频率系数在特征值计算中的权。
1
2
3
4
5
6
7
8
9
10
11
12
13
14% DCT敏感度矩阵m,周期延拓至64*64
m = [
71.43 99.01 86.21 60.24 41.67 29.16 20.88 15.24;
99.01 68.97 75.76 65.79 50.00 36.90 27.25 20.28;
86.21 75.76 44.64 38.61 33.56 27.47 21.74 17.01;
60.24 65.79 38.61 26.53 21.98 18.87 15.92 13.16;
41.67 50.00 33.56 21.98 16.26 13.14 11.48 9.83;
29.16 36.90 27.47 18.87 13.14 10.40 8.64 7.40;
20.88 27.25 21.74 15.92 11.48 8.64 6.90 5.78;
15.24 20.28 17.01 13.16 9.83 7.40 5.78 4.73];
% 矩阵m进行周期延拓得到大小为64 ×64 的矩阵M
M = repmat(m,8,8);
P1_Hash = ones(1,Hashlen);
P2_Hash = ones(1,Hashlen);取第一个伪随机矩阵,计算如果 YN <0,则 H(n)=0,反之则 H(n)=1;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17% 对Hashlen个伪随机矩阵遍历计算
for k = 1:Hashlen
P1_sum = 0;
P2_sum = 0;
for i = 1:64
for j = 1:64
P1_sum = P1_sum + Picture1(i,j) * Y{k}(i,j) * M(i,j);
P2_sum = P2_sum + Picture2(i,j) * Y{k}(i,j) * M(i,j);
end
end
if P1_sum < 0
P1_Hash(k) = 0;
end
if P2_sum < 0
P2_Hash(k) = 0;
end
end循环第 5 步,直到将所有的 N 个 64*64 伪随机矩阵都计算完,最终生成
一个 N 比特的 Hash 向量
- 比较两幅图像 hash 向量的汉明距离 dis,设定一个合适的阈值 tau,如
果 dis<tau,则两幅图像内容一致;反之则是内容不同的两幅图像。
1 | % 汉明距离 |
- 以 DemoImages 中的图片为测试集,分析实验结果。
1 | % 与阈值比较 |
9.测试Tau和Hashlen的合理值
Hashlen所影响的是数据的精度,在合理范围内略微降低可以加快运行速率。
当Hashlen=100时跑数据较快,从而固定Hashlen=100,调试tau值。
Tau取值范围为(0,1)从而开始多次测试选取合适数值。
Tau=0.5,结果正确,且多次试验稳定。
实验结果及分析
运行脚本,对样本库进行比对
比对结束后输出结果,结果正确
五、 *实验中遇到的问题及改正的方法*
1.不同版本的matlab支持的灰度处理函数不一样,需要选取对应版本的函数。