Matlab圖像處理-灰度拉伸原理方法

本教程適合Matlab數字圖像處理的初學者。灰度線性拉伸是數字圖像處理中最為簡單直接的圖像增強方法,本文中所支持的灰度拉伸圖像,不僅僅限於灰度圖,更將RGB真彩色圖、多波段遙感影像納入灰度拉伸範疇。較為全面直觀地給出在Matlab中對圖像進行灰度拉伸的方法原理和Matlab原始碼,並配合必要的代碼注釋,希望能幫助Matlab和數字圖像處理的初學者入門。

工具/原料

推薦:Matlab 2013a及以上

支持:灰度圖、RGB真彩色圖、多波段遙感影像

方法/步驟

打開圖像

[FileName, FilePath]=uigetfile('*.tif;*.jpg;*.png;*.img;*.gif;','請選擇圖像數據');

str=[FilePath FileName];

Image=imread(str);

% 以對話框的形式選擇打開一幅圖像

[M,N,nDims]=size(Image);

Image=im2double(Image);

% 獲取圖像的尺寸和波段數

灰度拉伸

ImageStretch=Image;

for i=1:nDims  % 對每個波段依次進行灰度拉伸

Sp=Image(:,:,i);

MaxDN=max(max(Sp));

MinDN=min(min(Sp));

Sp=(Sp-MinDN)/(MaxDN-MinDN);  % 灰度拉伸公式

ImageStretch(:,:,i)=Sp;

end

% 將灰度拉伸結果保存在ImageStretch中

保存輸出

figure,  % 在同一窗口顯示原圖與灰度拉伸結果圖

if nDims==3||nDims==1  % 若為灰度圖和RGB真彩色圖則以常規方式保存並輸出

subplot(1,2,1),imshow(Image);title('原圖');

subplot(1,2,2),imshow(ImageStretch);title('灰度拉伸');

imwrite(ImageStretch,'Result_Stretch.jpg','jpeg');

else  % 若為多波段遙感影像則按照TM 3,2,1組合形式保存並輸出

subplot(1,2,1),imshow(Image(:,:,[3,2,1]));title('原圖');

subplot(1,2,2),imshow(ImageStretch(:,:,[3,2,1]));title('灰度拉伸');

imwrite(ImageStretch(:,:,[3,2,1]),'Result_Stretch.tif','tiff');

end

% 將拉伸結果保存至當前目錄並以Result_Stretch命名

結果對比

灰度圖拉伸結果對比

上圖:原灰度圖

下圖:灰度拉伸結果

RGB真彩色圖拉伸結果對比

上圖:原RGB真彩色圖

下圖:灰度拉伸結果

多波段遙感影像拉伸結果對比

上圖:原多波段遙感影像(TM321組合)

下圖:灰度拉伸結果(TM321組合)

注意事項

Matlab中若需寫入4波段以上信息到tif格式文件中,需要通過Tiff函數實現。

本文內容整理自網絡, 文中所有觀點看法不代表淘大白的立場