• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Python实现直方图均衡化

武飞扬头像
WZLYJY
帮助1

直方图均衡化:

作用:直方图均衡化是一种有效的图像增强技术,原始图像在灰度分布上可能集中在较窄的区间,造成图像不够清晰。采用直方图均衡化可以将原始图像的直方图变换为均匀分布,这样增加了像素之间的灰度值差别,从而达到增强图像整体对比度的效果。

具体原理可参考冈萨雷斯数字图像处理3.3

学新通

  1.  
    #直方图均衡化:遍历图像每个像素的灰度,算出每个灰度的概率(n/MN-n是每个灰度的个数,MN是像素总数),用L-1乘以所得概率得到新的灰度
  2.  
     
  3.  
    import cv2
  4.  
    import numpy as np
  5.  
     
  6.  
    img = cv2.imread('00000.jpg')
  7.  
    img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  8.  
     
  9.  
    #直方图统计
  10.  
     
  11.  
    def pix_gray (img_gray):
  12.  
    h = img_gray.shape[0]
  13.  
    w = img_gray.shape[1]
  14.  
     
  15.  
    gray_level = np.zeros(256)
  16.  
    gray_level2 = np.zeros(256)
  17.  
     
  18.  
    for i in range (1,h-1):
  19.  
    for j in range(1,w-1):
  20.  
    gray_level[img_gray[i,j]] = 1 #统计灰度级为img_gray[i,j的个数
  21.  
     
  22.  
    for i in range(1,256):
  23.  
    gray_level2[i] = gray_level2[i-1] gray_level[i] #统计灰度级小于img_gray[i,j]的个数
  24.  
     
  25.  
    return gray_level2
  26.  
     
  27.  
    #直方图均衡化
  28.  
     
  29.  
    def hist_gray(img_gary):
  30.  
    h,w = img_gary.shape
  31.  
    gray_level2 = pix_gray(img_gray)
  32.  
    lut = np.zeros(256)
  33.  
    for i in range(256):
  34.  
    lut[i] = 255.0/(h*w)*gray_level2[i] #得到新的灰度级
  35.  
    lut = np.uint8(lut 0.5)
  36.  
    out = cv2.LUT(img_gray,lut)
  37.  
    return out
  38.  
     
  39.  
     
  40.  
    cv2.imshow(' imput',img_gray)
  41.  
    out_img = hist_gray(img_gray)
  42.  
    cv2.imshow('output',out_img)
  43.  
    cv2.waitKey(0)
  44.  
    cv2.destroyWindow()
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfiifgb
系列文章
更多 icon
同类精品
更多 icon
继续加载