图像处理之直方图均衡化

1. 图像直方图

   1.1 灰度直方图

    图像的灰度直方图是图像灰度级的函数,表示数字图像中每一灰度级与其出现频数(呈现该灰度的像素数目)之间的统计关系。通常,用横坐标表示灰度级( 0 0 0~ 255 255 255),纵坐标表示频数或相对频数(呈现该灰度级的像素出现的概率)。
    灰度直方图的定义如下式所示:
P ( r k ) = n k N P(r_k)=\frac{n_k}{N} P(rk)=Nnk
式中, N N N是图像的像素总数, n k n_k nk是第 k k k级灰度的像素数目, r k r_k rk表示第 k k k个灰度级, P ( r k ) P(r_k) P(rk)是灰度级 r k r_k rk出现的频数。

   1.2 灰度直方图的性质

  • 不具有空间特性
    直方图描述了每个灰度级具有的像素的个数,但不能反映或表示图像像素的空间位置信息;
  • 反映图像的大致描述
    图像灰度范围、灰度级分布、整幅图像平均亮度等;
  • 唯一性
    一幅图像唯一一对应相应的直方图,而不同的图像可以具有相同的直方图;

2. 直方图均衡化

    直方图均衡化是采用灰度级 r r r累积分布函数作为变换函数的直方图修正法
    假设用 p ( r ) p(r) p(r)表示原图像灰度级r的灰度级概率密度函数,直方图均衡化变换函数为:
s = T ( r ) = ∫ 0 r p r ( ω ) d ω s=T(r)=\int_0^rp_r(\omega)d\omega s=T(r)=0rpr(ω)dω
T ( r ) T(r) T(r) r r r的累积分布函数,随着 r r r增大, s s s值单调增加,最大为1。

    给出一幅数字图像,共有 L L L个灰度等级,总像素个数为 N N N,其中,第 j j j级灰度 r j r_j rj对应的像素数为 n j n_j nj,则图像进行直方图均衡化处理的变换函数 T ( r ) T(r) T(r)为:
s k = T ( r k ) = ∑ j = 0 k p r ( r j ) = ∑ j = 0 k n j N s_k=T(r_k)=\sum_{j=0}^{k}p_r(r_j)=\sum_{j=0}^{k}\frac{n_j}{N} sk=T(rk)=j=0kpr(rj)=j=0kNnj

     对一幅数字图像进行直方图均衡化处理的算法步骤如下∶
(1)统计原始图像直方图;
(2)计算新的灰度级;
(3)修正 s k s_k sk为合理的灰度级;
(4)计算新的直方图;

(5)用处理后的新灰度代替处理前的灰度,生成新图像。

3. 直方图与直方图均衡化代码展示

   3.1 直方图

clc,clear,close all;
Image = imread('Couple.bmp');
histgram = zeros(256);
[h,w] = size(Image);
for x=1:w
    for y=1:h
        %灰度值范围为0-255,直方图长度为255+1
        %将相应灰度值出现的次数累加,并置于直方图相应的索引处(灰度值+1histgram(Image(y,x)+1) = histgram(Image(y,x)+1)+1;
    end
end
imshow(Image);title('原图');
figure;stem(histgram(),'.');
axis tight;

在这里插入图片描述
   MATLAB提供了直接计算图像直方图的函数∶

imhist(I, N)
%N为灰度级,默认为256
imhist(X,MAP)
%统计并显示索引图像X的直方图,MAP为调色板
%%
clc,clear,close all;
Image = imread('couple.bmp');
subplot(121),imshow(Image);title('原图');
subplot(122), imhist(Image);
axis tight;

在这里插入图片描述

   3.2 直方图均衡化

clc,clear,close all;
Image = imread('Couple.bmp');
histgram =  imhist(Image);
[h,w] = size(Image);
NewImage = zeros(h,w);
s = zeros(256);
s(1) = histgram(1);
for t=2:256
    s(t) = s(t-1)+histgram(t);%获取灰度值的累积分布
end
for x=1:w
    for y=1:h
        NewImage(y,x)=s(Image(y,x)+1)/(h*w);%利用直方图计算新的图像灰度值
    end
end
subplot(121),imshow(Image);
subplot(122),imshow(NewImage);

在这里插入图片描述
   MATLAB提供了直接计算图像直方图均衡化的函数∶

J = histeq(I,N)
%对图形I进行均衡化处理,N为输出图像的灰度级数
clc,clear,close all;
Image = imread('GIRL.bmp');
NewImage = histeq(Image,64);
subplot(121),imshow(Image);
subplot(122),imshow(NewImage);

在这里插入图片描述

  • 6
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值