复制图像中的像素并将其大小加倍

时间:2015-03-04 20:46:03

标签: image matlab image-processing

我正在尝试复制矩阵或图像中的每个元素,并尝试将图像的大小增加4.这意味着行和列的大小加倍。

我试图通过使用for循环而没有数组索引来做到这一点。这是我到目前为止所做的。

function output = zoomx(img)
[r,c] = size(img);
output = img(r,c);
[r1, c1] = size(output);
for x = 1:r1
    for y = 1:c1
        j = 4*x;
        i = 4*y;
        output(j,i) = img(x,y);
    end
end
end

到目前为止,我尝试做的是迭代输出矩阵,并将每个元素乘以4,但我得到的只是一个零的巨大矩阵和新矩阵中的每个元素在每个元素之间用4行和0和0列间隔开。

非常感谢任何帮助!

谢谢。

1 个答案:

答案 0 :(得分:3)

我假设您的目标是将图像的尺寸因子增加4,这意味着行和列的大小加倍。您需要做的是创建一个输出图像,其行和列的数量是原始图像的两倍,然后对于原始图像中的每个像素,您需要将像素从原始图像复制到右侧,底部和右下角位置。

作为次要说明,您的第二行代码output = img(r,c)并不正确。这是访问位于原始图像左下角的单个像素。您可能打算使用zeros。此外,当您缩小图像时,您可以在我之前发布的帖子中显示您访问输出中像素的位置的方式:Subsample an image using a for loop。如果您还记得,行和列的输出到输出映射是:

j = factor*(x-1) + 1;
i = factor*(y-1) + 1;

在我们的例子中,因为你想要加倍图像的大小,你可以设置factor = 2。此外,我们将扭转操作。输出图像需要ij,而不能访问输入图像。我们还需要将ij移到+1,以便为输出设置每个加倍块的右,底部和右下像素。

因此:

function output = zoomx(img)
[r,c] = size(img);
output = zeros(2*r,2*c,class(img)); %// Change
for x = 1:r %// Change
    for y = 1:c
        j = 2*(x-1) + 1; %// Change
        i = 2*(y-1) + 1; %// Change           
        output(j,i) = img(x,y); %// Top-left
        output(j+1,i) = img(x,y); %// Bottom-left
        output(j,i+1) = img(x,y); %// Top-right
        output(j+1,i+1) = img(x,y); %// Bottom-right
    end
end
end

使用示例:

>> im = imread('cameraman.tif');
>> out = zoomx(im);
>> imshow(out);

输入图片:

enter image description here

输出图像:

enter image description here