【发布时间】:2015-08-25 10:37:52
【问题描述】:
我目前正在 Matlab 中编写一个与图像散列相关的程序。加载图像并执行简单的下采样不是问题。这是我的代码
clear all;
close all;
clc;
%%load Image
I = im2single(imread('cameraman.tif'));
%%Perform filtering and downsampling
gaussPyramid = vision.Pyramid('PyramidLevel', 2);
J = step(gaussPyramid, I); %%Preprocessed Image
%%Get 2D Fourier Transform of Input Image
Y = fft2(I); %%fft of input image
接下来的算法假设二维傅里叶变换(在我的例子中是 Y)必须采用 Y(f_x,f_y) 的形式,其中 f_x,f_y 是归一化的空间频率
在 [0, 1] 范围内。我无法从 Matlab 转换 fft2 函数的输出,因为它是算法要求的。
【问题讨论】:
-
我对 Y(f_x,f_y) 有点困惑,这是否意味着输入的大小应该是 (Y x 2) ?还是 x,y 是您的坐标系?
-
算法中描述的 x 和 y 是坐标系。更准确地说,图像被描述为 i(x,y)。
-
编辑后的标题实际上比你现在得到的要好。 Capslock 再清楚不过了。
-
那么我认为你可以只取幅度响应,即 abs(Y) 并将其归一化为 Y./ max(max(Y)) 之类的东西。
-
看来这是合乎逻辑的做法。谢谢!