2016-11-16 117 views
-4

我是MATLAB新手,我试图将高通butterworth滤波器应用于我的数据图像。我收到以下错误:错误使用。*矩阵尺寸必须一致?

Error using `.*` Matrix dimensions must agree. 

这里是我的代码:

function[]=Preprocessing() 
I = imread('Photo0029.jpg'); 
imshow(I); 
imDouble=im2double(I); 
fftlogim=fft(log(imDouble+0.01)) 
f=butterhp(I,15,1); 
c=fftlogim.*f; 
h=real(ifft(c)); 
figure,ishow(h); 
h1=exp(h); 
ifftshow(h1); 

和这里的butterhp功能:

function[out]=butterhp(im,d,n) 
h=size(im,1); 
w=size(im,2); 
[x,y]=meshgrid(-floor(w/2):floor(w-1)/2,-floor(h/2):floor(h-1)/2); 
out=1./(1.+(d./(x.^2+y.^2).^0.5).^(2*n)); 
end 

谁能帮助我解决这个问题?

+2

您应该在帖子中设置您的代码的格式,以便阅读和理解。 –

+1

简单:您的矩阵尺寸不相等。尝试乘以两个相等大小的矩阵。另外:这个标题还有几个问题,如果没有系统说明,我不能从中删除MATLAB。请先搜索。 – Adriaan

+0

让我猜,你的照片是RGB?你需要保持它在RGB,或正在处理它的灰度好吗? – hbaderts

回答

0

随着你的输入图像I是彩色图像(RGB),数组I是三维的:width -by- height -by- 3,因为每个像素需要三个值:红,绿,蓝色。然而,butterhp的输出始终是width-by-height,因此您试图将2D阵列乘以3D阵列,当然这不会成功。

通常情况下,灰度处理速度更快,并取得相当好的结果。要做到这一点,将图像转换使用rgb2gray加载后为灰度:

imGrayScale = rgb2gray(I); 

如果希望每个颜色通道独立与RGB和处理坚持,你可以通过bsxfun,它适用逐元素操作更换您的乘法(这里:@times,即元素方式乘法)到fftlogimf的所有元素,但是“隐式扩展维度”。这意味着w -by- h -by- 1矩阵被自动转换为w -by- h -by- 3这样两个阵列可以成倍增加。

c = bsxfun(@times, fftlogim, f); 
+0

谢谢!我已经解决了这个问题。我分割了RGB通道并单独地倍增。再次感谢 ! – Sultan

相关问题