OpenCV官方教程中文版 —— 直方图均衡化

这篇具有很好参考价值的文章主要介绍了OpenCV官方教程中文版 —— 直方图均衡化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本小节我们要学习直方图均衡化的概念,以及如何使用它来改善图片的对比。

一、原理

想象一下如果一副图像中的大多是像素点的像素值都集中在一个像素值范围之内会怎样呢?例如,如果一幅图片整体很亮,那所有的像素值应该都会很高。但是一副高质量的图像的像素值分布应该很广泛。所以你应该把它的直方图做一个横向拉伸(如下图),这就是直方图均衡化要做的事情。通常情况下这种操作会改善图像的对比度。

OpenCV官方教程中文版 —— 直方图均衡化,opencv,人工智能,计算机视觉

推荐你去读读维基百科中关于直方图均衡化的条目。其中的解释非常给力,读完之后相信你就会对整个过程有一个详细的了解了。我们先看看怎样使用Numpy 来进行直方图均衡化,然后再学习使用 OpenCV 进行直方图均衡化。

# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('wiki.png', 0)
# flatten() 将数组变成一维
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
# 计算累积分布图
plt.figure()
plt.subplot(1,2,1)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.tight_layout()
plt.subplot(1,2,2)
cdf = hist.cumsum()
cdf_normalized = cdf * 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.tight_layout()
plt.show()

OpenCV官方教程中文版 —— 直方图均衡化,opencv,人工智能,计算机视觉
我们可以看出来直方图大部分在灰度值较高的部分,而且分布很集中。而我们希望直方图的分布比较分散,能够涵盖整个 x 轴。所以,我们就需要一个变换函数帮助我们把现在的直方图映射到一个广泛分布的直方图中。这就是直方图均衡化要做的事情。

图均衡化要做的事情。我们现在要找到直方图中的最小值(除了 0),并把它用于 wiki 中的直方图均衡化公式。但是我在这里使用了 Numpy 的掩模数组。对于掩模数组的所有操作都只对 non-masked 元素有效。你可以到 Numpy 文档中获取更多掩模数组的信息。

# 构建 Numpy 掩模数组,cdf 为原数组,当数组元素为 0 时,掩盖(计算时被忽略)。
cdf_m = np.ma.masked_equal(cdf,0)
cdf_m = (cdf_m - cdf_m.min())*255/(cdf_m.max()-cdf_m.min())
# 对被掩盖的元素赋值,这里赋值为 0
cdf = np.ma.filled(cdf_m,0).astype('uint8')

现在就获得了一个表,我们可以通过查表得知与输入像素对应的输出像素的值。我们只需要把这种变换应用到图像上就可以了。

img2 = cdf[img]

我们再根据前面的方法绘制直方图和累积分布图,结果如下:

OpenCV官方教程中文版 —— 直方图均衡化,opencv,人工智能,计算机视觉
另一个重要的特点是,即使我们的输入图片是一个比较暗的图片(不象上边我们用到到的整体都很亮的图片),在经过直方图均衡化之后也能得到相同的结果。因此,直方图均衡化经常用来使所有的图片具有相同的亮度条件的参考工具。这在很多情况下都很有用。例如,脸部识别,在训练分类器前,训练集的所有图片都要先进行直方图均衡化从而使它们达到相同的亮度条件。

二、 OpenCV 中的直方图均衡化

OpenCV 中的直方图均衡化函数为 cv2.equalizeHist()。这个函数的输入图片仅仅是一副灰度图像,输出结果是直方图均衡化之后的图像。

下边的代码还是对上边的那幅图像进行直方图均衡化:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('wiki.png', 0)
equ = cv2.equalizeHist(img)
res = np.hstack((img, equ))

plt.figure()
plt.imshow(res, cmap='gray', interpolation='bicubic')
plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis
plt.show()

OpenCV官方教程中文版 —— 直方图均衡化,opencv,人工智能,计算机视觉

现在你可以拿一些不同亮度的照片自己来试一下了。

当直方图中的数据集中在某一个灰度值范围内时,直方图均衡化很有用。但是如果像素的变化很大,而且占据的灰度范围非常广时,例如:既有很亮的像素点又有很暗的像素点时。

三、 CLAHE 有限对比适应性直方图均衡化

我们在上边做的直方图均衡化会改变整个图像的对比度,但是在很多情况下,这样做的效果并不好。例如,下图分别是输入图像和进行直方图均衡化之后的输出图像。

OpenCV官方教程中文版 —— 直方图均衡化,opencv,人工智能,计算机视觉

的确在进行完直方图均衡化之后,图片背景的对比度被改变了。但是你再对比一下两幅图像中雕像的面图,由于太亮我们丢失了很多信息。造成这种结果的根本原因在于这幅图像的直方图并不是集中在某一个区域(试着画出它的直方图,你就明白了)。

为了解决这个问题,我们需要使用自适应的直方图均衡化。这种情况下,整幅图像会被分成很多小块,这些小块被称为“tiles”(在 OpenCV 中 tiles 的大小默认是 8x8),然后再对每一个小块分别进行直方图均衡化(跟前面类似)。所以在每一个的区域中,直方图会集中在某一个小的区域中(除非有噪声干扰)。如果有噪声的话,噪声会被放大。为了避免这种情况的出现要使用对比度限制。对于每个小块来说,如果直方图中的 bin 超过对比度的上限的话,就把其中的像素点均匀分散到其他 bins 中,然后在进行直方图均衡化。最后,为了去除每一个小块之间“人造的”(由于算法造成)边界,再使用双线性差值,对小块进行缝合。

下面的代码显示了如何使用 OpenCV 中的 CLAHE。

# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('tsukuba_l.png', 0)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
cl1 = clahe.apply(img)
res = np.hstack((img, cl1))
plt.figure()
plt.imshow(res, cmap='gray', interpolation='bicubic')
plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis
plt.show()

下面就是结果了,与前面的结果对比一下,尤其是雕像区域:
OpenCV官方教程中文版 —— 直方图均衡化,opencv,人工智能,计算机视觉文章来源地址https://www.toymoban.com/news/detail-741971.html

到了这里,关于OpenCV官方教程中文版 —— 直方图均衡化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV官方教程中文版 —— 图像金字塔

    • 学习图像金字塔 • 使用图像创建一个新水果:“橘子苹果” • 将要学习的函数有:cv2.pyrUp(),cv2.pyrDown()。 一般情况下,我们要处理是一副具有固定分辨率的图像。但是有些情况下,我们需要对同一图像的不同分辨率的子图像进行处理。比如,我们要在一幅图像中查找某

    2024年02月07日
    浏览(53)
  • OpenCV官方教程中文版 —— Hough 圆环变换

    目标 • 学习使用霍夫变换在图像中找圆形(环) • 学习函数:cv2.HoughCircles() opencv_logo.png :

    2024年02月06日
    浏览(45)
  • BeeWare官方教程中文版

    BeeWare官方教程 中文文档下载地址 以下内容为按照教程在windows平台测试。 如果你使用Windows系统,可以从python官网获取官方安装包。可以使用3.7之后的任何稳定版本的Python。建议避免使用阿尔法,贝塔和其他已经发布的候选版本。 在Windows系统上构建BeeWare 需要: Git,一种分

    2024年02月05日
    浏览(52)
  • Midjourney中文版到底是官方还是李鬼?

    AI绘画大神Midjourney为何选择QQ频道进军中国市场? Midjourney中文版到底是官方还是李鬼?看这篇文章就知道了! 今天我想和大家聊聊一个最近很火的话题,那就是AI绘画神器Midjourney(简称MJ)来中国了,QQ频道内测火爆开启。这对于喜欢AI绘画的创作者来说,无疑是一个福音,

    2024年02月12日
    浏览(44)
  • 《巧克甜恋》官方中文版全解锁存档分享

    因为之前修复更新英文版后补丁失效的问题一不小心把存档删了,遂意识到了存档的重要性,也特此分享给需要的朋友。 全解锁存档下载

    2024年02月12日
    浏览(40)
  • 爆肝一周,我开源了ChatGPT 中文版接口,官方1:1镜像支持全部 官方接口

    这里实现我之前文章承诺承接上文 人人实现ChatGPT自由,手把手教你零撸部署自己聊天私服 现在 ChatGPT 提供了 api 接口 可以让我自己对接去实现我们自己想要gpt应用,但是由于一些原因,国内也不开放接口,所以我就1:1 自己对接了官方所有接口。 大家可以通过我的接口轻松

    2024年02月04日
    浏览(55)
  • FL Studio Producer Edition 21 v21.0.3 Build 3517 Windows/mac官方中文版

    FL Studio Producer Edition 21 v21.0.3 Build 3517 Windows FL Studio Producer Edition 21 v21.0.3 Build 3517 Windows/mac官方中文版是一个完整的软件音乐制作环境或数字音频工作站(DAW)。它代表了 25 多年的创新发展,将您创作、编曲、录制、编辑、混音和掌握专业品质音乐所需的一切集于一身。 FL S

    2024年02月14日
    浏览(46)
  • Postman -中文版-安装教程

    一.下载、安装  Postman 下面是历史版本的下载链接地址    请把链接中的\\\"版本号\\\"替换为指定的版本号(根据自己的需求变更) Windows64位 : https://dl.pstmn.io/download/version/版本号/win64 Windows32位: https://dl.pstmn.io/download/version/版本号/win32 Mac : https://dl.pstmn.io/download/version/版本号

    2024年02月03日
    浏览(61)
  • Midjourney AI 官方中文版已开启内测申请;OpenAI 正准备向公众发布一款新的开源语言模型。

    🚀 Midjourney AI 官方中文版已开启内测申请,搭载在 QQ 频道上,召唤机器人进行作画。 Midjourney AI 官方中文版已开启内测申请,搭载在 QQ 频道上,召唤机器人进行作画。 可调用 MJ 和 Niji 的最新模型和所有参数,还上线了放大、变化、指定修改、垫图、私聊、个人画廊等功能

    2024年02月15日
    浏览(49)
  • STM32CubeIDE中文版教程

    STM32CubeIDE中文版教程 首先 https://mirrors.ustc.edu.cn/eclipse/technology/babel/update-site/ 点击此网址进入 如图,选择日期最新的,点进去 再次选择最新的日期 进入到此界面,复制此时的网址  https://mirrors.ustc.edu.cn/eclipse/technology/babel/update-site/R0.20.0/2022-12/ 打开STM32CubeIDE help-Install New Sof

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包