写个DCT版的image perceptual hash
2012-12-20 15:11
162 查看
额,好久没有写这种image retrieved 的函数了
由于DCT可以把图像的低频信息保留在左上角,而高频信息则被放到右下角,而低频信息是图像中最主要的信息,比如亮度,高频信息比如边缘
这样,就可以实现一个简单的图像压缩过程
Image Perceptual Hash是图像搜索技术常用的方法,简单的说就是得到一幅图像的hash值,以方便搜索
相关的技术文档请google, wiki, 或者看paper也行
常用的DCT image perceptual hash的步骤是:
1.把图像image1 高斯滤波,resize成一个固定的尺寸的图像image2,比如32*32
2.对image2做DCT变换,得到左上角的低频信息,通常是一个8*8的区域
3.计算这个区域的中值
4.区域像素值与中值比较,大于为1,小于为0,得到一个8*8 = 64 的hash值
5.利用hash值进行图像对比,通常选用hamming distance
OVER
伪代码(OpenCV版本)
使用OpenCV是很方便的,如果不想用cvDCT,可以自己写DCT的代码,代码并不难,最关键的是先看到DCT是怎么一个过程,系数矩阵怎么计算就可以
DCT是图像里面经常要用的东西,已经有相关的快速算法,也可以自己多线程或者GPU计算,要是嫌麻烦就凑合着用cvDCT吧
以下是DCT-BASED image hash
1.jpg
2.jpg
005.jpg
007.jpg
008.jpg
Result:
从结果来看,这个DCT-Based pHash对图像尺寸缩放很鲁棒,但是貌似对图像抠图还是有点问题,晚上google下,看看相关的paper,应该有很多phash方法
由于DCT可以把图像的低频信息保留在左上角,而高频信息则被放到右下角,而低频信息是图像中最主要的信息,比如亮度,高频信息比如边缘
这样,就可以实现一个简单的图像压缩过程
Image Perceptual Hash是图像搜索技术常用的方法,简单的说就是得到一幅图像的hash值,以方便搜索
相关的技术文档请google, wiki, 或者看paper也行
常用的DCT image perceptual hash的步骤是:
1.把图像image1 高斯滤波,resize成一个固定的尺寸的图像image2,比如32*32
2.对image2做DCT变换,得到左上角的低频信息,通常是一个8*8的区域
3.计算这个区域的中值
4.区域像素值与中值比较,大于为1,小于为0,得到一个8*8 = 64 的hash值
5.利用hash值进行图像对比,通常选用hamming distance
OVER
伪代码(OpenCV版本)
cvSmooth cvResize cvDCT cvMinMaxLoc
使用OpenCV是很方便的,如果不想用cvDCT,可以自己写DCT的代码,代码并不难,最关键的是先看到DCT是怎么一个过程,系数矩阵怎么计算就可以
DCT是图像里面经常要用的东西,已经有相关的快速算法,也可以自己多线程或者GPU计算,要是嫌麻烦就凑合着用cvDCT吧
DCT coefficients: 0.354 0.354 0.354 0.354 0.354 0.354 0.354 0.354 0.49 0.416 0.278 0.0975 -0.0975 -0.278 -0.416 -0.49 0.462 0.191 -0.191 -0.462 -0.462 -0.191 0.191 0.462 0.416 -0.0975 -0.49 -0.278 0.278 0.49 0.0975 -0.416 0.354 -0.354 -0.354 0.354 0.354 -0.354 -0.354 0.354 0.278 -0.49 0.0975 0.416 -0.416 -0.0975 0.49 -0.278 0.191 -0.462 0.462 -0.191 -0.191 0.462 -0.462 0.191 0.0975 -0.278 0.416 -0.49 0.49 -0.416 0.278 -0.0975 Before DCT: -256 -183 -110 -37 36 109 182 255 -250 -230 -190 -130 -50 50 170 255 10 15 99 200 70 0 -100 -40 20 30 200 240 88 0 -100 -40 200 180 150 109 17 0 -100 -40 171 117 73 -44 0 0 -133 -71 100 81 60 -96 -33 50 -150 -180 0 56 -35 -73 -14 -8 -15 -203 After DCT: 60.3 62.5 -100 -15.5 -6.75 -38.6 78.8 -31.4 30.7 -634 -17.9 -179 117 50 -18.5 -23.2 -266 -483 121 117 -116 -20.7 -74.1 41.9 32.7 -75.4 174 39.3 -18.5 -67.5 49.3 13.8 104 -3.02 -75.1 -53 -6.75 36.9 -53.3 -0.219 57.6 123 -156 -30.6 6.37 -1.16 66.9 -6.5 64.1 130 -65.6 -4.54 38.2 0.174 -27.6 -5.96 64.5 154 -15.1 19.6 -4.86 -7.23 5.42 -33.7上面是一个8*8的DCT变换结果
以下是DCT-BASED image hash
1.jpg
2.jpg
005.jpg
007.jpg
008.jpg
Result:
从结果来看,这个DCT-Based pHash对图像尺寸缩放很鲁棒,但是貌似对图像抠图还是有点问题,晚上google下,看看相关的paper,应该有很多phash方法
相关文章推荐
- radial image perceptual hash
- 感知哈希算法"(Perceptual hash algorithm)
- 快速图像检索(Deep Learning of Binary Hash Codes for Fast Image Retrieval)
- 论文阅读理解 - Deep Learning of Binary Hash Codes for Fast Image Retrieval
- 使用imagehash做图片识别
- Deep Learning of Binary Hash Codes for Fast Image Retrieval 代码编译
- Deep Hash in Large Scale Image Retrieval
- 感知哈希算法(perceptual hash algorithm),
- 图像检索系统《Deep Learning of Binary Hash Codes for Fast Image Retrieval》
- Deep Learning of Binary Hash Codes for Fast Image Retrieval (CVPRW15)
- 感知哈希算法(Perceptual hash algorithm)
- Deep Learning of Binary Hash Codes for Fast Image Retrieval
- PmH(Partition Min-Hash for Partial Duplicate Image Discovery)
- 基于deep learning的快速图像检索(Deep Learning of Binary Hash Codes for Fast Image Retrieval)
- 感知哈希算法(Perceptual hash algorithm)的OpenCV实现
- 基于deep learning的快速图像检索(Deep Learning of Binary Hash Codes for Fast Image Retrieval)
- 开源的perceptual hash工程(非常有用)
- ptyhon的imageHash.py
- 感知哈希算法(Perceptual hash algorithm)
- python︱imagehash中的四种图像哈希方式(phash/ahash/dhash/小波hash)