histeq的原理和用法

 

参考文档:Image Processing Toolbox™ 6

 

User’s Guide

 

如果图像的对比度太差,常用的方法就是灰度直方图均衡化。在matlab中,能达到这个目的的函数就是histeq.那么直方图均衡化的原理是什么呢?下面就主要讲解一下: 

histeq的原理:

[MN]=size(H);

[counts,x]=imhist(H);%H是读取的图像,imhist是对图像直方图进行统计,其中counts,是每个灰度值得个                                                 数,x代表灰度值。一般的,x=1:256

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

MinCDF=min(counts(location));%找到包含个数最少的灰度级

for  j=1:length(location)

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

      P=find(H==x(location(j)));%找到图像中等于某个灰度级所有像素点所在位置

      H(P)=(CDF-MinCDF)/(M*N-MinCDF);%利用灰度换算公式,修改所有位置上的像素值

end

简单的说,就是将每个灰度值利用一个变换公式替换掉。

简单的例子:

clc;clear;closeall;

H=imread('pout.tif');figure;subplot(121);imshow(H);%图像应该是灰度图,若图像为彩色图,需要对每个通道                                                                                                 进行计算

H=im2double(H);%这个是需要注意的地方,一定要变换成double类型

[N]=size(H);

[counts,x]=imhist(H);%H是读取的图像,imhist是对图像直方图进行统计,其中counts是每个灰度值得个                                                     数,x代表灰度值,一般x=1:256(uint8)

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

MinCDF=min(counts(location));%找到包含个数最少的灰度级

for j=1:length(location)

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

   P=find(H==x(location(j)));%找到图像中等于某个灰度级所有像素点所在位置

   H(P)=(CDF-MinCDF)/(M*N-MinCDF);%利用灰度换算公式,修改所有位置上的像素值

end

subplot(122);imshow(H)

print(gcf,'-djpeg',['1.jpg']);   % 保存为jpg格式的图片。

    如果用histeq就更简单了:

    clc;clear;closeall;

    H=imread('pout.tif');figure;imshow(H);

    imhist(H);

    B=histeq(H);figure;imshow(B)

    imhist(B)

 

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值