使用Python实现Histogram_equalization算法

Posted on

最近刚来日本忙着生活上的事情,对技术上的研究也有点松懈了.在日本的研究课题是计算机图形学.所以就选修了相关的课程,最基本 的当然是图形处理,老师的第一个任务就是实现Histogram equalization算法.中文名字就是直方图均衡化.

概念介绍

这里首先讨论的是灰阶的图像,也就是平常大家所有的黑白照片.然后每个颜色都有具体的数值.纯黑色是0,纯白色是255. 当然这是对于8 Bit的图来说的. 色差的范围只有0-255.就拿这个作为例子来讲解吧~ 然后就要讲解如何从数值上来分析一张图片是拍的好呢还是不好呢,如果是一张好照片,那这张照片必然是 对比度鲜明,该亮的地方亮,该暗的地方暗.也就是大家所说的曝光合适.然后我们从照片的二进制数据中去读取每个像素的数值,然后画出直方图.发现每个数值的 像素分布比较均匀,就说明这是一张好照片.但是现实生活中,我们可能会拍到一些曝光不足导致整体照片很暗或者曝光过了导致照片过亮的情况.在不能重拍的情况 下只能使用算法来进行优化了,本文就是来说明这个算法的实现的.

算法大致概念

算法的本质就是提取每个像素的数值,然后经过计算把每个像素进行替换.每个像素都有经过计算之后的新的数值.新的数值可以使照片整体上的数值分布更均匀. 给人的整体感觉是照片对比度变得很好了.具体的算法解释看wiki 我解释的比较烂. Histogram_equalization

算法实现

根据wiki的例子,我用Py实现了这个算法,效果还算不错吧.尽可能的少引用类库,不过opencv已经有现成实现好的API了.但是只支持Py2,而我用的Py3. 库的引用只使用了PILnumpy.前者用来读取图像的二进制数据, 后来用来进行数值的累加计算.源码发布在 Github

计算机图形学对我来说完全是未知的领域,希望有经验的同学可以不吝指正.

tagged: python