直方图基础
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函数的操作结果一样。
至此,图像直方图的基本知识介绍完了,接下来介绍直方图均衡化和匹配。