【问题标题】:Replicating pixels in an image and doubling its size复制图像中的像素并将其大小加倍
【发布时间】:2015-03-05 09:05:06
【问题描述】:

我正在尝试复制矩阵或图像中的每个元素,并尝试将图像的大小增加 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每个元素之间的零和零的行和列。

对此的任何帮助将不胜感激!

谢谢。

【问题讨论】:

  • 我不明白。您想让输出图像比输入图像大 4 倍吗?
  • 是的,这就是我想要做的!
  • @LuisMendo - 呵呵没问题我的朋友。 FWIW,第一眼我也错过了。
  • 你可以使用for n=1, output = kron(ones(2), img); end :-P
  • 如果需要填充4个像素,需要做4个赋值。

标签: image matlab image-processing


【解决方案1】:

我假设您的目标是将图像的大小因子增加 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);

输入图像:

输出图像:

【讨论】:

  • 你好@rayryeng,就像之前的收缩问题一样,我试图做到这一点,但使用for循环。我的代码是这样的,我将解释我试图摆脱什么,只是为了给你一些背景。
  • @RohanNair - 提出一个新问题。
猜你喜欢
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多