【问题标题】:Padding an image in MATLAB在 MATLAB 中填充图像
【发布时间】:2011-09-29 15:27:42
【问题描述】:

我有一个大小为 61x56 的图像,我想将图像填充为 392x392 大小。

我正在尝试使用padarray,但由于我得到一个非整数值,我无法执行此操作。谁能帮我这个。非常感谢!我在下面附上了我想做的事情。

K = imread('test.jpg');
K = rgb2gray(K);
[m n] = size(K);
p = 392;
q = 392;
K_pad = padarray(K, [(p-m)/2 (q-n)/2], 'replicate');

【问题讨论】:

    标签: image matlab image-processing pad


    【解决方案1】:

    您可以将padarray 指令分为两个调用:

    K_pad = padarray(K, [floor((p-m)/2) floor((q-n)/2)], 'replicate','post');
    K_pad = padarray(K_pad, [ceil((p-m)/2) ceil((q-n)/2)], 'replicate','pre');
    

    但您可能需要检查图像角落中发生的情况,看看是否符合您想要对它执行的操作。

    【讨论】:

    • 我想知道只用一个内存副本是否可以更有效地完成。
    【解决方案2】:

    这是不使用padarray 的另一种填充方式。

    imgSize=size(img); %#img is your image matrix
    finalSize=392;   
    padImg=zeros(finalSize);
    
    padImg(finalSize/2+(1:imgSize(1))-floor(imgSize(1)/2),...
        finalSize/2+(1:imgSize(2))-floor(imgSize(2)/2))=img;
    

    【讨论】:

    • 只会用零填充吗?如果您想要replicate 功能怎么办?
    • @4Oh4 请不要编辑他人的代码。相反,请留下评论,说明您认为应该更改的原因。 OP 可能出于特定目的编写此代码,未经其批准不得更改。
    【解决方案3】:

    你可以试试这个功能:

    function out1 = myresize(in1)
    %% Sa1habibi@gmail.com
    %% resize an image to closest power of 2
    
    [m,n] = size(in1);
    
    if(rem(m,2)~=0)
        in1(1,:)=[];
    end
    
    if(rem(n,2)~=0)
        in1(:,1)=[];
    end
    
    [m,n] = size(in1);
    
    a = max(m,n);
    
    if(log2(a)~=nextpow2(a) || m~=n)
    
        s1 = 2^nextpow2(a);
        n_row = (s1 - m)/2;
        n_col = (s1 - n)/2;
    
        dimension = [n_row,n_col];
    
        out1 = padarray(in1,dimension);
    
    end
    end
    

    例如:

    A = ones(2,8);
    out1 = myresize(A);
    

    首先它找到行和列的最大值,然后在两个方向上填充矩阵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      相关资源
      最近更新 更多