一、 *实验目的*

了解鲁棒性内容感知哈希技术的基本特点,设计并实现基于 DCT 的鲁棒性图

像感知哈希。了解鲁棒性内容感知哈希技术在数字内容保护中的作用,掌握基于

鲁棒性感知哈希的内容保护方法

二、 *实验内容*

本实验实现一种基于视觉特性的图像感知哈希算法,可通过密钥控制哈希序

列,保证安全性。

三、 *系统整体描述和分功能描述*

*系统整体描述*

img

*分功能描述*

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);

四、 *实验步骤、结果及分析*

  1. 读入两幅图像,对图像做预处理:如果读入的是彩色图像,将其转换为

灰度图像(rgb2gray);在灰度图像中利用差值方式将图像重采样为 64*64

的标准化图表示(imresize)

1
2
Picture1 = rgb2gray(Picture1);  
Picture2 = rgb2gray(Picture2);
  1. 对标准化图像进行 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;
  2. 生成 N 个 64*64 伪随机矩阵:首先通过密钥伪随机生成服从标准正态的、

的 64*64 矩阵(randn(‘state’,key),randn),然后用高斯低通滤波器

进行迭代滤波(K=fspecial(‘gaussian’); Y=filter2(K,Y);)

1
2
3
4
5
6
7
8
9
10
11
% 通过密钥伪随机生成服从标准正态的、的 64*64 矩阵 
randn('state',key);
N = cell(1,Hashlen);
% 用高斯低通滤波器进行迭代滤波
K = fspecial('gaussian');
Y = cell(1,Hashlen);
for i = 1:Hashlen

N{i} = randn(64);
Y{i} = filter2(K,N{i});
end
  1. 设 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);
  2. 取第一个伪随机矩阵,计算如果 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
  3. 循环第 5 步,直到将所有的 N 个 64*64 伪随机矩阵都计算完,最终生成

一个 N 比特的 Hash 向量

  1. 比较两幅图像 hash 向量的汉明距离 dis,设定一个合适的阈值 tau,如

果 dis<tau,则两幅图像内容一致;反之则是内容不同的两幅图像。

1
2
% 汉明距离
dis = norm((P1_Hash-P2_Hash)/2*sqrt(norm(P1_Hash)*norm(P2_Hash)));
  1. 以 DemoImages 中的图片为测试集,分析实验结果。
1
2
3
4
5
6
% 与阈值比较
if tau < dis
ds = '不相似';
else
ds = '相似';
end

9.测试Tau和Hashlen的合理值

Hashlen所影响的是数据的精度,在合理范围内略微降低可以加快运行速率。

当Hashlen=100时跑数据较快,从而固定Hashlen=100,调试tau值。

Tau取值范围为(0,1)从而开始多次测试选取合适数值。

Tau=0.5,结果正确,且多次试验稳定。

img

实验结果及分析

运行脚本,对样本库进行比对

img

比对结束后输出结果,结果正确

img

五、 *实验中遇到的问题及改正的方法*

1.不同版本的matlab支持的灰度处理函数不一样,需要选取对应版本的函数。