矩阵维度误差。甚至两个矩阵都是2d

时间:2014-07-11 03:39:53

标签: matlab

不知道为什么不执行矩阵乘法。甚至我的mtrices都是2d

Iout = real(ifft2(Hemphasis.*If));
  

重点大小615x819双

     

大小如果616x7388加倍

     

帮我纠正这个问题

2 个答案:

答案 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));