2016-08-25 85 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))