• 数学之路-python计算实战(14)-机器视觉-图像增强(直方图均衡化)


    我们来看一个灰度图像,让n_i表示灰度i出现的次数,这样图像中灰度为i 的像素的出现概率是

    p_x(i) = frac{n_i}{n}, iin {0,..., L - 1}

    L 是图像中全部的灰度数,n 是图像中全部的像素数, p 实际上是图像的直方图,归一化到 0..1

    把 c 作为相应于 p 的累计概率函数, 定义为:

     c(i) = sum_{j=0}^i p_x(j)

    c 是图像的累计归一化直方图。

    我们创建一个形式为 y = T(x) 的变化,对于原始图像中的每一个值它就产生一个 y,这样 y 的累计概率函数就能够在全部值范围内进行线性化,转换公式定义为:

    y_i = T(x_i) = c(i)

    注意 T 将不同的等级映射到 {0..1} 域。为了将这些值映射回它们最初的域,须要在结果上应用以下的简单变换:

    y_i' = y_i cdot(max - min) + min

    上面描写叙述了灰度图像上使用直方图均衡化的方法。可是通过将这样的方法分别用于图像RGB颜色值的红色、绿色和蓝色分量,从而也能够对彩色图像进行处理。


    Python: cv2.equalizeHist(src[, dst]) → dst
    C: void cvEqualizeHist(const CvArr* src, CvArr* dst)
    Parameters:
    • src – Source 8-bit single channel image.
    • dst – Destination image of the same size and type as src .

    The function equalizes the histogram of the input image using the following algorithm:

    1. Calculate the histogram H for src .

    2. Normalize the histogram so that the sum of histogram bins is 255.

    3. Compute the integral of the histogram:

      H'_i =  sum _{0  le j < i} H(j)

    4. Transform the image using H' as a look-up table: 	exttt{dst}(x,y) = H'(	exttt{src}(x,y))

    The algorithm normalizes the brightness and increases the contrast of the image. 

    # -*- coding: utf-8 -*-   
    #code:myhaspl@myhaspl.com
    import cv2
    fn="test1.jpg"
    myimg=cv2.imread(fn)
    img=cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY)
    newimg=cv2.equalizeHist(img)
    cv2.imshow('src',img)
    cv2.imshow('dst',newimg)
    cv2.waitKey()
    cv2.destroyAllWindows()
    


    本博客全部内容是原创,假设转载请注明来源

    http://blog.csdn.net/myhaspl/

    以下右图是经过增强化的图


    直方图均衡化通经常使用来添加很多图像的全局对照度,尤其是当图像的实用数据的对照度相当接近的时候。

    通过这样的方法,亮度能够更好地在直方图上分布。这样就能够用于增强局部的对照度而不影响总体的对照度

    本博客全部内容是原创,假设转载请注明来源

    http://blog.csdn.net/myhaspl/

    以下部分代码验证实现了算法
    # -*- coding: utf-8 -*-   
    #code:myhaspl@myhaspl.com
    #直方图均衡化
    import cv2
    import numpy as np
    fn="test5.jpg"
    myimg=cv2.imread(fn)
    img=cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY)
    h=img.shape[0]
    w=img.shape[1]
    newimg=np.zeros((h,w),np.uint8)
    scount=0.0
    #原始图像灰度级
    scol={}
    #目标图像灰度级
    dcol={}
    #原始图像频度
    Ps={}
    #累计概率
    Cs={}
    
    #统计原始图像灰度级
    for m in xrange(h):
        for n in xrange(w):
            scol[img[m,n]]=scol.setdefault(img[m,n],0)+1
            scount+=1


    下图左为源图。右图为进行直方图均衡化后的图




  • 相关阅读:
    Vue之常用语法
    Django之crm
    Django项目之客户
    前端、数据库、Django简单的练习
    Django的认证系统
    Django之form表单
    OpneCV 二值图像区域处理
    OpenCV图像处理中常用函数汇总(1)
    OpenCV3编程入门笔记(6)自我验证各函数程序代码
    OpenCV_轮廓的查找、表达、绘制、特性及匹配
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5169103.html
Copyright © 2020-2023  润新知