【问题标题】:Is there an efficient way to pad a matrix with zeros on all sides?有没有一种有效的方法来填充一个四面为零的矩阵?
【发布时间】:2011-11-27 17:03:47
【问题描述】:

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

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

有没有一种方法可以消除 (1) 和 (2) 并仅对原始图像进行操作以在所有方向上用 P 零填充它?

【问题讨论】:

    标签: matlab image-processing matrix padding


    【解决方案1】:

    如果您可以访问图像处理工具箱,则可以使用函数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 图像。

    【讨论】:

    • 应该是 imgPadded = zeros(size(img)+2*p, class(img)); imgPadded(p+1:end-p,p+1:end-p) = img;
    • @krishna222:很好,谢谢。已修复,现在应该适用于灰色和 RGB 图像
    【解决方案2】:
    >> 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)];
    

    【讨论】:

    • 太棒了!正是我想要的。
    【解决方案3】:

    使用padarray:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-29
      • 1970-01-01
      • 2020-03-30
      • 2011-09-24
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多