我试图通过复制行和列来拍摄图像并输出更大的图像,其高度和宽度是输入图像的两倍。
我已经用下面的代码实现了这一点;但是,输出为全黑图像。
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);
程序应生成较大的图像,其高度和宽度是输入图像的高度和宽度的两倍。
答案 0 :(得分:7)
虽然@ sardar-usama的答案很可能是您想在实践中要做的,但严格来说,它不会按照要求的内容重复行/列。而是,它将图像插值到新的大小(尽管,imresize包含有关如何执行插值的选项)。
如果您确实想复制行和列,则可以执行以下操作:
g = repelem(img,2,2);
答案 1 :(得分:3)
答案 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);