2 Image Enhancement

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()

Guess you like

Origin blog.csdn.net/qq_41950131/article/details/93515325