2016-08-25 89 views
0

我想在MATLAB中打开一个.pgm图像文件,用for循环运行一个操作,然后另存为另一个.pgm文件。做处理之前,我测试,以看看我是否能重建图像:Matlab For Loop Image

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'); 

然而,新的图像几乎全白有一些黑色斑点(不是原来的),应该不就是给我回原始图像?

+0

很可能与'imread'和'imwrite'中的默认编码选项有关。我会建议检查函数的文档,然后检查图像文件中的编码。 –

回答

2

默认情况下,从imread(XXX.pgm)创建的picture可以是uint8uint16数组,表示像素值在[0 255]或[0 65535]的范围内。另一方面,从zeros创建的newPicturedouble阵列,其预期像素值仅为[0 1]。任何大于1的值将在保存的图像中被解释为1(白色)。当您为这样的double阵列分配一个[0 255]值时,由于picture中的大部分像素值为1以上,所以当然您将获得大多数白色像素

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