当前位置: 首页 > news >正文

基于LUT查找表方法的图像gamma校正算法FPGA实现,包括tb测试文件和MATLAB辅助验证

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

5.算法完整程序工程


1.算法运行效果图预览

将gamma=2.2和gamma=1/2.2的数据分别导入到matlab进行对比:

2.算法运行软件版本

matlab2022a

3.部分核心程序

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/07/28 01:51:45
// Design Name: 
// Module Name: test_image
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module test_image;reg i_clk;
reg i_rst;
reg [7:0] Buffer [0:100000];
reg [7:0] II;
wire [7:0] o_gamma1_jiaoz;
wire [7:0] o_gamma2_jiaoz;
integer fids,idx=0,dat;//D:\FPGA_Proj\FPGAtest\code_proj\project_1\project_1.srcs\sources_1
initial 
beginfids = $fopen("D:\\FPGA_Proj\\FPGAtest\\code_proj\\test0.bmp","rb");dat  = $fread(Buffer,fids);$fclose(fids);
endinitial 
begin
i_clk=1;
i_rst=1;
#1000;
i_rst=0;
end always #5 i_clk=~i_clk;always@(posedge i_clk) 
beginII<=Buffer[idx];idx<=idx+1;
endtops tops_u(
.i_clk            (i_clk),
.i_rst            (i_rst),
.i_I              (II),
.o_gamma1_jiaoz   (o_gamma1_jiaoz),
.o_gamma2_jiaoz   (o_gamma2_jiaoz)
);
integer fout1;
integer fout2;
initial beginfout1 = $fopen("SAVEDATA1.txt","w");fout2 = $fopen("SAVEDATA2.txt","w");
endalways @ (posedge i_clk)beginif(idx<=66617)$fwrite(fout1,"%d\n",o_gamma1_jiaoz);else$fwrite(fout1,"%d\n",0);if(idx<=66617)$fwrite(fout2,"%d\n",o_gamma2_jiaoz);else$fwrite(fout2,"%d\n",0);
endendmodule
0X_008m

4.算法理论概述

       基于LUT查找表方法的图像gamma校正算法是一种用于改善图像显示效果的技术,它通过对图像像素的灰度值进行非线性变换,使得图像在显示设备上的表现更接近人眼的视觉特性。

       gamma校正算法的核心思想是根据人眼的视觉特性对图像像素的灰度值进行非线性变换。人眼对图像的亮度感知并不是线性的,而是对暗部和亮部的敏感度不同,对暗部的敏感度更高。因此,gamma校正算法通过对暗部像素进行较大的灰度值调整,对亮部像素进行较小的灰度值调整,使得图像在显示设备上的表现更接近人眼的视觉特性。

gamma校正算法的数学公式如下:

O = 255/255^(γ)*Image^(γ)

       其中,I表示输入像素的灰度值,O表示输出像素的灰度值,γ表示gamma值,通常取值为2.2。该公式的含义是,将输入像素的灰度值I进行γ次方运算,得到输出像素的灰度值O。

        在具体实现中,为了加快运算速度,通常会使用查找表(LUT)来存储预计算的结果。假设输入像素的灰度值范围为0~255,则可以生成一个大小为256的查找表,表中每个元素的值为对应灰度值的γ次方运算结果。在实现时,只需要输入像素的灰度值作为查找表的索引,即可得到对应的输出像素的灰度值。

基于LUT查找表方法的图像gamma校正算法的FPGA实现可以采用以下步骤:

  1. 定义输入和输出图像的数据格式,例如8位灰度图像,可以使用单个8位寄存器表示每个像素的灰度值。
  2. 定义一个大小为256的查找表,表中每个元素的值为对应灰度值的1/γ次方运算结果。可以使用FPGA中的ROM或者CAM模块来实现查找表。
  3. 读取输入图像的每个像素的灰度值,并将其作为查找表的索引,得到对应的输出像素的灰度值。可以使用FPGA中的单端口RAM或者双端口RAM来实现像素值的存储和读取。
  4. 将输出像素的灰度值写入到输出图像中,完成一次gamma校正。

       需要注意的是,由于FPGA的并行性,可以将整个图像的像素并行处理,实现高速的gamma校正。此外,也可以使用流水线结构、多级查找表等技术进一步提高计算速度和精度。

5.算法完整程序工程

OOOOO

OOO

O

http://www.lryc.cn/news/169160.html

相关文章:

  • Function模块
  • Prometheus PromQL数据查询语言
  • 如何将转换器应用于时序模型
  • 数据结构:队列
  • AUTOSAR汽车电子嵌入式编程精讲300篇-基于AUTOSAR架构的AT控制系统研究与实现
  • 计网第五章(运输层)(四)(TCP的流量控制)
  • 【华为OD机试python】查找众数及中位数【2023 B卷|100分】
  • 阿里云无影云电脑详细介绍:价格、使用和功能优势说明
  • 【实践篇】MySQL执行计划详解
  • 二维凸包(Graham) 模板 + 详解
  • ElasticSearch(ES)简单介绍
  • OpenCV(三十五):凸包检测
  • PS 透视裁剪工具
  • 每日一个C库函数-#1-memset()
  • GraphQL基础知识与Spring for GraphQL使用教程
  • 【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析
  • 威胁的数量、复杂程度和扩散程度不断上升
  • NSSCTF web 刷题记录2
  • Linux驱动之INPUT子系统框架
  • Long类型雪花算法ID返回前端后三位精度缺失问题解决
  • 6.8-SpringIoC之循环依赖底层源码解析
  • Springboot 实践(18)Nacos配置中心参数自动刷新测试
  • uniapp引入小程序原生插件
  • 自己记录微信小程序开发遇到的问题
  • 【leetcode 力扣刷题】栈—波兰式///逆波兰式相关知识和题目
  • Web 第一步:HTTP 协议(基础)
  • 【Vue】快速入门案例与工作流程的讲解
  • LuatOS-SOC接口文档(air780E)--camera - codec - 多媒体-编解码
  • 《动手学深度学习 Pytorch版》 6.6 卷积神经网络
  • 【微信小程序】项目初始化