Matlab图像处理-灰度拉伸原理方法
本教程适合Matlab数字图像处理的初学者。灰度线性拉伸是数字图像处理中最为简单直接的图像增强方法,本文中所支持的灰度拉伸图像,不仅仅限于灰度图,更将RGB真彩色图、多波段遥感影像纳入灰度拉伸范畴。较为全面直观地给出在Matlab中对图像进行灰度拉伸的方法原理和Matlab源代码,并配合必要的代码注释,希望能帮助Matlab和数字图像处理的初学者入门。
操作方法
- 01
打开图像 [FileName, FilePath]=uigetfile('*.tif;*.jpg;*.png;*.img;*.gif;','请选择图像数据'); str=[FilePath FileName]; Image=imread(str); % 以对话框的形式选择打开一幅图像 [M,N,nDims]=size(Image); Image=im2double(Image); % 获取图像的尺寸和波段数
- 02
灰度拉伸 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中
- 03
保存输出 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命名
结果对比
- 01
灰度图拉伸结果对比 上图:原灰度图 下图:灰度拉伸结果
- 02
RGB真彩色图拉伸结果对比 上图:原RGB真彩色图 下图:灰度拉伸结果
- 03
多波段遥感影像拉伸结果对比 上图:原多波段遥感影像(TM321组合) 下图:灰度拉伸结果(TM321组合)