【问题标题】:Fourier transformation傅里叶变换
【发布时间】: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)) 之类的东西。
  • 看来这是合乎逻辑的做法。谢谢!

标签: matlab fft


【解决方案1】:

我查阅了相关论文(Ashwin Swaminathan 通过 Intrinsic and Extrinsic Fingerprints 进行的多媒体取证分析)并找到了

我们对预处理后的图像进行傅里叶变换 得到 I(fx, fy)。傅里叶变换输出转换为极坐标得到I′(ρ, θ)

由此,他们似乎意味着 I(fx, fy) 是图像的傅里叶变换。但他们正在尝试使用傅里叶-梅林变换,这与图像上的简单 fft2 不同。根据found in this set of slides的信息,

如果输入图像以原始坐标的自然对数坐标表示,则其 FT 的大小对原始图像的任何尺度变化都不敏感(因为它是原始坐标中的梅林变换)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2011-07-12
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多