Matlab图像处理-直方图均衡化原理方法

2025-10-22 05:30:23

1、打开图像

[FileName, FilePath]=uigetfile('*.tif;*.jpg;*.png;*.img;*.gif;','请选择图像数据');

str=[FilePath FileName];

Image=imread(str);

% 以对话框的形式选择打开一幅图像

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

Image=im2double(Image);

% 获取图像的尺寸和波段数

2、直方图均衡化

HISTEQ=Image;

for i=1:nDims  % 分别对各波段进行直方图均衡化

    H=Image(:,:,i);

    [counts,x]=imhist(H);  % 计算各灰度级x的像素个数count

    loction=find(counts~=0); % 找到所有像素个数不为0的灰度级

    MinCDF=min(counts(loction)); 

    for j=1:length(loction)

        CDF=sum(counts(loction(1:j)));  % 计算各灰度级像素个数累积分布CDF

        P=find(H==x(loction(j)));

        H(P)=(CDF-MinCDF)/(M*N-MinCDF); % 灰度转换公式

    end

    HISTEQ(:,:,i)=H; % 将均衡化后各分量分别保存在结果中

end

3、保存输出

figure,  % 在同一窗口显示原图与灰度拉伸结果图

if nDims==3||nDims==1  % 若为灰度图和RGB真彩色图则以常规方式保存并输出

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

    subplot(1,2,2),imshow(HISTEQ);title('直方图均衡化');

    imwrite(HISTEQ,'Result_HISTEQ.jpg','jpeg');

else  % 若为多波段遥感影像则按照TM 3,2,1组合形式保存并输出

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

    subplot(1,2,2),imshow(HISTEQ(:,:,[3,2,1]));title('直方图均衡化');

    imwrite(HISTEQ(:,:,[3,2,1]),'Result_HISTEQ.tif','tiff');

end

% 将直方图均衡化结果保存至当前目录并以Result_HISTEQ命名

1、上图:原灰度图

下图: 直方图均衡化结果图

Matlab图像处理-直方图均衡化原理方法

Matlab图像处理-直方图均衡化原理方法

1、上图:原灰度图直方图

下图: 直方图均衡化结果图直方图

Matlab图像处理-直方图均衡化原理方法

Matlab图像处理-直方图均衡化原理方法

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢