PotatoPie 4.0 实验教程(22) —— FPGA实现摄像头图像对数(log)变换

什么是图像的log变换?

总的来说,对数变换是一种常用的图像增强技术,可以改善图像的视觉质量、减少噪声以及突出图像中的细节,从而提高图像在视觉感知和分析中的效果和可用性。

图像的对数变换(log transformation)是一种用于增强图像对比度的常见方法之一。它通过对图像的像素值取对数来扩展较低亮度的区域,并压缩较高亮度的区域,从而增强图像的细节和对比度。

对数变换的主要特点是可以扩展图像的暗部细节,使得低亮度区域的像素值被映射到较大的范围内,从而提高了图像的对比度。然而,对数变换对于较亮的区域的影响相对较小,可能会导致亮度信息的丢失。

对数变换常用于图像处理中的动态范围压缩、图像增强、去噪等应用中。

为什么要做图像的log变换?

对图像进行对数变换的主要目的有几个:

  1. 增强对比度:对数变换可以扩展图像的灰度动态范围,将较低灰度值的区域拉伸,同时压缩较高灰度值的区域,从而增强图像的对比度。这对于某些图像来说,特别是那些灰度范围较窄的图像,可以使图像更具视觉效果。

  2. 压缩动态范围:在一些应用中,图像的动态范围可能过大,包含了大量的细节信息。对数变换可以帮助压缩图像的动态范围,使得图像中的细节更容易被观察和分析。

  3. 减少噪声:在图像处理中,对数变换也可以用于减少图像中的噪声。由于对数函数的曲线特性,对低灰度值的像素施加更大的变换,因此可以将低灰度值的噪声信号压缩到较小的范围内,从而减少图像中的噪声影响。

  4. 增强图像细节:对数变换有助于突出图像中的细节和纹理,特别是对于暗部细节。这使得图像在观察和分析时更容易捕捉到细微的变化和特征。

log变换的公式

对于灰度图像,图像的对数变换公式如下:

其中,r 表示原始图像的像素值,s 表示变换后的像素值,c 是一个常数,用于调节变换后的亮度范围。其中 c 为常数系数, r 为像素值范围 0~255。

(生成这个交互式曲线图的python代码在文章的后面有提供)

如图所示, 对数曲线在像素值较低的区域斜率较大, 像素值较高的区域斜率比较低, 所以图像经过对数变换之后, 在较暗的区域对比度将得到提升, 因而能增强图像暗部的细节。

python实现图像的log变换

PotatoPie 4.0 实验教程(22) —— FPGA实现摄像头图像对数(log)变换-Anlogic-安路论坛-FPGA CPLD-ChipDebug

这段代码会读取名为 Lena.jpg 的图片文件,将其转换为灰度图像,并应用 log 变换。然后,它会显示原始图像、灰度图像和经过 log 变换后的图像。

可以看到图像的暗部被明显提升了。

matlab实现实现图像的log变换

PotatoPie 4.0 实验教程(22) —— FPGA实现摄像头图像对数(log)变换-Anlogic-安路论坛-FPGA CPLD-ChipDebug

这段 MATLAB 代码实现了相同的功能,包括读取图像、将图像转换为灰度图像、应用对数变换以及显示原始图像、灰度图像和对数变换后的图像。

FPGA工程解析

工程数据流图

工程层次图

代码解析

demo18相比,只是多了一个img_log的模块,也就是下面这一段代码,在从SDRAM读出来之后,经它处理后再输出hdmi_tx模块。

img_log u_img_log(.i_clk(clk_pixel),.i_rst_n(sys_rst_n),.i_hs(VGA_HS),.i_vs(VGA_VS),.i_de(VGA_DE),.i_r(VGA_RGB[23:16]),.i_g(VGA_RGB[15:8]),.i_b(VGA_RGB[7:0]),.o_hs(log_hs),.o_vs(log_vs),.o_de(log_de),.o_r(log_data[23:16]),.o_g(log_data[15:8]),.o_b(log_data[7:0]));

对于FPGA做log运算最好的办法是我们先用matlab或者python把 c*log(0~255)的值计算并输出到文本文件中,然后填入log_rom.v这个文件中即可。下面的代码提供了直接输出log_rom.v的功能,分别提供了pyton版本和matlab版本,代码中c取30

pyton版本

PotatoPie 4.0 实验教程(22) —— FPGA实现摄像头图像对数(log)变换-Anlogic-安路论坛-FPGA CPLD-ChipDebug

matlab版代码

PotatoPie 4.0 实验教程(22) —— FPGA实现摄像头图像对数(log)变换-Anlogic-安路论坛-FPGA CPLD-ChipDebug

此 MATLAB 代码将执行与Python版代码相同的操作,并生成相同的 COE 文件和图像。

因此FPGA中只需要读出log的值即可,


log_rom u_r(.clka (i_clk ),.addra (i_r ),.ena (1'b1 ),.douta (o_r ));

由于是纯组合逻辑,行场信号都不需要延一拍直接输出即可。

assign o_hs = i_hs;assign o_vs = i_vs;assign o_de = i_de;

管脚约束

与PotatoPie 4.0 实验教程(18) —— FPGA实现OV5640摄像头采集以SDRAM作为显存进行HDMI输出显示相同,不作赘述。

时序约束

与PotatoPie 4.0 实验教程(18) —— FPGA实现OV5640摄像头采集以SDRAM作为显存进行HDMI输出显示相同,不作赘述。

实验结果

还是以咱们的小金猪作为主角。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/4256.shtml

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

相关文章

【Linux命令行艺术】1. 初见命令行

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…

Anti Rookit -- 检测隐藏进程

Anti Rookit 一:检测隐藏进程 引言 检测隐藏进程除了众所周知的枚举进程ID之外,还有枚举句柄表的方式。不过今天给大家带来的是第三种方法。 探究 应用层通过接口 C r e a t e P r o c e s s \textcolor{cornflowerblue}{CreateProcess} CreateProcess…

【Linux系统编程】26.信号、kill、alarm、setitimer

目录 信号 信号共性 信号特质 产生信号 信号相关概念 默认处理动作 信号4要素 常规信号 ​编辑 注意 kill 参数pid 测试代码1 测试结果 测试代码2 测试结果 alarm 参数seconds 返回值 取消闹钟 测试代码3 测试结果1 测试结果2 ​编辑 setitimer 参数…

BIO、NIO与AIO

一 BIO 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理. BIO(Blocking I/O,阻塞I/O)模式是一种网络编程中的I/O处理模式。在BIO模式中&#xf…

物联网实战--平台篇之(一)架构设计

本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.html 一、平台简介 物联网平台这个概念比较宽,大致可以分为两大类&#x…

网络攻击日益猖獗,安全防护刻不容缓

“正在排队登录”、“账号登录异常”、“断线重连”......伴随着社交软件用户的一声声抱怨,某知名社交软件的服务器在更新上线2小时后,遭遇DDoS攻击,导致用户无法正常登录。在紧急维护几小时后,这款软件才恢复正常登录的情况。 这…

有哪些好用电脑端时间定时软件?桌面日程安排软件推荐 桌面备忘录

随着现代生活节奏的加快,人们对于时间管理和任务提醒的需求越来越大。为了满足这一需求,市场上涌现出了众多桌面便签备忘录软件,它们不仅可以帮助我们记录待办事项,还能定时提醒我们完成任务。在这篇文章中,我将为大家…

WebGIS面试题(第六期)-GeoServer

WebGIS面试题(第六期) 以下题目仅为部分题目,全部题目在公众号 {GISer世界} ,答案仅供参考!!! 因为本人之前做过相关项目用到了GeoServer,因此在简历上写了熟悉GeoServer。所以在相关面试中都有问到,所以我…

【Unity动画系统】详解Root Motion动画在Unity中的应用(一)

Root Motion动画与普通动画的区别 普通动画:动画文件里记录的是物体的绝对坐标和方向,在播放动画时,Unity会根据Animation中记录的值,直接修改游戏对象的坐标和方向,每一帧的坐标和方向都是通过插值计算得出来的&…

Int4:Lucene 中的更多标量量化

作者:来自 Elastic Benjamin Trent, Thomas Veasey 在 Lucene 中引入 Int4 量化 在之前的博客中,我们全面介绍了 Lucene 中标量量化的实现。 我们还探索了两种具体的量化优化。 现在我们遇到了一个问题:int4 量化在 Lucene 中是如何工作的以…

微服务之并行与分布式计算

一、概述 1.1集中式系统vs分布式系统 集中式系统 集中式系统完全依赖于一台大型的中心计算机的处理能力,这台中心计算机称为主机(Host 或 mainframe ),与中心计算机相连的终端设备具有各不相同非常低的计算能力。实际上大多数终…

【ARM 裸机】BSP 工程管理

回顾一下上一节:【ARM 裸机】NXP 官方 SDK 使用,我们发现工程文件夹里面各种文件非常凌乱; 那么为了模块化整理代码,使得同一个属性的文件存放在同一个目录里面,所以学习 BSP 工程管理非常有必要。 1、准备工作 新建…

校车车载4G视频智能监控系统方案

一、项目背景 随着社会的快速发展,校车安全问题日益受到人们的关注。为了提高校车运营的安全性,保障学生的生命安全,我们提出了一套校车车载4G视频智能监控系统方案。该系统能够实时监控校车内部和外部环境,及时发现并处理潜在的…

selenium 自动化测试课上实操指南1——百度搜索

1.环境准备 下面的所有资源可以从超星班级资料中下载,机房的同学在收到的文件夹中可以找到文件 非本校同学,免费加入学银在线课程,就可以在资料 根目录 > 02 课件新 > week09 web自动化测试02 里下载本次实操资料 1)安…

【打工日常】云原生之搭建私有化web在线聊天软件LumenIM

一、LumenIM介绍 1.LumenIM简介 Lumen IM 是一个网页版在线聊天项目,前端使用 Naive UI Vue3,后端采用 GO 开发。 2.LumenIM功能 基于 WebSocket 服务做消息即时推送 支持私聊及群聊 支持多种聊天消息类型 例如:文本、代码块、图片及其它类型文件&…

15.接口自动化学习-Mock(挡板/测试桩)

场景: 新需求还未开发时,使用mock提早介入测试,等后边开发后,进行调试 三方接口返回效率低,使用mock技术走通流程 1.mock方式 (1)如果会写django或flask,可以写简单对应的代码 (…

Mysql--基础知识点--0.1--脏读、不可重复读、幻读

1 脏读、不可重复读、幻读 1.1 脏读 如果一个事务读到了另一个事务已修改且未提交的数据,则发生了脏读现象。 1.2 不可重复读 在一个事务里面多次读取同一个数据,若前后两次读到的数据不一致,则发生不可重复读现象。 1.3 幻读 在一个…

redis7 for windows的安装教程

本篇博客主要介绍redis7的windows版本下的安装教程 1.redis介绍 Redis(Remote Dictionary Server)是一个开源的,基于内存的数据结构存储系统,可用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希表、列…

【软考高项】二十六、范围管理基础内容

一、管理基础 产品范围和项目范围 产品范围强调结果,项目范围强调结果 管理的新实践 :需求一直是项目管理的关注重点,需求管理过程结束于需求关闭,即把产品、服务或成果移交给接收方,以便长期测量、监控、实现并维持收…

three.js 学习笔记 | 光线投射技术 - 包围盒(碰撞检测)

文章目录 three.js 学习笔记光线投射技术实现3D场景交互事件 THREE.Raycaster坐标系的转换案例:选中的模型变为红色 包围盒Box3 - 碰撞检测AABB包围盒辅助器Box3Helper案例1:创建AABB包围盒/包围球computeBoundingBox与boundingBox 搭配使用,…