数字图像处理(17): 直方图均衡化处理 | 您所在的位置:网站首页 › ps中直方图是什么意思 › 数字图像处理(17): 直方图均衡化处理 |
目录 1 直方图均衡化简介 1.1 直方图均衡化概念 1.2 直方图均衡化的理论基础 1.3 直方图均衡化的步骤 1.4 直方图均衡化应用场景 2 直方图均衡化-equalizeHist() 3 matplotlib.pyplot.subplot() 函数 4 matplotlib.pyplot.imshow() 函数 5 直方图均衡化对比 参考资料 1 直方图均衡化简介 1.1 直方图均衡化概念 直方图均衡化 (Histogram Equalization) 就是把一个已知灰度概率密度分布的图像经过一种变换,使之演变为一幅具有均匀灰度概率密度分布的新图像。 如下图所示,过暗和过亮的图像 经过直方图均衡化,使得图像变得清晰。 1.2 直方图均衡化的理论基础 前提:如果一幅图像占有全部可能的灰度级,并且均匀分布。 结论:该图像具有高对比度和多变的灰色色调。 外观:图像细节丰富,质量更高。 1.3 直方图均衡化的步骤 (1)计算累计直方图; (2)将累计直方图进行区间转换; (3)在累计直方图中,概率相近的原始值,会被处理为相同的值。
具体的例子如下: 如下图所示,已知一幅图像的像素分布为 7
根据统计直方图,可以算出归一化直方图和累计直方图,如下图所示:
将累计直方图进行区间转换,如下图所示:
由上图的结果可知,原先8个灰度级转变成6个灰度级,那么原始直方图和均衡直方图为:
上面的灰度级是8,那灰度级转变成256,计算方法类似,如下图所示:
同样的,原始直方图和均衡直方图为:
由上图可以看出,虽然二者相似,但右侧均衡化后的直方图分布更均匀,相邻像素级概率和与高概率近似相等。如果将两张图的灰度级放在同一区间,可以看出差别更大,如下图所示: 1.4 直方图均衡化应用场景 (1)医学图像处理 (2)车牌照识别 (3)人脸识别 2 直方图均衡化-equalizeHist() OpenCV库下,直方图均衡化使用 equalizeHist() 函数,函数用法如下所示: dst=cv2.equalizeHist(src) 其中,参数: dst 表示处理结果 src 表示原始图像
代码如下所示: #encoding:utf-8 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('zxp.jpg', cv2.IMREAD_GRAYSCALE) equ = cv2.equalizeHist(img) cv2.imshow("src", img) cv2.imshow("result", equ) plt.hist(img.ravel(), 256) plt.figure() plt.hist(equ.ravel(), 256) plt.show() cv2.waitKey(0) cv2.destroyAllWindows()
运行结果如下图所示:(左图为原始灰度图像,右图为均衡化后的图像) 3 matplotlib.pyplot.subplot() 函数 matplotlib.pyplot.subplot() 函数可以将多张图像放在一个窗口内,Pyhton下需要导入 matplotlib.pyplot 绘图包,其用法和Matlab中的subplot()函数用法类似。matplotlib 是一个强大的绘图包。subplot() 函数用法如下所示: subplot(nrows, ncols, plot_number) 其中,参数: nrows 表示行数; ncols 表示列数; plot_number 表示窗口序号。 例如:排列成两行三列的图像,如下图所示: 注:在实际应用中,如果每一个参数都小于10,三个数字可以连着直接写,不加标点,如 subplot(2,3,4) 可以写成 subplot(234)
代码如下所示: #encoding:utf-8 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('zxp.jpg', cv2.IMREAD_GRAYSCALE) equ = cv2.equalizeHist(img) plt.subplot(221),plt.imshow(img, 'gray'),plt.title('img'), plt.xticks([]),plt.yticks([]) plt.subplot(222),plt.imshow(equ, 'gray'),plt.title('equ'), plt.xticks([]),plt.yticks([]) plt.subplot(223),plt.hist(img.ravel(),256),plt.title('img_hist') plt.subplot(224),plt.hist(equ.ravel(),256),plt.title('equ_hist') plt.show() cv2.waitKey(0) cv2.destroyAllWindows()
运行结果如下图所示:
4 matplotlib.pyplot.imshow() 函数 imshow() 函数用法如下所示,同样的,Pyhton下需要导入 matplotlib.pyplot 绘图包。 imshow(X, cmap=None) 其中,参数: X 表示要绘制的图像; cmap 表示colormap,颜色图谱,默认为RGB(A)颜色空间: 1)对于灰度图像,使用参数 “ cmap=plt.cm.gray ”; 2)对于彩色图像,如果使用opencv读入的图像,默认空间为BRG,需要调整色彩空间为RGB。
下面是分别使用函数读取灰度图像和彩色图像例子。 (1)灰度图像 代码如下所示: #encoding:utf-8 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('zxp.jpg') img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) plt.subplot(221),plt.imshow(img),plt.title('img'), plt.axis('off') #坐标轴关闭 plt.subplot(222),plt.imshow(img, cmap=plt.cm.gray),plt.title('img_cmap'), plt.axis('off') plt.subplot(223),plt.imshow(img_gray),plt.title('img_gray'), plt.axis('off') plt.subplot(224),plt.imshow(img_gray, cmap=plt.cm.gray),plt.title('img_gray_cmap'),plt.axis('off')#正确用法 plt.show() cv2.waitKey(0) cv2.destroyAllWindows()
运行结果如下图所示:
(2)彩色图像 代码如下所示: #encoding:utf-8 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('zxp.jpg') b,g,r=cv2.split(img) #通道分割 img_RGB=cv2.merge([r,g,b])#通道组合 plt.subplot(121),plt.imshow(img),plt.title('img_BGR'), plt.axis('off') #坐标轴关闭 plt.subplot(122),plt.imshow(img_RGB),plt.title('img_RGB'), plt.axis('off')
运行结果如下图所示:
5 直方图均衡化对比 直方图均衡化前后对比,使用前面提到的 matplotlib.pyplot.subplot() 函数 和 matplotlib.pyplot.imshow() 函数。
代码如下所示: #encoding:utf-8 import cv2 import numpy as np import matplotlib.pyplot as plt img_gray = cv2.imread('zxp.jpg', cv2.IMREAD_GRAYSCALE) equ = cv2.equalizeHist(img_gray) plt.subplot(221),plt.imshow(img_gray, cmap=plt.cm.gray),plt.title('img_gray'), plt.axis('off') #坐标轴关闭 plt.subplot(222),plt.imshow(equ, cmap=plt.cm.gray),plt.title('equ'), plt.axis('off') #坐标轴关闭 plt.subplot(223),plt.hist(img_gray.ravel(),256),plt.title('img_gray_hist') plt.subplot(224),plt.hist(equ.ravel(),256),plt.title('equ_hist') plt.show() cv2.waitKey(0) cv2.destroyAllWindows()
运行结果如下图所示:
参考资料 [1] Python+OpenCV图像处理 |
CopyRight 2018-2019 实验室设备网 版权所有 |