没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/d5/daf/tutorial_py_histogram_equalization.html 考虑一个图像,其像素值仅限制在特定的值范围内。例如,更明亮的图像将使所有像素都限制在高值中。但是一个好的图像会有来自图像的所有区域的像素。所以你需要把这个直方图拉伸到两端(如下图所给出的),这就是直方图均衡的作用(用简单的话说)。这通常会改善图像的对比度。 建议阅读关于直方图均衡的wikipedia页面Histogram Equaliz
资源推荐
资源详情
资源评论
详解详解python OpenCV学习笔记之直方图均衡化学习笔记之直方图均衡化
本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下:
官方文档 – https://docs.opencv.org/3.4.0/d5/daf/tutorial_py_histogram_equalization.html
考虑一个图像,其像素值仅限制在特定的值范围内。例如,更明亮的图像将使所有像素都限制在高值中。但是一个好的图像会
有来自图像的所有区域的像素。所以你需要把这个直方图拉伸到两端(如下图所给出的),这就是直方图均衡的作用(用简单的话
说)。这通常会改善图像的对比度。
建议阅读关于直方图均衡的wikipedia页面Histogram Equalization,了解更多有关它的详细信息。它给出了一个很好的解释,
给出了一些例子,这样你就能在读完之后理解所有的东西。同样,我们将看到它的Numpy实现。之后,我们将看到OpenCV函
数。
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('wiki.jpg', 0)
hist, bins = np.histogram(img.flatten(), 256, [0,256])
cdf = hist.cumsum()
cdf_normalized = cdf*float(hist.max())/cdf.max()
plt.plot(cdf_normalized, color = 'b')
plt.hist(img.flatten(),256,[0,256], color = 'r')
plt.xlim([0,256])
plt.legend(('cdf','histogram'), loc = 'upper left')
plt.show()
你可以看到,直方图位于更亮的区域。我们需要完整的频谱。为此,我们需要一个转换函数,它将更亮区域的输入像素映射到
全区域的输出像素。这就是直方图均衡所做的。
现在我们找到了最小的直方图值(不包括0),并应用了在wiki页面中给出的直方图均衡等式。但我用在Numpy的遮罩数组的概
念数组上。对于遮罩数组,所有操作都是在非遮罩元素上执行的。
cdf_m = np.ma.masked_equal(cdf, 0)
cdf_m = (cdf_m-cdf_m.min()) * 255 / (cdf_m.max()-cdf_m.min())
cdf = np.ma.filled(cdf_m, 0).astype('uint8')
现在我们有了一个查找表,它提供了关于每个输入像素值的输出像素值的信息。所以我们只要应用变换。
img2 = cdf[img]
现在我们计算它的直方图和cdf,就像之前一样,结果如下:
资源评论
weixin_38707192
- 粉丝: 3
- 资源: 921
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功