直方图基础

直方图基础

2016年10月09日 20:07:39 zhulf0804 阅读数:739

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhulf0804/article/details/52769859

一、直方图简介

图像的灰度变换是基于图像灰度直方图的信息,并且直方图在图像处理方面发挥了基础性的作用,比如在增强、压缩、分割和描述领域。

一个在范围[0,G]内具有L个可能灰度级的数字图像的直方图被定义成离散函数

 

 

这里是区间[0,G]上的第k个灰度级,是图象中灰度级是的像素的数量。对于uint8类的图像,G的值是255,对于uint16类的图像,G的值是65535,double类的图像G的值是1.0。

通过把所有的除以图像中的像素总数,我们可以得到一个归一化直方图,也就是

 

 

从基本的概率角度,我们知道可以被认为是灰度级为的概率的估计。

直方图函数:

h=imhist(I,b),I是输入图像,h是它的直方图,b是用来构成直方图的bins的数量。如果参数中b被省略,b值默认为256。一个bin就是灰度等级的一个划分。

我们可以通过

p=imhist(f,b)/numel(f)

得到归一化直方图。

>> I=imread('E:\cv\冈萨雷斯数字图像处理MATLAB版图片\dipum_images_ch03\Fig0308(a)(pollen).tif');

>> g=imhist(I);

>> imhist(I)

我们得到的g是256 x 1 double类型的,直方图如下:

 

>> g2=imhist(I,4);

>> imhist(I,4)

得到的g2是4 x 1 double的,直方图如下

 

其实我们可以发现当b=4时直方图的横坐标被四种不同颜色块划分,通过此我们可以清晰的理解四个灰度级。

直方图经常以条形图来画出,我们可以使用

函数bar(horz,v,width)

来实现。

这里v是一个包括将要画的点的行向量;horz是一个和v有相同维数的向量,它包括了水平刻度的增量,如果horz被省略,水平刻度将被划分为0到length(v);width是0和1之间的一个数。

>> h1=imhist(I,16);

>> horz=1:16;

>> bar(horz,h1,0.8)

>> axis([0 16 0 65000])

>> set(gca,'xtick',0:1:16)

>> set(gca,'ytick',0:4000:65000)

直方图效果如下

>> horz=35:50;

>> bar(horz,h1,0.8)

直方图变成如下形状

 

于是,对horz的理解就是条形图中的横坐标的值。

 

二、图像的灰度级统计

 

>> I=[0 0.1 0.2 0.24;0.51 0.55 0.60 0.65;0.65 0.60 0.70 0.72;0.76 0.80 0.85 1]

 

I =

 

        0    0.1000    0.2000    0.2400

    0.5100    0.5500    0.6000    0.6500

    0.6500    0.6000    0.7000    0.7200

    0.7600    0.8000    0.8500    1.0000

 

>> g2=imhist(I,4)

 

g2 =

 

     2

     2

    10

     2

 

>> imhist(I,4)

 

首先,横轴处显示了4中不同的色块,表示我们均衡后的灰度级有4个,分别为蓝线所在处的像素值0,0.33,0.67,1。对于什么样的灰度值是0灰度级,什么样的灰度值是0.33灰度级呢?

   对于灰度图像,直方图的N个bins是宽度为A/(N-1)的半开区间。

  对于uint8, uint16和 uint32 灰度图像, 第p个 bin 是半开区间:

         A*(p-1.5)/(N-1)  <= x  <  A*(p-0.5)/(N-1),对于0-1double类图像应同是如此。

对应此实例,第一个bin区间为[-0.16,0.16),[0.16,0.5),[0.5,0.83),[0.83,1.16),所以才有了上述的划分结果(g2)。

再如:

>> I=[0 20 40 75;80 100 125 150;160 185 190 200;205 210 130 255]

 

I =

 

     0    20    40    75

    80   100   125   150

   160   185   190   200

   205   210   130   255

 

>> I=uint8(I)

 

I =

 

    0   20   40   75

   80  100  125  150

  160  185  190  200

  205  210  130  255

 

>> imhist(I)

>> ylim('auto')

 

>> g=imhist(I,4)

 

g =

 

     3

     4

     8

     1

 

>> figure,imhist(I,4)

 

利用上面的规则,我们同样可以对uint8类型的矩阵统计其灰度级,得到结果与imhist函数的操作结果一样。

 

至此,图像直方图的基本知识介绍完了,接下来介绍直方图均衡化和匹配。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wangchuang2017

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

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

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

打赏作者

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

抵扣说明:

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

余额充值