Matlab For Loop Image

时间:2016-08-25 02:07:20

标签: image matlab for-loop image-processing

我正在尝试在MATLAB中打开一个.pgm图像文件,使用for循环运行一个操作,然后保存为另一个.pgm文件。在进行操作之前,我正在测试是否可以重新创建图像:

clear

picture = imread('Picture.pgm');

sizePic = size(picture);

sizeX = sizePic(1);
sizeY = sizePic(2);

newPicture = zeros(sizeX,sizeY);


for i = 1:sizeX
    for j = 1:sizeY
        newPicture(i,j) = picture(i,j);
    end
end

imwrite(newPicture, 'NewPicture.pgm');

然而,新图像几乎都是白色的,带有一些黑色斑点(不是原始图像)。难道这不能让我回到原始图像吗?

1 个答案:

答案 0 :(得分:3)

默认情况下,从imread(XXX.pgm)创建的pictureuint8uint16数组,这意味着像素值的范围为[0 255]或[ 0 65535]。另一方面,从newPicture创建的zerosdouble数组,其预期像素值仅为[0 1]。在保存的图像中,任何大于1的值都将被解释为1(白色)。当您为这样的double数组指定[0 255]值时,由于picture中的大多数像素值都是1及以上,当然您将获得大部分白色像素

处理图像时,请务必检查图像阵列的类型。例如,通过显式转换imread返回的图像,始终使用double类型可能是个好主意: pictures=im2double(imread(xxx))