不知道为什么不执行矩阵乘法。甚至我的mtrices都是2d
Iout = real(ifft2(Hemphasis.*If));
重点大小615x819双
大小如果616x7388加倍
帮我纠正这个问题
答案 0 :(得分:4)
你的矩阵使用乘法的大小是错误的。
感谢:
[a b [e f
c d] .* g h]
结果将是:
[a*e b*f
c*g d*h]
但是如果你有:
[a b [e f g
c d] .* h i j]
g和j乘以什么?
它们的大小必须相同,即615x819 .* 615x819
此处有更多信息:
http://www.mathworks.com.au/help/matlab/ref/times.html#btx_68n
答案 1 :(得分:2)
用零填充最小的数组,以便与最大的数组相同。更好的是,在每个维度中将两个阵列填充到2个大小的幂,ifft()效果更好。
size_H=size(Hemphasis); size_I=size(If);
sz=max(size_H,size_I); % get the maximum size in each dimension
p=nextpow2(sz); % get the smallest power of 2 >= sz
sz2=2.^p; % set the proper size
Hemphasis2=zeros(sz2);
Hemphasis2(1:size_H(1),1:size_H(2))=Hemphasis;
If2=zeros(sz2);
If2(1:size_I(1),1:size_I(2))=If; % place Fourier transforms at top corner
Iout=real(ifft2(Hemphasis2.*If2));
由于您在频域中进行过滤,如果图片可用,您可以先验地找到合适的尺寸。此大小表示您可以使用的fft2的样本数,然后简单地乘以并执行ifft2。
...
sz2=2.^p;
Hemphasis=fft2(h,sz2(1),sz2(2));
If=fft2(f,sz2(1),sz2(2));
Iout=real(ifft2(Hemphasis.*If));