1.算法运行效果图预览
FPGA的仿真图如下:
将数据导入MATLAB,对比结果如下:
2.算法运行软件版本
MATLAB2022a
vivado2019.2
3.部分核心程序
````timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2023/01/19 01:47:15
// Design Name:
// Module Name: im2bw
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module im_hist(
input i_clk,
input i_rst,
input i_image_en,
input i_image_end,
input[7:0] i_image,
output o_en_eq,
output[7:0] o_image_eq
);
wire en_hist;
wire[7:0] w_hist;
//直方图
hist hist_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_image (i_image[7:0]),
.i_image_en (i_image_en),
.i_image_end(i_image_end),
.o_hist_en (en_hist),
.o_hist (w_hist)
);
//均衡输出
hist_eq hist_eq_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_hist_en (en_hist),
.i_hist (w_hist[7:0]),
.i_image_en (i_image_en),
.i_image (i_image[7:0]),
.o_image_en (o_en_eq),
.o_image (o_image_eq)
);
endmodule
0X_036m
```
4.算法理论概述
图像直方图均衡化是一种图像处理技术,旨在改善图像的全局对比度,通过重新分配图像的像素值,使得图像的直方图更加均匀。对于灰度的分布更加平滑,图像的视觉效果更佳。这一过程特别适用于那些整体偏暗或偏亮、对比度不足的图像。
原理
灰度直方程分布: 首先,计算原图的灰度直方程H(r),它表示每个灰度级的像素数。对于8位图像,灰度级从0到2555,H(i)表示灰度i的像素数。
累积分布: 接下来,计算累积分布H'(r),对H累加和,反映每个灰度累积像素数,直到当前灰度。
映射变换: 基于H',对每个像素灰度i映射到新的灰度j,使得新映射后的直方程更均匀。映射函数查找表实现此映射变换。
FPGA实现: 在硬件上,FPGA可编程增益器设置为每个通道的增益,对应映射表的增益系数。这样,原图像的每个像素经PGA后,通过查表映射到新的灰度,实现均衡化。