基于FPGA的红外图像增强-Gamma校正方法

AI助手已提取文章相关产品:
关注、星标公众号,精彩内容每日送达
来源:网络素材

红外成像技术具有全天候工作、烟雾穿透能力强等优势,在军事侦察、工 业检测、安防监控等领域应用广泛。然而,由于外部环境和探测器硬件性能影响,红外图像可能存在过曝光和欠曝光的情况,进而导致图存在过亮和过暗的情况,影响图像质量因此,需要对采集到的红外图像进行二次处理,实现图像的亮度和对比度改善。

伽马(Gamma)校正作为一种常用的图像增强方法,其核心思想是通过幂律变换对图像信号进行非线性压缩或扩展,以补偿成像系统和显示系统之间的亮度响应差异,从而实现图像亮度的感知线性化与视觉一致性。

典型的伽马校正公式可表示为:

当校正系数大于1时,将对图像亮部进行压缩,图像整体变暗,当校正系数小于1时,将对图像暗部进行增强,图像整体变亮。

根据上述公式绘制出的伽马校正曲线如下图所示:

图1 伽马校正曲线图 

利用matlab仿真红外图像的伽马校正结果如下:

图2 红外图像的伽马校正结果(matlab仿真)

在实际成像系统中,需要将上述伽马校正算法部署至FPGA上,此时需要利用verilog语言实现。verilog实现伽马校正的部分代码如下:

module gamma_sqrt
(input   wire                clk                     ,   //时钟input   wire                rst_n                   ,   //复位//input ---------------------------------------------input   wire                RGB_hsync               ,   //RGB行同步input   wire                RGB_vsync               ,   //RGB场同步input   wire    [15:0]      RGB_data                ,   //RGB数据input   wire                RGB_de                  ,   //RGB数据使能//output --------------------------------------------output  wire                gamma_hsync             ,   //gamma行同步output  wire                gamma_vsync             ,   //gamma场同步output  wire    [15:0]      gamma_data              ,   //gamma数据output  wire                gamma_de                    //gamma数据使能);//========================< 定义信号 >==========================================wire    [ 7:0]              R                       ;wire    [ 7:0]              G                       ;wire    [ 7:0]              B                       ;wire    [ 7:0]              gamma_R                 ;wire    [ 7:0]              gamma_G                 ;wire    [ 7:0]              gamma_B                 ;reg                         RGB_de_r                ;reg                         RGB_hsync_r             ;reg                         RGB_vsync_r             ;
assign R = {RGB_data[15:11],RGB_data[13:11]};assign G = {RGB_data[10: 5],RGB_data[ 6: 5]};assign B = {RGB_data[ 4: 0],RGB_data[ 2: 0]};//==========================================================================//==    gamma变换//==========================================================================rom_sqrt u_R(    .address                (R                      ),    .clock                  (clk                    ),    .q                      (gamma_R                ));
rom_sqrt u_G(    .address                (G                      ),    .clock                  (clk                    ),    .q                      (gamma_G                ));
rom_sqrt u_B(    .address                (B                      ),    .clock                  (clk                    ),    .q                      (gamma_B                ));
assign gamma_data = {gamma_R[7:3],gamma_G[7:2],gamma_B[7:3]};
always @(posedge clk or negedge rst_n) begin    if(!rst_n) begin        RGB_de_r    <= 1'b0;        RGB_hsync_r <= 1'b0;        RGB_vsync_r <= 1'b0;    end    else begin          RGB_de_r    <= RGB_de;        RGB_hsync_r <= RGB_hsync;        RGB_vsync_r <= RGB_vsync;    endend
assign gamma_de    = RGB_de_r;assign gamma_hsync = RGB_hsync_r;assign gamma_vsync = RGB_vsync_r;


endmodule

上述展示校正系数小于1时的verilog代码,主要思想是通过查找表的方式实现Gamma校正,同时保持时序同步。

本次实验的平台为正点原子的Altera FPGA开发板,开发环境为Quartus 和ModelSim。Gamma校正的上板验证结果如下:

图3 FPGA上实现红外图像的伽马校正(校正系数大于1),左图为输入图像,右图为校正后图像。

图4 FPGA上实现红外图像的伽马校正(校正系数小于1),左图为输入图像,右图为校正后图像。

如图3和图4所示,将Gamma校正方法在FPGA上进行部署,实现红外图像亮度和对比度的调整。但本次实验仅实现简单的Gamma校正,需要去手动调整校正系数,后续将进一步探索自适应Gamma校正的FPGA实现。

(全文完)

声明:我们尊重原创,也注重分享;文字、图片版权归原作者所有。转载目的在于分享更多信息,不代表本号立场,如有侵犯您的权益请及时联系,我们将第一时间删除,谢谢!

图片

想要了解FPGA吗?这里有实例分享,ZYNQ设计,关注我们的公众号,探索

您可能感兴趣的与本文相关内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值