直方图均衡化

算法简要介绍

直方图均衡化是数字图像处理的一个基本操作。其核心目标是把像素均匀地分布到[0,255]的区间上(别问为啥是0-255)。数学原理详见直方图均衡化的数学原理
我们的做法就是先求出图像上像素分布的累积分布函数 C D F CDF CDF,定义域为离散的0~255,原始图像的像素点 x x x作为输入,得到 C D F ( x ) CDF(x) CDF(x),再用 C D F ( x ) ∗ 255 CDF(x)*255 CDF(x)255就得到了新的像素值。不难理解,原始像素值输入后,得到的是这个像素点在所有像素值中的百分位点,我们把这个百分位点的值作为新的像素值(0-1区间下)。这样的话,原始的像素值就映射到了它在平衡状态下应该在的位置。

Python实现

导入包

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

直方图和累积分布函数

def histogram(image):
    hist = np.zeros(shape=256,dtype=np.int)
    for i in range(256):
        hist[i] = int(np.sum(image==i))
    return hist

def get_cdf(image):
    hist = histogram(image)
    res = np.zeros(shape=256,dtype=np.int)
    for i in range(256):
        res[i] = np.sum(hist[:i+1])
    res = res*1.0/sum(hist)
    return res

直方图均衡化

def hist_equalization(image):
    pdf = get_cdf(image)
    new_img = np.zeros_like(image)
    new_img = pdf[image]*255
    new_img = np.clip(new_img,0,255).astype(np.int)
    return new_img

是不是很简单呢

调用和绘图

# 读入图像并转为灰度图,可以改为自己的图片路径
src = Image.open('lena_512.tif').convert(mode='L') 
src = np.array(src)
dst = hist_equalization(src)	# 直方图均衡化
plt.figure(1,figsize=(10,15))
plt.subplot(3,2,1)
plt.imshow(src,cmap='gray')
plt.title('source image')
plt.subplot(3,2,2)
plt.imshow(dst,cmap='gray')
plt.title('histogram equalization')
plt.subplot(3,2,3)
plt.bar(np.arange(0,256,1),histogram(src))
plt.title('source histogram')
plt.subplot(3,2,4)
plt.bar(np.arange(0,256,1),histogram(dst))
plt.title('destination histogram')
plt.subplot(3,2,5)
plt.plot(np.arange(0,256,1),get_cdf(src))
plt.title('source cdf')
plt.subplot(3,2,6)
plt.plot(np.arange(0,256,1),get_cdf(dst))
plt.title('destination cdf')
plt.show()

结果

测试结果
很明显可以看到,对比度增强了,而且cdf也变成一条近似的直线了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值