我对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)
答案 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)
我想甚至可以用某种方式对计算进行矢量化而不是循环,但是我没有打扰。