基于FPGA的图像直方图均衡化处理verilog实现,包含tb测试文件和MATLAB辅助验证
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后,通过查表映射到新的灰度,实现均衡化。