我正在尝试通过复制行和列来获取图像并输出更大的图像,其高度和宽度是输入图像的两倍。
我已经用下面的代码实现了这一点;但是,输出是一个完全黑色的图像。
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);
程序应生成一个更大的图像,其中的高度和宽度是输入图像的高度和宽度的两倍。
虽然 @sardar-usama 的答案可能是你想在实践中做的事情,但严格来说,它不会按照问题的要求重复行/列。 相反,它将图像插值为新大小(尽管 imresize 包括有关如何执行插值的选项(。
如果您确实想复制行和列,您可以执行以下操作: g = repelem(img,2,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);
如果我找不到有效的repelem
我可以使用kron
:
g = kron(img , ones(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
两倍的零矩阵。所有零的矩阵只不过是一个黑色的图像,这就是你得到的。