1. 实验类别
设计型实验:设计一种鲁棒性图像感知哈希算法,并给出实验结果。
2. 实验目的
了解鲁棒性内容感知哈希技术的基本特点,设计并实现基于DCT的鲁棒性图像感知哈希。了解鲁棒性内容感知哈希技术在数字内容保护中的作用,掌握基于鲁棒性感知哈希的内容保护方法。
3. 实验原理
3.1 原理
数字图像的真实性完整性认证技术是多媒体安全保护的重要研究课题。图像完整性认证是不允许图像有任何丝毫的改变,在要求很严格或是非常机密的情况下就需要用到完整性认证。基于密码学意义上的认证方法均属于图像完整性认证。图像内容认证允许图像经受一些不损害图像质量的操作,只要使代表图像内容的特性得到认证即可。数字图像占据了数字化作品的很大一部分,除了数字图像本身的诸多优点外,数字图像还有如下特点:数据量大,在存储和传输的过程中会经受JPEG有损压缩、添加噪声、滤波等不会损耗图像内容质量的处理操作。这就要求我们在选择认证方法时不能选择完整性认证,而要选择内容性认证。在信息安全的发展过程中,基于图像内容认证的方法主要有数字水印和数字哈希两种方法。
图像内容认证的两种方法里,数字水印的技术己日渐成熟,而数字哈希技术是一个新兴的课题,因此研究数字哈希技术更具有挑战性和实际意义。
数字图像哈希是将图像数据映射到一个简短的固定长度的比特流中。根据人类视觉系统反应,使得不同内容的图像具有不同的哈希值,内容相似的图像具有相似的哈希值。
现有的许多图像哈希方案都用以下三个步骤来产生哈希序列:
(l)产生一个关键依赖型的特征向量;
(2)量化该特征向量;
(3)压缩己经量化了的向量。
其中最具有挑战性的一步就是第一步,产生的特征向量既要代表图像的内容,又要适应一些轻微的误差失真,如普通的过滤操作(如平均和均值滤波)、几何失真(如旋转,平移和尺度变换)、JPEG压缩和非线形亮度变化。其方法主要有:基于图像统计学特性的方法(灰度直方图、小波统计特性)、基于图像关系的方法(DCT系数对、小波系数对)、基于原始图像特征表述的方法(SVD值)、基于低层图像特征提取的方法(特征点)等等。
3.2 典型应用
图像哈希的典型应用是相似图像搜索。如Google和Tineye相似图像搜索主要利用的算法是感知哈希算法,它的作用是对每张图片生成一个“指纹”字符串,然后比较不同图片的指纹,结果越接近,就说明图片越相似。典型算法有:
(1) ahash算法
- 缩小尺寸: 将图片缩小到8x8的尺寸,总共64个像素。去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。
- 简化色彩: 将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。
- 计算平均值: 计算所有64个像素的灰度平均值。
- 比较像素的灰度: 将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
- 计算哈希值: 将上一步的比较结果,组合在一起,这就是这张图片的指纹。
- 计算“汉明距离” ,如果不相同的数据位不超过某个阈值,就说明两张图片很相似,距离为0说明完全相同;如果大于某个阈值,就说明这是两张不同的图片。
(2) phash算法
1. 图片缩放: 缩小尺寸到 32×32
2. 图像灰度化: 转化为256灰度图
3. 对图像进行DCT变换
4. 缩小DCT: DCT是3232,保留左上角的88,代表图片的低频区域
5. 计算平均值: 计算缩小DCT后的所有像素点的平均值
6. 与均值比较: 将每个像素的DCT值,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
7. 计算哈希值: 将上一步的比较结果,组合在一起,这就是这张图片的指纹。
8 用汉明距离比较: 如果不相同的数据位不超过某个阈值,就说明两张图片很相似,距离为0说明完全相同;如果大于某个阈值,就说明这是两张不同的图片。
(3) dhash算法
1. 缩小图片 :收缩到8 * 9的大小,共有72个像素点
2. 转化为灰度图: 转化为256灰度图
3. 计算差异值:dHash算法工作在相邻像素之间,这样每行9个像素之间产生了8个不同的差异,一共8行,则产生了64个差异值
4. 获得指纹: 如果左边的像素比右边的更亮,则记录为1,否则为0
5. 用汉明距离比较: 如果不相同的数据位不超过某个阈值,就说明两张图片很相似,距离为0说明完全相同;如果大于某个阈值,就说明这是两张不同的图片。
(4) whash算法
1. 缩小图片:缩小尺寸到 32×32
2. 转化为灰度图: 转化为256灰度图
3. 对图像进行D WT变换, 取低频信息
4. 计算平均值: 计算低频区域的所有像素点的平均值
5. 与均值比较: 将低频区域的每个像素点的DWT值,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
6. 计算哈希值: 将上一步的比较结果,组合在一起,这就是这张图片的指纹。
7. 用汉明距离比较: 如果不相同的数据位不超过某个阈值,就说明两张图片很相似,距离为0说明完全相同;如果大于某个阈值,就说明这是两张不同的图片。
代码实现
import imagehash from PIL import Image #PIL是python的图像处理库 path1= 'C://Users/kiven/Desktop/MyPIC/L.jpg' path2= 'C://Users/kiven/Desktop/MyPIC/R.jpg' hash1 = imagehash.average_hash(Image.open(path1)) #ahash算法 hash2 = imagehash.average_hash(Image.open(path2)) print(hash1- hash2) hash1 = imagehash.phash(Image.open(path1)) #phash算法 hash2 = imagehash.phash(Image.open(path2)) print(hash1- hash2) hash1 = imagehash.dhash(Image.open(path1)) #dhash算法 hash2 = imagehash.dhash(Image.open(path2)) print(hash1- hash2) hash1=imagehash.whash(Image.open(path1)) #whash算法 hash2=imagehash.whash(Image.open(path2)) print(hash1- hash2) 复制代码
输出:
1 6 1 4 复制代码
附图