直方图均衡化

Posted 小龙呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了直方图均衡化相关的知识,希望对你有一定的参考价值。

步骤:

(1)统计原始图象的直方图:
p r ( r k ) = n k n p_r (r_k)=\\fracn_kn pr(rk)=nnk
r k 是输入图象灰度级 r_k是输入图象灰度级 rk是输入图象灰度级
(2)计算直方图累积分布曲线:
s k = T ( r k ) = ∑ j = 0 k p r ( r j ) = ∑ j = 0 k n j n s_k=T(r_k)=\\sum_j=0^k p_r(r_j)=\\sum_j=0^k \\fracn_jn sk=T(rk)=j=0kpr(rj)=j=0knnj
(3)用累积分布函数作变换函数计算图像变换后的灰度级:
扩展取整: S ( k ) = i n t [ ( m a x ( r k ) − m i n ( r k ) ⋅ s k + 0.5 ] 扩展取整:S(k)=int[(max(r_k)-min(r_k)\\cdot s_k + 0.5] 扩展取整:S(k)=int[(max(rk)min(rk)sk+0.5]
(4)建立输入图像与输出图像灰度级之间的对应关系,变换后灰度级范围应该和原来的范围一致。

例子:





程序实现

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

# 读入图像
img1 = cv2.imread('afterglow.jpeg', 0)
img2 = img1.copy()

gray_level = add_histogram = np.zeros(256) #存放灰度值个数以及累计直方图

# 统计灰度值(0-255)的个数
for i in range(1080):
    for j in range(1418):
        gray_level[img1[i, j]] += 1

# 灰度直方图
gray_histogram = gray_level / (1080*1418)

# 累计直方图
for u in range(256):
    a = 0
    for v in range(u+1):
        a += gray_histogram[v]
        add_histogram[u] = a

# 取整扩展
for k in range(256):
    add_histogram[k] = int(255*add_histogram[k] + 0.5)

# 确定映射
map = pd.Series(add_histogram, np.arange(256))

# 直方图均衡化
for o in range(1080):
    for p in range(1418):
        if img2[o, p] in map.index:
            img2[o, p] = map[img2[o, p]]

# 显示图像
plt.figure(figsize=(10,4),dpi=120)
plt.subplot(221),plt.imshow(img1, cmap = 'gray')
plt.title('original'),plt.axis('off')
plt.subplot(222),plt.imshow(img2, cmap = 'gray')
plt.title('histogram equalization'), plt.axis('off')

# 直方图显示
plt.subplot(223),plt.hist(img1.ravel(), bins=256)
plt.subplot(224),plt.hist(img2.ravel(), bins=256)
plt.show()


本文代码已开源,欢迎大家进行二次开发:
https://gitee.com/xiaolong_ROS/Graphics-Processing-and-Machine-Vision

如有错误或者不足之处,欢迎大家留言指正!

以上是关于直方图均衡化的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV图像处理10图像直方图

跟我学Python丨图像增强及运算:局部直方图均衡化和自动色彩均衡化处理

跟我学Python丨图像增强及运算:局部直方图均衡化和自动色彩均衡化处理

跟我学Python丨图像增强及运算:局部直方图均衡化和自动色彩均衡化处理

《数字图像处理》直方图均衡学习总结+感悟

自适应直方图均衡(AHE)和限制对比度的自适应直方图均衡(CLAHE)