cv2 直方图均衡化
直方图均衡化的作用是图像增强。
有两个问题比较难懂,一是为什么要选用累积分布函数,二是为什么使用累积分布函数处理后像素值会均匀分布。
第一个问题。均衡化过程中,必须要保证两个条件:①像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒;②如果是八位图像,那么像素映射函数的值域应在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 直方图均衡化相关推荐
- c++ 绘制函数图像_【图像增强】CLAHE 限制对比度自适应直方图均衡化
文章来自:微信公众号[机器学习炼丹术]. 文章目录: 1 基本概述 2 竞赛中的CLAHE实现 3 openCV绘制直方图 4 对比度Contrast 5 Contrast Stretching 6 ...
- OpenCV 自适应的直方图均衡化
自适应的直方图均衡化 整幅图像会被分成很多小块,这些小块被称为"tiles".然后再对每一个小块分别进行直方图均衡化.如果有噪声的话,噪声会被放大.为了避免这种情况的出现要使用对比 ...
- python用numpy和pil处理图像成灰度图_「火炉炼AI」机器学习047-图像的直方图均衡化操作...
[火炉炼AI]机器学习047-图像的直方图均衡化操作 [火炉炼AI]机器学习047-图像的直方图均衡化操作 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, sc ...
- python高通滤波器设计_python实现直方图均衡化,理想高通滤波与高斯低通滤波
写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验二,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验二. 由于时间紧张,代码没有进行任何优化, ...
- OpenCV-Python教程(9)(10)(11): 使用霍夫变换检测直线 直方图均衡化 轮廓检测
OpenCV-Python教程(9.使用霍夫变换检测直线) 相比C++而言,Python适合做原型.本系列的文章介绍如何在Python中用OpenCV图形库,以及与C++调用相应OpenCV函数的不同 ...
- Python OpenCV实例:图像直方图均衡化(数学公式简单实现)
为什么80%的码农都做不了架构师?>>> #coding:utf-8 ''' 直方图均衡化 作用:通常用来增加图像局部对比度,尤其在图像的有用数据的对比度相当接近时,通过直方图 ...
- Intel Realsense D435 测试视频流的直方图均衡化
# -*- coding: utf-8 -*- """ @File : 200107_测试直方图均衡化.py @Time : 2020/1/7 15:34 @Author ...
- 不调用python函数实现直方图均衡化_直方图均衡化(HE)
前面我们已经讲过图像的直方图,那图像的直方图均衡化又是干嘛的呢? 顾名思义:其实对直方图进行均衡化,哈哈感觉自己说的就是废话... 举个例子: import cv2 from matplotlib i ...
- opencv进阶学习笔记7:直方图,直方图均衡化,直方图比较,直方图反向投影
基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 直方图基础讲解: opencv学 ...
最新文章
- 又一轮电邮中间人攻击来袭 企业如何自保?
- c语言链表把多少分以上打出来,大神帮我看一下怎么输入输出一个链表,我输入了但是没输出啊...
- HDB3的matlab编译码
- 【Linux】一步一步学Linux——visudo命令(104)
- flex 图片上传并以二进制保存到oracle数据库,flex 加载并显示图片 图片转化成二进制...
- JavaScrip入门-变量计算%函数
- react-生命周期
- 在线Javascript压缩工具
- 《Java程序员职场全功略:从小工到专家》连载四:IT人不容易
- 实际运用中DataSet、DataTable、DataRow点滴
- Atiitt 项目 产品 实现的目标
- 步进电机选型的计算方法
- 思科网络技术学院教程:企业中的路由和交换技术简介第十章实验总结
- 黑龙江省牡丹江市谷歌高清卫星地图下载
- 光纤跳线选用指南及光模块连接方案
- 关于运行软件报错Address already in use
- 原价游戏太贵?爬取steam游戏优惠信息
- DH密钥交换在实践中的安全问题
- 树枝学术 | 图书查找、论文查找全攻略
- 前端框架是什么意思?