FPGA实现图像的直方图均衡化

您所在的位置:网站首页 直方图的 FPGA实现图像的直方图均衡化

FPGA实现图像的直方图均衡化

2023-04-22 16:59| 来源: 网络整理| 查看: 265

  直方图均衡化又称为灰度均衡化,是指通过某种灰度映射使输入图像转换为在每一灰度级上都有近似相同的输出图像(即输出的直方图是均匀的)。在经过均衡化处理后的图像中,像素将占有尽可能多的灰度级并且分布均匀。因此,这样的图像将具有较高的对比度和较大的动态范围。直方图均衡可以很好地解决相机过曝光或曝光不足的问题。

 

一、MATLAB实现 %-------------------------------------------------------------------------- % 直方图均衡化 %-------------------------------------------------------------------------- close all clear all; clc; I = rgb2gray(imread('car.bmp')); Ieq=histeq(I); subplot(221),imshow(I);title('原图'); subplot(222),imhist(I); subplot(223),imshow(Ieq);title('直方图均衡化'); subplot(224),imhist(Ieq);

  点击运行,得到如下结果:

  从结果可以看出:图片对比度显著提高,直方图变得更均匀。

 

二、FPGA实现 1、理论分析

  直方图均衡化的公式如下所示,H(i)为第 i 级灰度的像素个数,A0为图像的面积(即分辨率),Dmax为灰度最大值,即255。

2、实现步骤

  和直方图拉伸的情况一样,直方图均衡化也分为真均衡化和伪均衡化。本次设计采用伪均衡化,即采用前一帧的图像进行统计、帧间隙进行累计和与归一化、当前帧做归一化后的映射输出。

  统计工作至少要等到前一帧图像“流过”之后才能完成。此限制决定了我们难以在同一帧既统计又输出最终结果。必须对前期的统计结果进行缓存、累计和、归一化,这点是毋庸置疑的。在下一次统计前需要将缓存结果、累计和结果清零(图片则不需要清0),而归一化的结果则留着给当前帧输出使用。这里我考虑用 2 个 ram 来实现直方图均衡化的整个过程,以图片为例,用两帧图片的伪均衡化来实现。

  整体构思如下所示:

 

 

  我们可以按下面步骤来实现:

  (1)前一帧:统计图像的直方图 H(i),统计结果实时输入到 ram1,注意输入数据要进行统计叠加,这算是一个难点;

//========================================================================== //== 前一帧:直方图灰度统计 //========================================================================== //数据前后拍进行比较 //--------------------------------------------------- assign hist_cnt_yes = gray_data_vld && gray_data_r == gray_data; //相等,可以相加 assign hist_cnt_not = gray_data_vld && gray_data_r != gray_data; //不等,只是一个 //灰度计数器 //--------------------------------------------------- always @(posedge clk or negedge rst_n) begin if(!rst_n) begin hist_cnt


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3