一、图像的直方图
直方图其实就是柱状图。对于一个图像而言,每一个像素都有一个对应的灰度值。一个图像的灰度直方图横坐标为灰度,纵坐标为某灰度像素的数量。对于常用的RGB-888格式的图像,每一个颜色的数值范围均为
图像的灰度直方图可以反映出图像的以下信息: 1.
亮度信息:比较亮的图像柱状图的纵坐标主要分布在右侧,比较暗的图像柱状图主要分布在左侧。
2.
对比度信息:低对比度的图像柱状图分布较为集中,高对比度的图像柱状图分布较为分散。如下图所示,对比度越低,各个像素点的灰度差异较小,柱状图分布更集中,分辨图像信息更困难。
二、直方图均衡
直方图均衡即将图片的灰度直方图“拉伸和平均”的操作,来增强图像的对比度。在拉伸的过程中需要尽量保持每个灰度级的像素数量不变。直方图均衡算法可以由以下的公式给出:
上式中,
三、Verilog代码编写思路
首先要得到每一帧图像中对应灰度级像素出现的次数。以RGB-888格式为例,可以定义256个计数器,遍历图像中的每一个像素,遍历到对应灰度等级的计数器依次+1,最后即可得到直方图均衡之前的灰度直方图。但是直接定义256个计数器很浪费FPGA资源,对于访问也不是很方便,于是我们可以通过定义一个RAM来实现。每一个灰度等级对应RAM的一个特定的地址。
3.1 如何使用RAM统计像素的灰度级
About this Post
This post is written by Yun Zhang, licensed under CC BY-NC 4.0.