我正在使用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零点在所有方向上填充它?
答案 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]);