使用时出错。* Matrix尺寸必须同意吗?

时间:2016-11-16 16:11:35

标签: matlab matrix

我是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

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分: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 - {{1 } - by - h 因此两个数组都可以相乘。

3