直方图均衡化,实际上是调整图像的对比度,是图像增强的一种手段
(注:直方图均衡化都是基于灰度图像)



全局均衡化
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)

直方图比较,实际上是比较两个图像是否相似,可用于指纹识别和人脸识别等模式识别。
相关性越大,卡方越小,相交性越小,巴斯距离越小,两张图像越像。
直方图比较通常根据几个因素一起比较。

通过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))

#巴斯距离接近 1 ,卡方无限大,相关性超级小
巴斯距离:0.9874323091463763,卡方:120012.81470390719,相关性:0.0001379280327372972
网友评论