根据博客:http://www.ruanyifeng.com/blog/2011/07/principle_of_similar_image_search.html
的描述简单和个人的理解的写出了MATLAB代码,这里个简单记录。
第一步,缩小尺寸。
第二步,简化色彩。
第四步,比较像素的灰度。
第五步,计算哈希值。
代码:
%% 感知哈希简易算法进行图像搜索
% 这种算法的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。
% 如果在图片上加几个文字,它就认不出来了。所以,它的最佳用途是根据缩略图,找出原图。
clc;
clear all;
% 第一,将图像缩放到8*8大小,缩放不变性
I=imread('MN.jpg');
figure,imshow(I),title('原始图像');
J=imresize(I,[8,8]);
figure,imshow(J),title('8*8图像');
% 第二、将图像灰度化到64个灰度级,灰度粗化
img = double(rgb2gray(J));
img_64 = floor(img/255*64);
figure,imshow(img_64),title('8*8-64级图像');
% 第三、计算灰度平均值
gray_mean = sum(img_64(:))/64;
% 第四、将所有像素的灰度和均值比较,大于的为1,小于的为0
feature_img = zeros(8,8);
for i=1:8
for j=1:8
if img_64(i,j) >= gray_mean
feature_img(i,j) = 1;
end
end
end
figure,imshow(feature_img),title('8*8特征图像');
% 第五步,计算哈希值。将其变换成一行即可。
hash_feature = reshape(feature_img,1,64)
% 两个哈希值中小于5个不同,说明很相似的图。大于10说明是不同的照片。