直方图均衡原理及Matlab实现

直方图均衡(Histogram Equalization)

  • 预备知识(PMF、CDF)
  • 概述
  • 实现
  • Matlab代码

预备知识(PMF、CDF)

1.PMF

概率质量函数(Probability Mass Function)是离散随机变量在各特定点取值上的概率。概率质量函数与概率密度函数的不同之处在于前者是对离散随机变量定义的,而后者对连续随机变量。
考虑一个离散的灰度图像{X},令 ni 表示灰度 i 出现的次数,n代表图像中所有的像素数,则其概率质量函数为:

PMFX(i)=nin,0i<L

其中,L为图像所有的灰度数(通常为256)。
2.CDF
累积分布函数(Cumulative Distribution Function),又叫分布函数,是概率密度函数(概率质量函数)的积分(求和),能完整描述一个实随机变量X的概率分布。

CDFX(x)=P(Xx)

考虑离散灰度图像{X},对应 PMFX 的累积分布函数定义为:

CDFX(i)=j=0iPMFX(j)

概述

直方图均衡是图像处理领域用于增强图像对比度的方法,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
缺点:直方图均衡对处理的数据不加以选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。
直方图均衡化的基本思想是把原始图像的灰度分布直方图变换为均匀分布的形式,扩大了像素灰度值的动态范围,从而增强图像对比度。把原始图像{X}映射为处理后图像{Y}的映射函数需要满足以下两个条件:
(1)映射函数单调递增。
(2)映射函数值域不超过原始图像灰度的动态范围(即 0i<L )。

实现步骤

1.求原始图像灰度的PMF。
2.由PMF求出CDF。
3.将CDF映射为新图像的灰度值。

Matlab代码

I = imread('test.jpg');
[row,col] = size(I);
%display the original image
subplot(221);imshow(I);title('原始图像');
subplot(222);imhist(I);title('原始图像直方图');
%Compute the PMF of all pixels of the image
PMF = zeros(1,256);
for i = 1:row
    for j = 1:col
        PMF(I(i,j) + 1) = PMF(I(i,j) + 1) + 1;
    end
end
%Compute the CDF of all pixels of the image
CDF = zeros(1,256);
CDF(1) = PMF(1);
for i = 2:256
    CDF(i) = CDF(i - 1) + PMF(i);
end
%Mapping
for i = 1:256
    Map(i) = round((CDF(i)-1)*255/(row*col));
end
for i = 1:row
    for j = 1:col
        I(i,j) = Map(I(i,j) + 1);
    end
end
subplot(223);imshow(I);title('处理后图像');
subplot(224);imhist(I);title('处理后图像直方图');

运行结果:
这里写图片描述

  • 9
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值