不能用零填充所以我可以乘以元素两个矩阵(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。
希望这会有所帮助
我有两个矩阵,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。 希望这会有所帮助