FPGA图像处理入门 ZYNQ7020 直方图均衡

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

过暗和过亮的图像 经过直方图均衡化,使得图像变得清晰。

一、直方图均衡是什么?

直方图均衡化 (Histogram Equalization) 就是把一个已知灰度概率密度分布的图像经过一种变换,使之演变为一幅具有均匀灰度概率密度分布的新图像。

如下图所示:

在这里插入图片描述
计算步骤:

(1)计算累计直方图;

(2)将累计直方图进行区间转换;

(3)在累计直方图中,概率相近的原始值,会被处理为相同的值。

在这里插入图片描述

根据统计直方图,可以算出归一化直方图和累计直方图,如下图所示:

在这里插入图片描述
映射:
在这里插入图片描述

二、fpga实现

首先对输入数据统计 0-255区间灰度图像 得到统计直方图:

always@(posedge clk)
	if(clc_de==1'b1)
		hist_lut[clc_cnt]  <= 32'd0;
	else if(pre_de==1'b1)
		hist_lut[pre_data] <= hist_lut[pre_data] + 1'b1;

计算累计直方图:

always@(posedge clk)
	if(!rst_n)
		lut_add <= 'd0;
	else if(inter_de==1'b1)
		lut_add <= lut_add + hist_lut[inter_cnt];
	else
		lut_add <= 'd0;	

使用bram ip核来储存累计直方图的值:

hist_ram u1_hist_ram (
  .clka		(clk			),  	
  .wea		(wea			),   	
  .addra	(addra			), 	
  .dina		(lut_add		),  	
  .douta	(				), 	
  .clkb		(clk			),  	
  .web		(1'b0			),   	
  .addrb	(pre_data		), 	
  .dinb		(32'd0			),  	
  .doutb	(hist_sum		)  	
);

最后对累计直方图转换为均衡直方图:

always@(posedge clk)
	if(!rst_n)
		mult <= 'd0;
	else if(pre_de_r==1'b1)
		mult <= hist_sum*coe;
	else
		mult <= 'd0;

其中coe定义为:

localparam [63:0] coe = (2**25)*255/(COL*ROW);

扩大2的25次方倍是为了方便操作 节省资源 这里扩大倍数越大结果越精确

三、仿真验证

matlab统计结果:

在这里插入图片描述

fpga统计结果:

在这里插入图片描述

可以看到完全一致

处理效果:

在这里插入图片描述

总结

使用bram存储累计直方图 通过扩大截位操作完成均衡图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值