10、直方图应用

直方图均衡化,实际上是调整图像的对比度,是图像增强的一种手段

(注:直方图均衡化都是基于灰度图像)

10、直方图应用_第1张图片
原灰度图像
10、直方图应用_第2张图片
均衡化的图像
10、直方图应用_第3张图片
我曹,居然如此牛逼

全局均衡化

def equalHist_function(image):
    '''
        全局均衡化,即电脑自动均衡化,无法调节
    '''
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    dst = cv.equalizeHist(gray)
    cv.imshow('equalHist_function', dst)

果真如此!!!

局部均衡化


def localEqualHist_function(image):
    '''
        局部均衡化:
            clipLimit:默认是40,可以调整。
            tileGridSize = (2^n , 2^n)
    '''
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    temp = cv.createCLAHE(clipLimit = 3.0,tileGridSize=(16,16))
    dst = temp.apply(gray)
    cv.imshow('equalHist_function', dst)

那就没有那么明显了

直方图比较,实际上是比较两个图像是否相似,可用于指纹识别和人脸识别等模式识别。

相关性越大,卡方越小,相交性越小,巴斯距离越小,两张图像越像。

直方图比较通常根据几个因素一起比较。

10、直方图应用_第4张图片
比较因素

通过bgr的直方图进行比较,将每个通道的256降维到16

def create_rgb_hist(image):
    h, w, c = image.shape
    rgbHist = np.zeros([16*16*16, 1], np.float32)  # 初始一个4096*1的矩阵
    bsize = 256/16  # 降维,由bgr均是 256 的范围降到 16 的范围
    for row in range(h):
        for col in range(w):
            b = image[row, col, 0]
            g = image[row, col, 1]
            r = image[row, col, 1]
            index = np.int(b/bsize)*16*16 + np.int(g/bsize)*16+np.int(r/bsize)
            rgbHist[np.int(index), 0] = rgbHist[np.int(
                index), 0]+1  # 由于python没有自增自减操作
    return rgbHist


def hist_compare(image1, image2):
    hist1 = create_rgb_hist(image1)
    hist2 = create_rgb_hist(image2)
    match1 = cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA)  # 巴斯距离
    match2 = cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR)  # 卡方
    match3 = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)  # 相关性
    print("巴斯距离:%s,卡方:%s,相关性:%s" % (match1, match2, match3))
10、直方图应用_第5张图片
超级不想似
#巴斯距离接近 1 ,卡方无限大,相关性超级小
巴斯距离:0.9874323091463763,卡方:120012.81470390719,相关性:0.0001379280327372972

你可能感兴趣的:(10、直方图应用)