Histogram equalization
#直方图均衡化
#1计算图像的灰度直方图
#2计算灰度直方图的累加直方图
#3根据原理得到输入灰度级和输出灰度级之间的映射关系
#4输出图像的每一个像素的灰度级
import cv2,sys,math
import numpy as np
def calcGrayHist(image):
rows,cols = image.shape
grayHist = np.zeros([256],np.uint64)
for r in range(rows):
for c in range(cols):
grayHist[image[r][c]] +=1#把图像灰度值作为索引
return(grayHist)
def equalHist(image):
rows,cols = image.shape
#计算图像的灰度直方图
grayHist = calcGrayHist(image)
#计算累加灰度直方图
zeroCumuMoment = np.zeros([256],np.uint32)
for p in range(256):
if p == 0:
zeroCumuMoment[p] = grayHist[0]
else:
zeroCumuMoment[p] = zeroCumuMoment[p-1] + grayHist[p]
#输入灰度级与输出灰度级映射关系
outPut_q = np.zeros([256],np.uint8)
cofficient = 256.0/(rows*cols)
for p in range(256):
q = cofficient*float(zeroCumuMoment[p]) - 1
if q>=0:
outPut_q[p] = math.floor(q)
else:
outPut_q[p] = 0
#直方图均衡化图像
equalHistImage = np.zeros(image.shape,np.uint8)
for r in range(rows):
for c in range(cols):
equalHistImage[r][c] = outPut_q[image[r][c]]
return equalHistImage
if __name__ =='__main__':
image = cv2.imread('E:\\sy2\\4\\img7.jpg',cv2.IMREAD_GRAYSCALE)
equalHistImage = equalHist(image)
cv2.imshow('image',image)
cv2.imshow('equalHistImage',equalHistImage)
cv2.waitKey(0)
cv2.destroyAllWindows()
Limiting adaptive histogram equalization contrast
reference links
#限制对比度的自适应直方图均衡化
import cv2,sys
import numpy as np
if __name__ =='__main__':
src = cv2.imread('E:\\sy2\\4\\img3.jpg',cv2.IMREAD_GRAYSCALE)
clahe = cv2.createCLAHE(clipLimit = 2.0,tileGridSize=(8,8))
#参数说明:clipLimit颜色对比度的阈值, titleGridSize进行像素均衡化的网格大小,即在多少网格下进行直方图的均衡化操作
dst = clahe.apply(src)
cv2.imshow('src',src)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()