Python实现直方图均衡基本原理解析


Posted in Python onAugust 08, 2019

1. 基本原理

通过一个变换,将输入图像的灰度级转换为`均匀分布`,变换后的灰度级的概率密度函数为

$$P_s(s) = \frac{1}{L-1}$$

直方图均衡的变换为

$$s = T(r) = (L-1)\int_0^r {P_r(c)} \,{\rm d}c $$

$s$为变换后的灰度级,$r$为变换前的灰度级$P_r(r)$为变换前的概率密度函数2. 测试结果

Python实现直方图均衡基本原理解析

图源自skimage

3.代码

import numpy as np
def hist_equalization(input_image):
  '''
  直方图均衡(适用于灰度图)
  :param input_image: 原图像
  :return: 均衡后的图像
  '''
  output_imgae = np.copy(input_image) # 输出图像,初始化为输入
  input_image_cp = np.copy(input_image) # 输入图像的副本
  m, n = input_image_cp.shape # 输入图像的尺寸(行、列)
  pixels_total_num = m * n # 输入图像的像素点总数
  input_image_grayscale_P = [] # 输入图像中各灰度级出现的概率,亦即输入图像直方图
  # 求输入图像中各灰度级出现的概率,亦即输入图像直方图
  for i in range(256):
    input_image_grayscale_P.append(np.sum(input_image_cp == i) / pixels_total_num)
  # 求解输出图像
  t = 0        # 输入图像的灰度级分布函数F
  for i in range(256):
    t = t + input_image_grayscale_P[i]
    output_imgae[np.where(input_image_cp == i)] = 255 * t
  return output_imgae

4. 数学证明目标变换

  • $$S = T(r) = (L-1)\int_0^rp_r(w)dw$$
  • $T(r)$为严格单调函数,可保证反映射时,消除二义性$p_r(w)$为源图像归一化后的直方图

4.1 假定

  • 图像灰度级为:$[0, L-1]$
  • 源图像中,$k$灰度级的像素个数:$n_k$
  • 源图像像素总数:$n$原图像直方
  • 图$h(r_k) = n$4.2 归一化后的直方图

$$p(r_k) = n_k / n$$

$p(r_k)$即为灰度级$r_k$在源图像中出现的概率估计

4.3 证明

概率密度函数的积分为分布函数,即对分布函数的导数为概率密度函数。

因为$p_r(r)$与$T(r)$已知,则由

$$\frac{{\rm d}r}{{\rm d}S} = \frac{p_s(s)}{p_r(r)}$$

又因为

$$S = T(r)$$


$$\frac{{\rm d}S}{{\rm d}r} = \frac{T(r)}{r}$$

联立上三式及目标变换

$$S = T(r) = (L-1)\int_0^rp_r(w)dw$$

可得

$$p_s(s) = \frac{1}{L-1}$$

故,这意味着变换之后的图像的灰度级为均匀分布,证毕。

总结

以上所述是小编给大家介绍的Python实现直方图均衡基本原理解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python连接mysql数据库示例(做增删改操作)
Dec 31 Python
Python中使用gzip模块压缩文件的简单教程
Apr 08 Python
Python发送email的3种方法
Apr 28 Python
在Python中操作列表之list.extend()方法的使用
May 20 Python
Python中getpass模块无回显输入源码解析
Jan 11 Python
Mac下Anaconda的安装和使用教程
Nov 29 Python
python处理两种分隔符的数据集方法
Dec 12 Python
opencv3/C++实现视频背景去除建模(BSM)
Dec 11 Python
python如何进行矩阵运算
Jun 05 Python
Python3基于plotly模块保存图片表格
Aug 03 Python
Python实现Excel自动分组合并单元格
Feb 22 Python
python实现网络五子棋
Apr 11 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 #Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 #Python
python判断自身是否正在运行的方法
Aug 08 #Python
Python 日期区间处理 (本周本月上周上月...)
Aug 08 #Python
python各类经纬度转换的实例代码
Aug 08 #Python
Python3.0 实现决策树算法的流程
Aug 08 #Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 #Python
You might like
解析php file_exists无效的解决办法
2013/06/26 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
PHP 实现缩略图
2021/03/09 PHP
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
HTML的select控件美化
2017/03/27 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
2017/04/04 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
八大排序算法的Python实现
2021/01/28 Python
详解Swift中属性的声明与作用
2016/06/30 Python
Python实现自动上京东抢手机
2018/02/06 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
Python制作exe文件简单流程
2019/01/24 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
python线性插值解析
2020/07/05 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
校园之星获奖感言
2014/01/29 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
2015年护士节活动总结
2015/02/10 职场文书
护士辞职信怎么写
2015/02/27 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript