All*_*din -5 matlab image-processing pattern-matching fourier-descriptors
我想知道傅立叶矩阵中的哪些值对图像的大小,旋转,平移等的变化负责.
我编写了一个二维DFT函数,输出一个复数的dft矩阵.
如何删除图像缩放,平移和旋转的负责值,例如当我有2个图像时:
此搜索
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;
%----------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
假设你的图像是无限的(因为我们不希望这里的边界效应蒙上阴影).
改变图像大小/比例导致傅里叶域中的相应比例,通过因子缩放图像来s缩放频域1/s.对于有限图像,这意味着如果您缩放图像2,则会松开频域的上半部分 - 即图像中的高频和细节.
旋转图像对应于频域中的类似旋转.
平移图像相当于傅立叶系数的相位的变化:按x像素平移导致exp( -j pi x )频域中的因子(直到一些const缩放).
这里可以找到傅里叶变换的这些属性的一个很好的总结.
现在,尽管该理论提出了良好和清晰的条件,其中两个信号的DFT可以匹配,尽管在实践中缩放/旋转/平移,但并不总是那么简单.
考虑例如翻译的情况:傅立叶变换的特性表明两个信号仅通过平移而不同,它们的DFT仅通过调制而不同,因此理想地将两个信号的DFT分开将仅产生调制分量并且不仅揭示信号在翻译时是相同的,但也是两个信号之间的平移量.
但是,实际情况并非如此.对于有限信号,平移一个信号会导致边界效应:一些像素丢失(在可见信号"外部"转换),同时引入一些新像素.由于DFT是全局的(也就是由影响所述变换信号的每个值的所有原始信号的值),这些边界效应导致转化的转变的信号的所有值是不同的,不仅由所希望的调制而完全不同,使得比两个信号之间相当随意.
缩放和旋转也是如此.