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

news2024/9/27 19:19:55

目录

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 
begin
	fids = $fopen("D:\\FPGA_Proj\\FPGAtest\\code_proj\\test0.bmp","rb");
	dat  = $fread(Buffer,fids);
	$fclose(fids);
end
 
 
 
initial 
begin
i_clk=1;
i_rst=1;
#1000;
i_rst=0;
end 

always #5 i_clk=~i_clk;
 
always@(posedge i_clk) 
begin
	II<=Buffer[idx];
	idx<=idx+1;
end
 

tops 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 begin
 fout1 = $fopen("SAVEDATA1.txt","w");
 fout2 = $fopen("SAVEDATA2.txt","w");
end

always @ (posedge i_clk)
 begin
    if(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);
end

endmodule
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.coloradmin.cn/o/1018822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatisPlus中使用Mybatis方式操作数据库。

说明 MyBatisPlus中&#xff0c;可以使用 Mybatis 方式操作数据库。在 Mapper.xml 中&#xff0c;编写 SQL 来实现比较复杂的操作。 一般比较复杂的逻辑&#xff0c;需要多表联合查询&#xff0c;比较适合直接写SQL。 MybatisPlus比较适合单表操作。 PS&#xff1a;本示例只…

使用stelnet进行安全的远程管理

1. telnet有哪些不足&#xff1f; 2.ssh如何保证数据传输安全&#xff1f; 需求&#xff1a;远程telnet管理设备 用户定义需要在AAA模式下&#xff1a; 开启远程登录的服务&#xff1a;定义vty接口 然后从R2登录&#xff1a;是可以登录的 同理R3登录&#xff1a; 在R1也可以查…

10.前端打包与nginx部署

文章目录 打包部署nginx替换html 打包 首先&#xff0c;确保你的项目是可以运行的&#xff0c;以若依为例&#xff0c;运行npm run dev 是可以正常运行起来前端的。然后前端的打包命令是 # 构建测试环境 npm run build:stage # 构建生产环境 npm run build:prod打包好之后&am…

华为云香港S3云服务器性能测评_99元一年租用价格

华为云香港S3云服务器1核2G1M带宽99元一年性能测评&#xff0c;配置为S3云服务器1核2G1M带宽&#xff0c;S系列热卖机型&#xff0c;适用于个人建站、普通web应用等负载较低场景&#xff0c;系统盘为高IO40G系统盘&#xff0c;华为云百科分享华为云香港云服务器配置费用&#x…

HUAWEI华为MateBookD15笔记本2019款i5独显非触屏(BoB-WAH9P)原装出厂Win10系统2004

原厂系统自带显卡、网卡、声卡、指纹等所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、华为电脑管家等预装程序 链接&#xff1a;https://pan.baidu.com/s/1sB7dCXlvw9deSiVeY8BvDg?pwd49a6 提取码&#xff1a;49a6

笔记01:第一行Python

NameError 名字不含特殊符号&#xff08;只能是英文、数字、下划线、中文等&#xff09;名字区分大小写名字先定义后使用 SyntaxError 不符合Python语法书写规范除了语法成分中的保留拼写错误输出中文符号if、for、def等语句末尾忘记冒号 IdentationError 缩进错误&#x…

算法刷题 week4

目录 1.斐波那契数列题目题解(递推 滚动变量) O(n) 剑指offer 10 - II 青蛙跳台阶问题题目题解 10.旋转数组的最小数字题目题解(二分) O(n) 1.斐波那契数列 题目 题解 (递推 滚动变量) O(n) 这题的数据范围很小&#xff0c;我们直接模拟即可。 当数据范围很大时&#xff0…

【学习笔记】Java 一对一培训(2.1)Java基础语法

【学习笔记】Java 一对一培训&#xff08;2.1&#xff09;Java基础语法 关键词&#xff1a;Java、Spring Boot、Idea、数据库、一对一、培训、教学本文主要内容含Java简介、Java基础语法、Java对象和类、Java基本数据类型、Java变量类型、Java修饰符计划2小时完成&#xff0c;…

广义模态控制实例

广义模态控制实例 1. 原系统2. 调节器设计3. 加入调节器后的系统 在广义模态控制一文中&#xff0c;笔者介绍了广义模态控制的思路以及算法。本文将举一个简单的广义模态控制的例子&#xff0c;以加深理解。 1. 原系统 取原开环系统的传递函数为 G ( s ) 2 15 s 2 s G ( {…

2、ARM处理器概论

一、ARM处理器概述 1、ARM的含义 ARM&#xff08;Advanced RISC Machines&#xff09;有三种含义&#xff0c;一个公司的名称、一类处理器的通称、一种技术 ARM公司&#xff1a; 成立于1990年11月&#xff0c;前身为Acorn计算机公司主要设计ARM系列RISC处理器内核授权ARM内…

数据包络分析(DEA)

写在前面&#xff1a; 博主本人大学期间参加数学建模竞赛十多余次&#xff0c;获奖等级均在二等奖以上。为了让更多学生在数学建模这条路上少走弯路&#xff0c;故将数学建模常用数学模型算法汇聚于此专栏&#xff0c;希望能够对要参加数学建模比赛的同学们有所帮助。 目录 1. …

gma 2 教程(二)数据操作:8.矢量数据功能逻辑架构和格式支持

安装 gma&#xff1a;pip install gma 功能逻辑架构 gma矢量数据操作类主要包括数据资源&#xff08;DataSource&#xff09;、矢量图层&#xff08;Layer&#xff09;、矢量要素&#xff08;Feature&#xff09;&#xff0c;三者的示意图如下&#xff1a; 图 29 矢量数据组成…

【JAVA-Day22】深度解析 Java 的包机制

深度解析 Java 的包机制 深度解析 Java 的包机制摘要引言一、什么是包机制1.1 包的定义1.2 包的命名规范1.3 包的声明1.4 包的导入1.5 包的访问权限1.6 包的层次结构1.7 包的目录结构 二、包的命名冲突问题三、总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默…

ARM架构过程调用标准AAPCS(学习)

AAPCS是ARM架构的处理器规定的一些标准。 参数和返回值传递&#xff0c;对于简单的情况&#xff0c;输入参数由R0-R3分别用来记录第1到4个参数。当传递的参数超过4个时&#xff0c;就需要借助栈来保存参数。函数的返回值通常保存在R0中&#xff0c;若返回值为64位&#xff0c;…

Linux 多线程 ( 多线程概念 )

文章目录 Linux线程概念什么是线程&#xff1f;二级页表线程的优点线程的缺点线程异常 Linux线程概念 什么是线程&#xff1f; 在一个程序里的一个执行路线叫做线程 thread ),更准确的定义为&#xff1a;“线程是一个进程内部的控制序列"。一切进程至少有一个执行线程。…

ArcGIS Maps SDK for JavaScript系列之四:添加自定义底图

目录 Basemap类介绍Basemap类的常用属性Basemap类的常用方法 使用Basemap添加自定义底图引用Basemap引用切片图层创建一个新的Basemap对象将自定义图层应用到地图视图中引入并创建Camera对象引入并创建SceneView对象 Basemap类介绍 Basemap类是ArcGIS Maps SDK for JavaScript…

Linux:centos9的本地yum仓库配置

其实9和7的配置方法是差不多一样的&#xff0c;只不过你使用7的本地yum仓库里面直接挂载就可以直接把仓库位置指向挂载点 具体可以看我往期文章&#xff0c;但是先看完我下面的描述再去看我链接的文章才能看懂如何配置centos9的yum仓库 Linux&#xff1a;YUM仓库服务_鲍海超-…

Scratch游戏------打砖块(不用VIP)

打砖块游戏是一款较老的动作电子游戏。玩家操作“挡板”&#xff0c;让一颗不断弹来弹去的“球”击碎砖块&#xff0c;作为过关目标消去的“砖块”且的途中不会落到屏幕底下。 目录 1.操作说明&#xff1a; 2.背景&#xff1a; 3.挡板&#xff1a; 4.游戏控制&#xff1a; …

【算法训练-二叉树 二】【重建二叉树】依据前序与中序遍历序列重建二叉树

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【重建二叉树】&#xff0c;使用【二叉树】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

基于matlab实现的电磁波反射折射动态仿真

完整程序: %题目要求电场入射到xo平面 clear; clc; u04*pi*1e-7; %自由空间中的磁导率 e01e-9/(36*pi); %自由空间中的电介质常数 f1e8; %电磁波的频率 w2*pi*f; Ei5*1.41; %入射波幅度 R0.052; …