不能用零填充所以我可以乘以元素两个矩阵(matlab)

Cant pad with zeros so i can multiply by element two matrices (matlab)

我有两个矩阵,A(逆滤波器)和B(频域图像,为简单起见,值是零和一)

A=ones(20,20);
B=zeros(33,33);

我想将它们乘以这样的元素:

C=A.*B;

出于信号处理的目的(在频域中找到乘积然后变换回来(图像恢复)。
为此,我应该填充最小的数组,使其成为 A[33,33], 但是当我这样填充时

A=padarray(A,[7,7]);

这使得 size(A)=(44,44); 然后像这样

A=A(1:33,1:33); 

我的图片没有居中,达不到预期的效果。
如何填充图像 A 使其居中,然后与 B 相乘?

使用fftshift怎么样?

pA = fftshift(A);
pA(size(B,1),size(B,2)) = 0;  %// fill with zeros, high frequencies
pA = ifftshift(pA); 

你可以使用 pre 和 post padding

A = ones(20,20);
B=zeros(33,33);
A = padarray(A,7,'symmetric','pre');
A = padarray(A',7,'symmetric','pre');
A = padarray(A,6,'symmetric','post');
A = padarray(A',6,'symmetric','post');
C = A.*B;

我只是根据对称性做了填充。由于 A 的所有元素都是 1,因此根据对称性,它确实用 1 填充了它。你可以尝试不同的只需要写

help padarray

在命令提示符下查看 "padarray" 实际如何在不同场景下工作的详细信息 同样对于您的代码,我用 7 填充顶部 pre,用 6 填充 post 使其成为 13。 希望这会有所帮助