【发布时间】:2014-12-19 08:48:33
【问题描述】:
我正在查看一些执行图像模糊的代码。但是,我在理解代码时遇到了麻烦,我想知道是否有人可以帮助我理解代码的大致用途。
这里的变量“Iref”是一个图像。
Imin = min(Iref(:));
Iref_fft = Iref-Imin;
Iref_fft = fftshift(Iref_fft,1);
Iref_fft = fftshift(Iref_fft,2);
Iref_fft = fft(Iref_fft,[],1);
Iref_fft = fft(Iref_fft,[],2);
Iref_fft = fftshift(Iref_fft,1);
Iref_fft = fftshift(Iref_fft,2);
在这里,我已经对将 fftshift 应用于尚未在傅立叶域中的图像意味着什么感到困惑。所以,我可以说它正在沿每个轴进行傅立叶变换,但为什么它会在前后进行 fftshift?
代码如下:
Nx_r = 32;
Ny_r = 32;
sigma = 1.5;
wx = reshape(gausswin(Nx_r,sigma), [1 Nx_r]);
wy = reshape(gausswin(Ny_r,sigma), [Ny_r 1]);
wx_rep = repmat(wx, [Ny_r 1]);
wy_rep = repmat(wy, [1 Nx_r]);
Window = wx_rep .* wy_rep;
xIndices = floor((Nx-Nx_r)/2)+1 : floor((Nx-Nx_r)/2)+Nx_r;
yIndices = floor((Ny-Ny_r)/2)+1 : floor((Ny-Ny_r)/2)+Ny_r;
Iref_blurred = zeros(Ny,Nx);
Iref_blurred(yIndices,xIndices,:) = Iref_fft(yIndices,xIndices) .* Window;
Iref_blurred = fftshift( ifft2( fftshift(Iref_blurred) ) );
Iref_blurred = abs(Iref_blurred)+Imin;
在随后的步骤中,我认为我们正在进行高斯模糊。但是,我认为内核也必须在傅立叶域中生成,然后我们才能像下面这样将它们相乘:
Iref_blurred(yIndices,xIndices,:) = Iref_fft(yIndices,xIndices) .* Window;
我不确定Window是高斯卷积核的傅立叶变换还是至少无法从代码中分辨出来。
所以,我有点困惑这是如何实现高斯模糊的。任何有助于理解此代码的帮助将不胜感激。
【问题讨论】:
标签: matlab image-processing fft convolution