复制图像的行和列

时间:2019-02-07 20:10:17

标签: matlab image-processing

我试图通过复制行和列来拍摄图像并输出更大的图像,其高度和宽度是输入图像的两倍。

我已经用下面的代码实现了这一点;但是,输出为全黑图像。

img = imread('https://people.sc.fsu.edu/~jburkardt/data/png/lena.png');

[M1,N1] = size(img);

M2 = M1*2;
N2 = N1*2;
g = zeros(M2,N2);
imshow(g); 

程序应生成较大的图像,其高度和宽度是输入图像的高度和宽度的两倍。

4 个答案:

答案 0 :(得分:7)

虽然@ sardar-usama的答案很可能是您想在实践中要做的,但严格来说,它不会按照要求的内容重复行/列。而是,它将图像插值到新的大小(尽管,imresize包含有关如何执行插值的选项)。

如果您确实想复制行和列,则可以执行以下操作: g = repelem(img,2,2);

答案 1 :(得分:3)

如果找不到高效的repelem,我可以使用kron

g = kron(img , ones(2));

答案 2 :(得分:2)

要调整图像大小并复制像素,请使用imresize和最近的邻居插值方法。

g = imresize(img,2,'nearest');  %resizing to twice the size of the original image

现在您可以看到:

>> size(img)  
ans =  
   512   512

>> size(g)  
ans =  
   1024  1024

您没有在代码中重复任何行/列。相反,您初始化了一个大小为img两倍的零矩阵。全零的矩阵不过是您所得到的黑色图像。

答案 3 :(得分:2)

如果您因某种原因无法使用repelem,我的另一个建议是创建一个meshgrid坐标,该坐标在每个维度中引入0.5个坐标,然后用floor删除小数,然后索引到图像中。在索引之前,您必须通过sub2ind将坐标转换为线性索引。

换句话说:

img = imread('https://people.sc.fsu.edu/~jburkardt/data/png/lena.png');
[M1,N1] = size(img);

% Create grid of coordinates at twice the frequency
[X,Y] = meshgrid(1:0.5:N1+0.5, 1:0.5:M1+0.5);

% Remove decimal precision
X = floor(X);
Y = floor(Y);

% Convert to linear indices and sample
ind = sub2ind([M1, N1], Y, X);
g = img(ind);