【发布时间】:2015-06-08 16:39:37
【问题描述】:
我必须将 prewit 滤波器应用于频域中的图像。这是我正在遵循的过程。
1) 通过补零将图像的NxN矩阵转换为2*Nx2*N矩阵
2) 通过将图像乘以 (-1)^(x+y) 来使图像变换居中
3) 计算图像矩阵的 DFT
4) 创建尺寸为 2Nx2N 且中心位于坐标 (N,N) 的过滤器
5) 图像矩阵与滤波器矩阵相乘
6) 计算它的逆DFT并提取结果的实部。
7) 通过乘以 (-1)^(x+y) 来分散结果
8) 最后提取结果矩阵的左上NxN部分
我的代码如下:
% mask=[-1,0,1;-1,0,1;-1,0,1];
%read image
signal=imread('cman.pgm');
signal=double(signal);
% image has NxN dimensions
l=size(signal,1);
pad_signal=zeros(2*l,2*l);
pad_signal(1:l,1:l)=signal;
m=size(mask,1);
mask_f=zeros(2*l,2*l);
for i=-1:1
mask_f(l+i,l-1)=-1;
mask_f(l+i,l+1)=1;
end
x=1:2*l;
[x y]=meshgrid(x,x);
% Multiply each pixel f(x,y) with (-1)*(x+y)
pad_signal=pad_signal.*((-1).^(x+y));
mask_f=myDFT(mask_f);
%find the DFT of image
signal_dft=myDFT(pad_signal);
%multiply the filter with image
res=mask_f*signal_dft;
% find the inverse DFT of real values of result
res=real(myIDFT(res));
res=res.*((-1).^(x+y));
%extract the upper left NxN portion of the result
res=res(1:l,1:l);
imshow(uint8(res));
上面的方法来自一本图像处理的书。我感到困惑的是我应该使用 3x3 的窗口,因为 prewitt 过滤器是 3x3 还是我当前使用过滤器的方式正确? (即通过将过滤器值放置在 2Nx2N 过滤器矩阵的中心并将所有其他索引值设置为 0)。 如果两者都不是,那么如何形成与图像的dft相乘的滤波器。
【问题讨论】:
标签: matlab image-processing dft