用于感知哈希的matlab代码

时间:2014-11-04 22:58:12

标签: matlab phash

我需要一个用于感知散列算法的matlab代码: http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html

基本上我希望这能删除图像中的deatails,只留下主要结构组件信息。

为此,我认为我需要以下步骤: 1.减少DCT。假设DCT是32x32(),只需保持左上角8x8。那些代表了图片中的最低频率。

  1. 计算平均值。与平均散列值一样,计算平均DCT值(仅使用8x8 DCT低频值并排除第一项,因为DC系数可能与其他值显着不同并且会偏离平均值)。

  2. 进一步减少DCT。根据64个DCT值中的每一个是高于还是低于平均值,将64个散列位设置为0或1。结果并没有告诉我们实际的低频;它只是告诉我们频率到平均值的非常粗略的相对比例。只要图像的整体结构保持不变,结果就不会改变;这可以在没有问题的情况下进行伽玛和颜色直方图调整。

  3. 处理后重建图像。

  4. 任何人都可以帮助完成上述任何一个步骤? 我尝试了一些代码来提供一些结果(在下面的链接中),它还不完美: https://stackoverflow.com/questions/26748051/extract-low-frequency-from-dct-coeffecients-of-an-image-in-matlab

1 个答案:

答案 0 :(得分:0)

试试这个:

% read image
I = imread('cameraman.tif');

% cosine transform and reduction
d = dct2(I);
d = d(1:8,1:8);

% compute average
a = mean(mean(d));

% set bits, here unclear whether > or >= shall be used
b = d > a;
% maybe convert to string:
string = num2str(b(:)');