基于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实现可以采用以下步骤:
- 定义输入和输出图像的数据格式,例如8位灰度图像,可以使用单个8位寄存器表示每个像素的灰度值。
- 定义一个大小为256的查找表,表中每个元素的值为对应灰度值的1/γ次方运算结果。可以使用FPGA中的ROM或者CAM模块来实现查找表。
- 读取输入图像的每个像素的灰度值,并将其作为查找表的索引,得到对应的输出像素的灰度值。可以使用FPGA中的单端口RAM或者双端口RAM来实现像素值的存储和读取。
- 将输出像素的灰度值写入到输出图像中,完成一次gamma校正。
需要注意的是,由于FPGA的并行性,可以将整个图像的像素并行处理,实现高速的gamma校正。此外,也可以使用流水线结构、多级查找表等技术进一步提高计算速度和精度。
5.算法完整程序工程
OOOOO
OOO
O
相关文章:
基于LUT查找表方法的图像gamma校正算法FPGA实现,包括tb测试文件和MATLAB辅助验证
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将gamma2.2和gamma1/2.2的数据分别导入到matlab进行对比: 2.算法运行软件版本 matlab2022a 3.部分核心程序 timescale 1ns / 1ps //…...
Function模块
0 Preface/Foreword 1 数据结构 1.1 func_cb_t //task control block typedef struct {u8 sta; //cur working task numberu8 last; //lask task number #if BT_BACKSTAGE_ENu8 sta_break…...
Prometheus PromQL数据查询语言
PromQL 简介 PromQL(Prometheus Query Language)是 Prometheus 内置的数据查询语言。支持用户进行实时的数据查询及聚合操作。 Prometheus 基于指标名称(metrics name)以及附属的标签集(labelset)唯一定义一…...
如何将转换器应用于时序模型
一、说明 在机器学习的广阔环境中,变压器作为建筑奇迹屹立不倒,以其复杂的设计和捕获复杂关系的能力重塑了我们处理和理解大量数据的方式。 自 2017 年创建第一台变压器以来,变压器类型呈爆炸式增长,包括强大的生成 AI 模型&#…...
数据结构:队列
文章目录 队列一,概述二,添加数据三,删除数据 队列 一,概述 队列是一种特殊的数据结构,它遵循先进先出(FIFO)的原则。在队列中,元素被添加到末尾,并从头部移除。队列只…...
AUTOSAR汽车电子嵌入式编程精讲300篇-基于AUTOSAR架构的AT控制系统研究与实现
目录 前言 国内外研究现状 国外研究现状 国内研究现状 2 AUTOSAR规范及开发流程...
计网第五章(运输层)(四)(TCP的流量控制)
一、基本概念 流量控制就是指让发送方的发送速率不要太快,使得接收方来得及接收。可以使用滑动窗口机制在TCP连接上实现对发送方的流量控制。 注意:之前在讨论可靠传输时,讨论过选择重传协议和回退N帧协议都是基于滑动窗口的机制上进行实现…...
【华为OD机试python】查找众数及中位数【2023 B卷|100分】
【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 众数是指一组数据中出现次数最多的那个数,众数可以是多个。 中位数是指把一组数据从小到大排序后,如果这组数据的总数是奇数, 那最中间的那个数就是中位数; 如果这组数据总数是偶数,那…...
阿里云无影云电脑详细介绍:价格、使用和功能优势说明
什么是阿里云无影云电脑?无影云电脑(原云桌面)是一种快速构建、高效管理桌面办公环境,无影云电脑可用于远程办公、多分支机构、安全OA、短期使用、专业制图等使用场景,阿里云百科分享无影云桌面的详细介绍、租用价格、…...
【实践篇】MySQL执行计划详解
文章目录 本文知识大纲速览1. 前言2. 基本介绍1. 什么是执行计划2. 如何查看执行计划3. 执行计划的组成部分 3. 执行计划的关键元素1. id2. select_type3. table:4. type:5. possible_keys:6. key:7. key_len8. ref:9. rows:10. Extra 4. 底层原理5. 执行计划示例解读本文知识图…...
二维凸包(Graham) 模板 + 详解
(闲话) 上了大学后没怎么搞oi,从土木跑路到通信了(提桶开润大成功!),但是一年上两年的课(补的),保研也寄掉了( 说起来自从博客被大学同学发现并…...
ElasticSearch(ES)简单介绍
ES简介 Elasticsearch(通常简称为ES)是一个开源的分布式搜索和分析引擎,旨在处理各种类型的数据,包括结构化、半结构化和非结构化数据。它最初是为全文搜索而设计的,但随着时间的推移,它已经演变成一个功能…...
OpenCV(三十五):凸包检测
1.凸包检测介绍 凸包检测是计算凸包的一种技术,凸包就是:给定二维平面上的点集,将最外层的点连接起来构成的凸边形,它是包含点集中所有的点。 2.凸包检测函数convexHull() void cv::convexHull ( InputArray points, OutputArra…...
PS 透视裁剪工具
上文 PS 裁剪工具及工具栏配置讲解 我们讲完了裁剪工具 然后 我们继续来研究 透视裁剪工具 切换到 透视裁剪工具 后 我们先点击左上方的清除 先不要这些多的配置 然后 我们可以先用鼠标在图像上 画出一个局域 然后 我们去拖他四个角中的其中一个 就能拖出一些不同的形状 然…...
每日一个C库函数-#1-memset()
每日一个C库函数-#1-memset() 来源 C 标准库 - <string.h> 声明 void *memset(void *str, int c, size_t n);str:要填充的内存块;c:要被设置的值(以何值填充)。该值以 int 形式传递,填充内存块时…...
GraphQL基础知识与Spring for GraphQL使用教程
文章目录 1、数据类型1.1、标量类型1.2. 高级数据类型 基本操作2、Spring for GraphQL实例2.1、项目目录2.2、数据库表2.3、GraphQL的schema.graphql2.4、Java代码 3、运行效果3.1、添加用户3.2、添加日志3.3、查询所有日志3.4、查询指定用户日志3.5、数据订阅 4、总结 GraphQL…...
【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析
【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析 一、QNX AIS Server 框架分析二、QNX Hypervisor / Android GVM 方案介绍三、Camera APP 调用流程分析四、QCarCam 状态转换过程介绍五、Camera 加串-解串 硬件链路分析六、摄像头初始化检测过程介绍…...
威胁的数量、复杂程度和扩散程度不断上升
Integrity360 宣布了针对所面临的网络安全威胁、数量以及事件响应挑战的独立研究结果。 数据盗窃、网络钓鱼、勒索软件和 APT 是最令人担忧的问题 这项调查于 2023 年 8 月 9 日至 14 日期间对 205 名 IT 安全决策者进行了调查,强调了他们的主要网络安全威胁和担忧…...
NSSCTF web 刷题记录2
文章目录 前言题目[广东强网杯 2021 团队组]love_Pokemon[NCTF 2018]Easy_Audit[安洵杯 2019]easy_web[NCTF 2018]全球最大交友网站prize_p2[羊城杯 2020]easyser[FBCTF 2019]rceservice方法一方法二 前言 今天是2023年9月13号,刷题记录2正式开始。时间来到九月十七…...
Linux驱动之INPUT子系统框架
目录 一、input 子系统简介 二、input 驱动编写流程 1、注册 input_dev 2、上报输入事件 三、input_event 结构体 按键、鼠标、键盘、触摸屏等都属于输入(input)设备, Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...
RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...
Axure零基础跟我学:展开与收回
亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...
npm安装electron下载太慢,导致报错
npm安装electron下载太慢,导致报错 背景 想学习electron框架做个桌面应用,卡在了安装依赖(无语了)。。。一开始以为node版本或者npm版本太低问题,调整版本后还是报错。偶尔执行install命令后,可以开始下载…...
