是否有一种有效的方法来填充所有边上都带有零的矩阵?

时间:2011-11-27 17:03:48

标签: matlab image-processing matrix padding

我正在使用Efros and Leung Algorithm对图像进行纹理合成。我的目标是增加当前纹理图像的大小,为此,我想在所有方面用零填充当前图像矩阵。

我目前的计划给出了一个大小为MxN且所需增长大小为P:
的原始图像矩阵 (1)创建大小为(M + 2P)x(N + 2P)的目标矩阵 (2)设定目标值(i + P,j + P)=原始(i,j)
(3)运行Efros和Leung

有没有办法可以消除(1)和(2),只需对原始图像进行操作,用P零点在所有方向上填充它?

3 个答案:

答案 0 :(得分:4)

如果您有权访问图像处理工具箱,则可以使用函数PADARRAY

imgPadded = padarray(img, [p p], 0, 'both');

否则你可以简单地使用矩阵索引:

sz = size(img);
imgPadded = zeros([sz(1:2)+2*p size(img,3)], class(img));
imgPadded((1:sz(1))+p, (1:sz(2))+p, :) = img;

这适用于灰度和RGB图像。

答案 1 :(得分:3)

>> y = [zeros(P,N+2*P) ; [zeros(M,P), x, zeros(M,P)] ; zeros(P,N+2*P)];

其中x是原始图像矩阵,y是输出应该有效。如果矩阵有3个平面,请调整为:

>> y = [zeros(P,N+2*P,3) ; [zeros(M,P,3), x, zeros(M,P,3)] ; zeros(P,N+2*P,3)];

答案 2 :(得分:3)

使用padarray

y = padarray(x, [P P]);