我是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
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
由于您的输入图像I
是彩色图像(RGB),因此数组I
是三维的: width
- by - height
- by - 3
,因为对于每个像素,您需要三个值:红色,绿色和蓝色。但是,butterhp
的输出总是 width
- by - height
,所以你试图将2D数组乘以3D数组,当然失败了。
通常,灰度处理速度更快,效果更好。为此,请在使用rgb2gray
加载后将图像转换为灰度:
imGrayScale = rgb2gray(I);
如果您想坚持使用RGB并独立处理每个颜色通道,您可以将乘法替换为bsxfun
,这将应用逐元素操作(此处:@times
,即元素乘法)fftlogim
和f
的所有元素,但是"隐式扩展维度"。这意味着 w
- by - h
- by - 1
矩阵会自动转换为 w
- by - {{1 } - by - h
因此两个数组都可以相乘。
3