51. 灰度直方图均衡化

2019-11-13  本文已影响0人  十里江城

灰度直方图均衡化的步骤为:


# 本质:统计每个像素灰度出现的概率 0~255 p
# 累积概率
# 等级1 出现概率 0.2    -> 0.2
#    2       p 0.3    -> 0.5
#    3       p 0.1    -> 0.6
# 256 
# 100这灰度等级  累积概率0.5 -> 255 * 0.5 = new像素替代

import cv2 
import numpy as np
import matplotlib.pyplot as plt

# 1 读取原图片信息
img = cv2.imread('2.jpg', 1)
cv2.imshow('src', img)
imgInfo = img.shape
height = imgInfo[0] 
width = imgInfo[1]

# 2 读取灰度图片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('initial gray', gray)

# 3 灰度值计数与归一化
count = np.zeros(256, np.float)
for i in range(0, height):
    for j in range(0, width):
        index = int(gray[i, j])
        count[index] = count[index] + 1
for i in range(0, 255):
    count[i] = count[i] / (height * width)
    
# 4 计算累积概率
sum1 = float(0)
for i in range(0, 256):
    sum1 = sum1 + count[i]
    count[i] = sum1
print(count)  # 累积到1

# 5 创建映射表
map1 = np.zeros(256, np.uint16)
for i in range(0, 256):
    map1[i] = np.uint16(count[i] * 255)
    
# 6 完成映射
for i in range(0, height):
    for j in range(0, width):
        gray[i, j] = map1[gray[i, j]]
        
# 7 显示灰度直方图均衡化效果
cv2.imshow('dst gray', gray)
cv2.waitKey(0)

部分的累积概率如下:


image.png image.png

灰度直方图均衡化后的效果如下:


image.png
上一篇 下一篇

猜你喜欢

热点阅读