【问题标题】:matlab code for perceptual hashing用于感知散列的matlab代码
【发布时间】:2014-11-04 22:58:11
【问题描述】:

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

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

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

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

  2. 进一步降低 DCT。根据 64 个 DCT 值中的每一个值是高于还是低于平均值,将 64 个哈希位设置为 0 或 1。结果并没有告诉我们实际的低频;它只是告诉我们频率与平均值的非常粗略的相对比例。只要图像的整体结构保持不变,结果就不会改变;这可以毫无问题地通过伽马和颜色直方图调整。

  3. 处理后重建图像。

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

【问题讨论】:

  • A quick search 产生了 this result 和其他可能有趣的页面。也许你可以从这个开始。 -- 另外,我不确定您想要从第 4 步中得到什么,但通常散列是一种单向过程。

标签: matlab phash


【解决方案1】:

试试这个:

% 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(:)');

【讨论】:

猜你喜欢
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 2015-10-06
  • 2015-04-12
  • 1970-01-01
  • 2011-07-22
相关资源
最近更新 更多