傅里叶变换

Fourier transformation

我目前正在用 Matlab 编写一个与图像哈希相关的程序。加载图像并执行简单的下采样不是 problem.Here 是我的代码

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

接下来的算法假定 2D 傅里叶变换(在我的例子中是 Y)必须采用 Y(f_x,f_y) 的形式,其中 f_x,f_y 是归一化的空间频率 在 [0, 1] 范围内。我无法根据算法的要求从 Matlab 转换 fft2 函数的输出。

我查阅了相关论文(Ashwin Swaminathan 通过内在和外在指纹进行多媒体取证分析)并找到了

We take a Fourier transform on the preprocessed image to obtain I(fx, fy). The Fourier transform output is converted into polar co-ordinates to arrive at I′(ρ, θ)

他们这么说好像是说I(fx,fy)是图像的傅里叶变换。但他们正在尝试使用 Fourier-Mellin 变换,这与图像上的简单 fft2 不同。根据信息 found in this set of slides,

If an input image is expressed in terms of coordinates that are natural logarithms of the original coordinates, then the magnitude of its FT is insensitive to any change in scale of the original image (since it is Mellin Transform in the original coordinates)

并且在 MATLAB Central File exchange 上的文件中,您必须做额外的工作才能获得 Mellin-Fourier 变换;特别是,获取幅度(这似乎是您缺少的步骤),将坐标转换为对数极坐标并进行第二个 fft2。我不清楚为什么在所需步骤的论文中省略了对数极坐标的 log。有关示例,请参见 an implementation for image registration here。请注意,这段代码很旧,而且 transformImage 方法似乎不存在;它进行对数极坐标变换。