本教程適合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函數實現。