直方图均衡化的作用是图像增强。

有两个问题比较难懂,一是为什么要选用累积分布函数,二是为什么使用累积分布函数处理后像素值会均匀分布。

第一个问题。均衡化过程中,必须要保证两个条件:①像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒;②如果是八位图像,那么像素映射函数的值域应在0和255之间的,不能越界。综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数。

第二个问题。累积分布函数具有一些好的性质,那么如何运用累积分布函数使得直方图均衡化?比较概率分布函数和累积分布函数,前者的二维图像是参差不齐的,后者是单调递增的。直方图均衡化过程中,映射方法是

其中,n是图像中像素的总和,nk是当前灰度级的像素个数,L是图像中可能的灰度级总数。

来看看通过上述公式怎样实现的拉伸。假设有如下图像:

得图像的统计信息如下图所示,并根据统计信息完成灰度值映射:

映射后的图像如下所示:

以上就是直方图映射均衡化的步骤,当然还有一些基于此的更优算法,比如Photoshop中的方法,在此就不一一列举了,大同小异。直方图均衡化的作用是图像增强。

opencv中的直方图均衡化

使用cv2.equalizeHist()函数

输入灰度图,输出均衡化的图片:

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('13.jpg',0)
equ = cv2.equalizeHist(img)
res = np.hstack((img,equ))#两个图片的像素分布连接在一起,拍成一维数组
cv2.imshow('p', equ)
cv2.waitKey(0)

CLAHE对比限制适应性直方图均衡化

之前的直方图均衡化会改版图像对比度,这不是好办法。例如下面的图片。

对比度改变以后丢失很多图像信息(人脸的阴影),造成这样的原因是因为该图像的直方图没有集中在同一个区域。

这里使用自适应直方图均衡化。此方法将图像分成小区域,称之为tiles,在opencv中默认为8×8,之后对这些tiles直方图均衡化。所以每一个去榆中,直方图会集中在一个小的区域。但是如果有噪声,噪声会被放大。为了避免此情况发生,要使用对比度限制。对于每个tiles,如果直方图中的bin超过对比度上限,就将其中的像素均分到其他bins中,然后直方图均衡化。最后使用双线性插值对每一个tiles的边界进行拼接。

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('13.jpg',0)
# create a CLAHE object (Arguments are optional).
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
cl1 = clahe.apply(img)
cv2.imshow('p',cl1)
cv2.waitKey(0)

结果如下:

转自:

https://www.cnblogs.com/tianyalu/p/5687782.html

https://blog.csdn.net/tengfei461807914/article/details/76952276

cv2 直方图均衡化相关推荐

  1. c++ 绘制函数图像_【图像增强】CLAHE 限制对比度自适应直方图均衡化

    文章来自:微信公众号[机器学习炼丹术]. 文章目录: 1 基本概述 2 竞赛中的CLAHE实现 3 openCV绘制直方图 4 对比度Contrast 5 Contrast Stretching 6 ...

  2. OpenCV 自适应的直方图均衡化

    自适应的直方图均衡化 整幅图像会被分成很多小块,这些小块被称为"tiles".然后再对每一个小块分别进行直方图均衡化.如果有噪声的话,噪声会被放大.为了避免这种情况的出现要使用对比 ...

  3. python用numpy和pil处理图像成灰度图_「火炉炼AI」机器学习047-图像的直方图均衡化操作...

    [火炉炼AI]机器学习047-图像的直方图均衡化操作 [火炉炼AI]机器学习047-图像的直方图均衡化操作 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, sc ...

  4. python高通滤波器设计_python实现直方图均衡化,理想高通滤波与高斯低通滤波

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验二,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验二. 由于时间紧张,代码没有进行任何优化, ...

  5. OpenCV-Python教程(9)(10)(11): 使用霍夫变换检测直线 直方图均衡化 轮廓检测

    OpenCV-Python教程(9.使用霍夫变换检测直线) 相比C++而言,Python适合做原型.本系列的文章介绍如何在Python中用OpenCV图形库,以及与C++调用相应OpenCV函数的不同 ...

  6. Python OpenCV实例:图像直方图均衡化(数学公式简单实现)

    为什么80%的码农都做不了架构师?>>>    #coding:utf-8 ''' 直方图均衡化 作用:通常用来增加图像局部对比度,尤其在图像的有用数据的对比度相当接近时,通过直方图 ...

  7. Intel Realsense D435 测试视频流的直方图均衡化

    # -*- coding: utf-8 -*- """ @File : 200107_测试直方图均衡化.py @Time : 2020/1/7 15:34 @Author ...

  8. 不调用python函数实现直方图均衡化_直方图均衡化(HE)

    前面我们已经讲过图像的直方图,那图像的直方图均衡化又是干嘛的呢? 顾名思义:其实对直方图进行均衡化,哈哈感觉自己说的就是废话... 举个例子: import cv2 from matplotlib i ...

  9. opencv进阶学习笔记7:直方图,直方图均衡化,直方图比较,直方图反向投影

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 直方图基础讲解: opencv学 ...

最新文章

  1. 又一轮电邮中间人攻击来袭 企业如何自保?
  2. c语言链表把多少分以上打出来,大神帮我看一下怎么输入输出一个链表,我输入了但是没输出啊...
  3. HDB3的matlab编译码
  4. 【Linux】一步一步学Linux——visudo命令(104)
  5. flex 图片上传并以二进制保存到oracle数据库,flex 加载并显示图片 图片转化成二进制...
  6. JavaScrip入门-变量计算%函数
  7. react-生命周期
  8. 在线Javascript压缩工具
  9. 《Java程序员职场全功略:从小工到专家》连载四:IT人不容易
  10. 实际运用中DataSet、DataTable、DataRow点滴
  11. Atiitt 项目 产品 实现的目标
  12. 步进电机选型的计算方法
  13. 思科网络技术学院教程:企业中的路由和交换技术简介第十章实验总结
  14. 黑龙江省牡丹江市谷歌高清卫星地图下载
  15. 光纤跳线选用指南及光模块连接方案
  16. 关于运行软件报错Address already in use
  17. 原价游戏太贵?爬取steam游戏优惠信息
  18. DH密钥交换在实践中的安全问题
  19. 树枝学术 | 图书查找、论文查找全攻略
  20. 前端框架是什么意思?

热门文章

  1. c语言最大值和最小值1157,基于NBU OJ的C语言在线实验及习题汇编(计算机科学与技术21世纪高等学校规划教材)...
  2. Git上传项目三部曲
  3. 瑞尔集团冲刺港交所上市:2021财年亏损约6亿元,负债规模飙升
  4. 权威发布 鸿蒙涅槃,鸿蒙涅槃   客家中国画院
  5. 三体 黑暗森林法则 浅谈
  6. CKEditor4解决首行缩进问题
  7. win10如何开启移动热点
  8. MySQL安装及初始密码设置
  9. 小小输入法的郑码练习
  10. CentOS7安装开源跳板机(堡垒机)