图像处理-直方图均衡化

直方图均值化;
	要求:
		1、不改变像素之间的相对亮度大小
		2、处理后的像素值分布在0-255之间
		3、将图像的灰度区间拉大,增强对比度让图像更清晰
	步骤:
		1、统计图像中每个灰度级的像素个数
		2、计算每个灰度级的累计概率分布(0-1)
		3、依据累计分布值计算其对应的灰度值(0-255)
		4、映射回原来坐标的像素值
代码:
一、基础的图像操作
import cv2
import numpy as np
import matplotlib.pyplot as plt
# opencv是BGR通道 plt默认RGB通道,
# 若使用cv2.imread()读入图像,用plt.imshow()展示原始图像或者展示对读入图像进行一系列操作后的图像时,需要进行通道转换。

img = cv2.imread("lisa.jpg") # 图片的基本操作
B,G,R = cv2.split(img); 
zeros = np.zeros(img.shape[:2],dtype="uint8") # 构造与img大小相同的0矩阵
plt.figure(figsize=(7,7))
plt.subplot(221)
plt.imshow(cv2.merge([B,zeros,zeros]))
plt.subplot(222)
plt.imshow(cv2.merge([zeros,G,zeros]))
plt.subplot(223)
plt.imshow(cv2.merge([zeros,zeros,R]))
plt.subplot(224)
plt.imshow(cv2.merge([R,G,B]))

在这里插入图片描述

二、直方图均衡化
img = cv2.imread("hist.png") # 读取图片
plt.imshow(img,cmap="gray")

在这里插入图片描述

img_gay = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 转化为灰度图
rows = img.shape[0]
cols = img.shape[1]

hist = np.zeros(256)
for j in range(rows): # 统计各级灰度像素点个数
    for k in range(cols):
        tmp = img_gay[j][k]
        hist[tmp] = hist[tmp] + 1
plt.subplot(311)
plt.plot(hist)

trans = hist / (rows * cols) # 统计各灰度级的概率
for i in range(1,256):
    trans[i] = trans[i] + trans[i-1] # 计算各灰度级的累计概率
trans = trans * 255 # 通过累计概率计算其对应的灰度值
plt.subplot(312)
plt.plot(trans)

img_balance = img_gay.copy() # 将转化过后的灰度值映射回原图像
for j in range(rows):
    for k in range(cols):
        tmp = img_gay[j][k]
        img_balance[j][k] = int(trans[tmp])
        
hist_h = np.zeros(256)
for j in range(rows): # 统计转化过后各灰度级像素点个数
    for k in range(cols):
        tmp = img_balance[j][k]
        hist_h[tmp] = hist_h[tmp] + 1
plt.subplot(313)
plt.plot(hist_h)

在这里插入图片描述

plt.figure(figsize=(7,7))
plt.imshow(cv2.vconcat([img_gay,img_balance]),cmap='gray')

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值