使用for循环缩小和重新缩放图像

时间:2018-09-08 17:44:25

标签: matlab

我对Matlab还是比较陌生,试图理解为什么一段代码无法正常工作。

我有一个512x512的图片,需要将其缩小为256,然后重新调整为512。 我对数学的理解是,我需要指图像中的像素以获得256,然后将它们求和以获得512。这是正确的吗?以下是我正在查看的代码,如果有人可以向我解释错误之处(它给出空白的白色图像),我将不胜感激:

w = double(imread('walkbridge.tif'));
%read the image

w = w(:,:,1);

for x = 1:256
    for y  = 1:256
        s256(x,y) = (w(2*x,2*y)+ w(2*x,(2*y)-1) + w((2*x)-1,2*y)+ w((2*x)-1,(2*y)-1))/4;
    end
end

for x = 1 : 256
    for y = 1 : 256
        for x1 = 0:1
            for y1 = 0:1
                R1((2*x)-x1,((2*y)-y1)) = s256(x,y);
            end
        end
    end
end

imshow(R1)

1 个答案:

答案 0 :(得分:0)

我让您的代码可以工作,因此您的图像数据中可能有一些错误的值。即,如果图像的值在0..127或类似范围内,则很可能会显示为全白。默认情况下,imshow期望颜色通道的范围是0..1。

您可能还想通过索引原始数组而不是访问单个元素来简化代码。这样,代码甚至很容易更改:

half_size = 256;

w = magic(2*half_size);
w = w / max(w(:));

figure()
imshow(w)

s = zeros(half_size);
for x = 1:half_size
    for y  = 1:half_size
        ix = w(2*x-1:2*x, 2*y-1:2*y);
        s(x,y) = sum(ix(:))/4;
    end
end

for x = 1:half_size
    for y = 1:half_size
        R1(2*x-1:2*x, 2*y-1:2*y) = s(x,y);
    end
end

figure()
imshow(R1)

我想甚至可以用某种方式对计算进行矢量化而不是循环,但是我没有打扰。