博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数学之路-python计算实战(14)-机器视觉-图像增强(直方图均衡化)
阅读量:6039 次
发布时间:2019-06-20

本文共 1724 字,大约阅读时间需要 5 分钟。

我们来看一个灰度图像,让n_i表示灰度i出现的次数,这样图像中灰度为i 的像素的出现概率是

p_x(i) = \frac{n_i}{n}, i\in {0,..., L - 1}

L 是图像中全部的灰度数,n 是图像中全部的像素数, p 实际上是图像的直方图,归一化到 0..1

把 c 作为相应于 p 的累计概率函数, 定义为:

c(i) = \sum_{j=0}^i p_x(j)

c 是图像的累计归一化直方图。

我们创建一个形式为 y = T(x) 的变化,对于原始图像中的每一个值它就产生一个 y,这样 y 的累计概率函数就能够在全部值范围内进行线性化,转换公式定义为:

y_i = T(x_i) = c(i)

注意 T 将不同的等级映射到 {0..1} 域。为了将这些值映射回它们最初的域,须要在结果上应用以下的简单变换:

y_i' = y_i \cdot(max - min) + min

上面描写叙述了灰度图像上使用直方图均衡化的方法。可是通过将这样的方法分别用于图像RGB颜色值的红色、绿色和蓝色分量,从而也能够对彩色图像进行处理。

Python:
 
cv2.
equalizeHist
(src
[, dst
]
) → dst
C:
 void 
cvEqualizeHist
(const CvArr* 
src, CvArr* 
dst
)
Parameters:
  • src – Source 8-bit single channel image.
  • dst – Destination image of the same size and type as src .

The function equalizes the histogram of the input image using the following algorithm:

  1. Calculate the histogram H for src .

  2. Normalize the histogram so that the sum of histogram bins is 255.

  3. Compute the integral of the histogram:

    H'_i =  \sum _{0  \le j < i} H(j)

  4. Transform the image using H' as a look-up table: \texttt{dst}(x,y) = H'(\texttt{src}(x,y))

The algorithm normalizes the brightness and increases the contrast of the image. 

# -*- coding: utf-8 -*-   #code:myhaspl@myhaspl.comimport cv2fn="test1.jpg"myimg=cv2.imread(fn)img=cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY)newimg=cv2.equalizeHist(img)cv2.imshow('src',img)cv2.imshow('dst',newimg)cv2.waitKey()cv2.destroyAllWindows()

本博客全部内容是原创,假设转载请注明来源

以下右图是经过增强化的图

直方图均衡化通经常使用来添加很多图像的全局
对照度
,尤其是当图像的实用数据的对照度相当接近的时候。

通过这样的方法,

亮度
能够更好地在直方图上分布。这样就能够用于增强局部的对照度而不影响总体的对照度

本博客全部内容是原创,假设转载请注明来源

以下部分代码验证实现了算法
# -*- coding: utf-8 -*-   #code:myhaspl@myhaspl.com#直方图均衡化import cv2import numpy as npfn="test5.jpg"myimg=cv2.imread(fn)img=cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY)h=img.shape[0]w=img.shape[1]newimg=np.zeros((h,w),np.uint8)scount=0.0#原始图像灰度级scol={}#目标图像灰度级dcol={}#原始图像频度Ps={}#累计概率Cs={}#统计原始图像灰度级for m in xrange(h):    for n in xrange(w):        scol[img[m,n]]=scol.setdefault(img[m,n],0)+1        scount+=1
下图左为源图。右图为进行直方图均衡化后的图
你可能感兴趣的文章
《量化金融R语言初级教程》一2.5 协方差矩阵中的噪声
查看>>
mysql到elasticsearch数据迁移踩坑实践-Ali0th
查看>>
beetl 和 shrio 结合
查看>>
相对/绝对路径,cd命令,mkdir/rmdir命令,rm命令
查看>>
tomcat中web.xml各配置项的意义
查看>>
Nodejs学习笔记(二):《node.js开发指南》代码中需要注意的几点
查看>>
Ztree异步加载自动展开节点
查看>>
反射操作公共成员变量
查看>>
Android热修复升级探索——代码修复冷启动方案
查看>>
学校宿舍的深夜之思考
查看>>
VB.NET 生成DBF文件
查看>>
编译安装nginx 1.9.15
查看>>
新的开始~~~
查看>>
字符串的扩展
查看>>
存储过程中调用webservice
查看>>
神奇语言 python 初识函数
查看>>
Windows安装Composer出现【Composer Security Warning】警告
查看>>
四 指针与数组 五 函数
查看>>
硬盘空间满了
查看>>
dutacm.club Water Problem(矩阵快速幂)
查看>>