<数字图像处理(1)> 图像增强(一) 直方图均衡化

直方图均衡化

直方图均衡原理 & MATLAB实现_yaoyz105的博客-CSDN博客_matlab直方图均衡

将原始图像中的灰度分布变换为服从均匀分布,通过扩大动态范围提高对比度。

注:可能增加噪声对比度并降低有用信息对比度,此外只是将灰度扩散,这就导致实际的均衡过后,图像像素间的差距较大。

在这里插入图片描述

连续值推导

取灰度映射函数 s = T ( r ) s=T(r) s=T(r),其中 s s s为输出灰度值; r r r为输入像素值, T ( x ) T(x) T(x)为灰度映射函数。 T ( x ) T(x) T(x)推导如下:设 s s s r r r对应概率密度函数为 p r ( r ) p_r(r) pr(r) p s ( s ) p_s(s) ps(s),则有 p s ( s ) d s = p r ( r ) d r p_s(s){\rm d}s=p_r(r){\rm d}r ps(s)ds=pr(r)dr,由于 s s s服从均匀分布故有:
p s ( s ) = { 1 L − 1 0 ≤ s ≤ L − 1 0 o t h e r s p_s(s)=\begin{cases} \frac{1}{L-1} & 0≤s≤L-1 \\ 0 & others \end{cases} ps(s)={L1100sL1others考虑 s s s r r r有相同的取值范围,故在 [ 0 , L − 1 ] [0,L-1] [0L1]上有:
∫ 0 s 1 L − 1 d s = ∫ 0 r p r ( r ) d r \int_{0}^{s}{\frac{1}{L-1}}{\rm d}s = \int_{0}^{r}{p_r(r)}{\rm d}r 0sL11ds=0rpr(r)dr左式积分即:
s = ( L − 1 ) ∫ 0 r p r ( r ) d r s=(L-1)\int_{0}^{r}{p_r(r)}{\rm d}r s=(L1)0rpr(r)dr
所以在连续信号上,值到均值的变换应为:
T ( r ) = ( L − 1 ) ∫ 0 r p r ( r ) d r T(r)=(L-1)\int_{0}^{r}{p_r(r)}{\rm d}r T(r)=(L1)0rpr(r)dr

离散情况

对于一张灰度值在 [ 0 , 255 ] [0,255] [0,255]的图像,某一灰度 r k r_k rk的概率为 p r ( r k ) = n k w i d t h ∗ h e i g h t p_r(r_k)=\frac{n_k}{width*height} pr(rk)=widthheightnk,其中 n k n_k nk r k r_k rk统计量;width和height分别为图像宽和高。在离散情况下累积分布函数计算为:
C D F r ( r ) = ∑ j = 0 r p r ( r j ) CDF_r(r)=\sum_{j=0}^{r}{p_r(r_j)} CDFr(r)=j=0rpr(rj)
故离散情况下 s k = 255 ∗ ∑ j = 0 k p r ( r j ) s_k=255*\sum_{j=0}^{k}{p_r(r_j)} sk=255j=0kpr(rj) k = 0 , 1 , 2 , . . . , 255 k=0,1,2,...,255 k=0,1,2,...,255

这里的变换 T ( r ) T(r) T(r)称为直方图均衡。

matlab代码

%C:\Users\16431\Desktop\2.jpg
clear;
I = imread('C:\Users\16431\Desktop\4.jpg'); % 读取彩色图


% I=rgb2gray(RGB); % 将彩色图转化为灰度图
subplot(221);
imshow(I);
title('灰度图');

subplot(222);
imhist(I,256);
title('灰度图hist'); 
[R, C] = size(I);

% 统计每个像素值出现次数
cnt = zeros(1, 256);
for i = 1 : R
    for j = 1 : C
        cnt(1, I(i, j) + 1) = cnt(1, I(i, j) + 1) + 1;
    end
end

f = zeros(1, 256);
f = double(f); cnt = double(cnt);

% 统计每个像素值出现的概率, 得到概率直方图
for i = 1 : 256
    f(1, i) = cnt(1, i) / (R * C);
end

% 求累计概率,得到累计直方图
for i = 2 : 256
    f(1, i) = f(1, i - 1) + f(1, i);
end

% 用f数组实现像素值[0, 255]的映射。 
for i = 1 : 256
    f(1, i) = f(1, i) * 255;
end

% 完成每个像素点的映射
I = double(I);
for i = 1 : R
    for j = 1 : C
        I(i, j) = f(1, I(i, j) + 1);
    end
end


% 输出
I = uint8(I);
subplot(223);
imshow(I);
title('直方图均衡化'); 

subplot(224);
imhist(I,256);
title('均衡化hist'); 

1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wdmcs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值