4.9 直方图均衡化(待。。。)

写在前面:

1.直方图均衡化

在某些情况下,一副图像中大部分像素的强度都集中在某一区域,而质量较高的图像中,像素的强度应该均衡的分布。为此,可将表示像素强度的直方图进行拉伸,将其平坦化

  1. 使用查找表来拉伸直方图

在图像处理中,直方图均衡化一般用来均衡图像的强度,或增加图像的对比度。在介绍使用直方图均衡化来拉伸图像的直方图之前,先介绍使用查询表的方法。

观察上图中原始图像的直方图,很容易发现大部分强度值范围都没有用到。因此先检测图像非0的最低(imin)强度值和最高(imax)强度值。将最低值imin设为0,最高值imax设为255。中间的按255.0*(i-imin)/(imax-imin)+0.5)的形式设置。

代码

minBinNo, maxBinNo = 0, 255  

#计算从左起第一个不为0的直方图位置  
for binNo, binValue in enumerate(hist):  
    if binValue != 0:  
        minBinNo = binNo  
        break  
#计算从右起第一个不为0的直方图位置  
for binNo, binValue in enumerate(reversed(hist)):  
    if binValue != 0:  
        maxBinNo = 255-binNo  
        break  
print minBinNo, maxBinNo  

#生成查找表,方法来自参考文献1第四章第2节  
for i,v in enumerate(lut):  
    print i  
    if i < minBinNo:  
        lut[i] = 0  
    elif i > maxBinNo:  
        lut[i] = 255  
    else:  
        lut[i] = int(255.0*(i-minBinNo)/(maxBinNo-minBinNo)+0.5)

参考文章:http://blog.csdn.net/sunny2038/article/details/9403059(作者:sunny2038)

results matching ""

    No results matching ""