使傅立叶结果对旋转,缩放,平移不变

时间:2014-12-17 13:30:42

标签: matlab image-processing pattern-matching fourier-descriptors

我想知道傅立叶矩阵中哪些值对图像的大小,旋转,平移等的变化负责。

我编写了一个二维DFT函数,输出一个复数的dft矩阵。

如何删除图像缩放,平移和旋转的值,例如当我有2个图像时:

IMAGE1

Image2 = Image1旋转90度

一旦我们比较两个图像的DFT矩阵,我们发现它们是相等的。

这是我拥有的DFT功能的代码:

%----------------------------------------------------------------
function [Xk] = dft1(xn)
N=length(xn);
n = 0:1:N-1; % row vector for n
k = 0:1:N-1; % row vecor for k
WN = exp(-1j*2*pi/N); % Twiddle factor (w)
nk = n'*k; % creates a N by N matrix of nk values
WNnk = WN .^ nk; % DFT matrix
Xk = (WNnk*xn );
%----------------------------------------------------------------

%----------------------------------------------------------------
function out=dft2(x)

y=zeros(size(x));
y1=y;
C=size(x,2); %number of columns
for c=1:C
y(:,c)=dft1(x(:,c));
end
R=size(x,1); %number of rows
for r=1:R
y1(r,:)=dft1(y(r,:).');
end
out=y1;
%----------------------------------------------------------------

2 个答案:

答案 0 :(得分:5)

假设你的图像是无限的(因为我们不希望这里的边界效应蒙上阴影)。

更改图像大小/比例会在傅立叶域中生成相应的比例,按因子s缩放图像会将频域缩放1/s。对于有限图像,这意味着如果您按2缩放图像,则会松开频域的上半部分 - 即图像中的高频和细节。

旋转图像对应于频域中的类似旋转。

翻译图像相当于傅立叶系数相位的变化:按x像素进行平移会在频域中产生因子exp( -j pi x )(最多可达一些const缩放)。

可以找到傅立叶变换的这些属性的一个很好的总结here


现在,尽管该理论提出了良好而清晰的条件,即尽管在实践中缩放/旋转/平移,但两个信号的DFT可以匹配,但并不总是那么简单。 考虑例如翻译的情况:傅里叶变换的特性表明两个信号仅通过平移而不同,它们的DFT仅通过调制而不同,因此理想地将两个信号的DFT分开将仅产生调制分量并且不仅揭示信号在翻译时是相同的,但也是两个信号之间的平移量 但是,实际情况并非如此。对于有限信号,平移一个信号会导致边界效应:一些像素丢失(在可见信号“外部”转换),同时引入一些新像素。由于DFT是全局的(即变换信号的每个值受原始信号的所有值的影响),这些边界效应导致变换的转换信号的所有值不仅通过所需的调制而不同但完全不同,使两个信号之间的比例非常随意 缩放和旋转也是如此。

答案 1 :(得分:-1)

获取DFT的幅度,将其转换为logpolar坐标,取其FFT,然后取大小。它会为你提供平移,旋转和比例不变性,但它不会让你对其他变换产生鲁棒性。