复制图像的行和列



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

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

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 两倍的零矩阵。所有零的矩阵只不过是一个黑色的图像,这就是你得到的。

最新更新