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.mfbz.cn/a/579671.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Canal入门使用

说明:canal [kə’nl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费(官方介绍)。一言以蔽之,Canal是一款实现数据同步的组件。可以实现数据库之间、数…

【氮化镓】p-GaN HEMTs空穴陷阱低温冻结效应

这篇文章是关于低温条件下p-GaN高电子迁移率晶体管(HEMTs)栅极漏电的研究。文章通过电容深能级瞬态谱(C-DLTS)测试和理论模型分析,探讨了空穴陷阱对栅极漏电电流的影响。以下是对文章的总结: 摘要&#xf…

前端JS加密库CryptoJS的常用方法

CryptoJS是前端常用的一个加密库&#xff0c;如MD5、SHA256、AES等加密算法。 官方文档&#xff1a;https://www.npmjs.com/package/crypto-js 安装方法 方法一&#xff1a;直接在html文件中引入 <script type"text/javascript" src"path-to/bower_componen…

(六)几何平均数计算 补充案例 #统计学 #CDA学习打卡

一. 两个案例 1&#xff09;几何平均数计算&#xff1a;基金年平均增长率计算 在财务、投资和银行业的问题中&#xff0c;几何平均数的应用尤为常见&#xff0c;当你任何时候想确定过去几个连续时期的平均变化率时&#xff0c;都能应用几何平均数。其他通常的应用包括物种总体…

[Linux][网络][网络编程套接字][一][预备知识][套接字地址结构]详细讲解

目录 0.预备知识1.理解源IP地址和目的IP地址2.理解源MAC地址和目的MAC地址3.端口号4.理解端口号和进程ID5.理解源端口号和目的端口号6.通过IP地址、端口号、协议号进行通信识别7.认识TCP协议和UDP协议8.网络字节序 1.套接字地址结构(sockaddr) 0.预备知识 1.理解源IP地址和目的…

安装配置Maven(idea里面配置)

放在这个路径下&#xff08;如果需要可以免费发给你&#xff0c;dd我就好了&#xff09; D:\IearnSoftware\maven\apache-maven-3.6.1-bin.zip&#xff08;我自己的路径下面&#xff0c;防止忘记&#xff09; 1.首先测试maven在不在&#xff0c;配置对不对 mvn -v 这样就是成…

SpringMVC进阶(数据格式化以及数据校验)

文章目录 1.数据格式化1.基本介绍1.基本说明2.环境搭建 2.基本数据类型和字符串转换1.需求分析2.环境搭建1.data_valid.jsp首页面2.Monster.java封装请求信息3.MonsterHandler.java处理请求信息4.monster_addUI.jsp添加妖怪界面5.单元测试 3.保存妖怪信息1.MonsterHandler.java…

【软件开发规范篇】Git分支使用规范

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

windows驱动开发-中断(一)

中断是windows中最难的一部分&#xff0c;这是因为中断本身属于操作系统的一部分&#xff0c;理解了中断和内存&#xff0c;对整个系统也就了解了。 中断部分会先从中断优先级、中断处理、中断服务例程入手&#xff0c;大概讲述一下中断的概念&#xff1b;接着从中断的一般实现…

springboot 集成 activemq

文章目录 一&#xff1a;说明二&#xff1a;e-car项目配置1 引入activemq依赖2 application启动类配置消息监听3 application.yml配置4 MQConfig.java 配置类5 ecar 项目中的监听6 junit 发送消息 三&#xff1a;tcm-chatgpt项目配置5 MQListener.java 监听消息 三 测试启动act…

Docker② —— Cgroups详解

1. 概述 Cgroups 的全称是control groups&#xff0c;cgroups为每种可以控制的资源定义了一个子系统。Cgroups分为三个部分&#xff1a; cgroup 本身&#xff1a;对进程进行分组hierarchy&#xff1a;将 cgroup 形成树形结构subsystem&#xff1a;真正起到限制作用的部组件 cp…

【vscode】2024最新!vscode云端配置同步方案:code settings sync

小tian最近对电脑进行了系统重装&#xff0c;结果vscode相关配置和插件都没有保存记录&#xff0c;还好公司电脑里还有。痛定思痛&#xff0c;决定写一篇vscode云端同步配置方案&#xff0c;以作记录和分享~ 步骤一&#xff1a;安装vscode插件&#xff1a;code settings sync …

云贝餐饮连锁V2-2.9.9源码

云贝餐饮连锁V2独立版、版本更新至2.9.9&#xff0c;小程序、公众号版本&#xff0c;全插件&#xff0c;公众号小程序端&#xff0c;独立版&#xff1b; 带商家端&#xff0c;修复收银台、排队点餐、堂食点餐&#xff1b;最新版更新 搭建环境教程: 系统环境&#xff1a;CentO…

【04】JAVASE-循环语句【从零开始学JAVA】

Java零基础系列课程-JavaSE基础篇 Lecture&#xff1a;波哥 Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。…

算法学习笔记Day9——动态规划基础篇

一、介绍 本文解决几个问题&#xff1a;动态规划是什么&#xff1f;解决动态规划问题有什么技巧&#xff1f;如何学习动态规划&#xff1f; 1. 动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法&#xff0c;只不过在计算机问题上应用比较多&#xff…

微信小程序小游戏开发,微信开发者工具提示该目录下的项目(wxapp2)已在工具中创建,怎么办

微信小程序小游戏开发&#xff0c;微信开发者工具提示该目录下的项目&#xff08;wxapp2&#xff09;已在工具中创建&#xff0c;怎么办 情况描述&#xff0c; 导入一个项目的时候&#xff0c;导入成了小游戏项目了 想换成小游戏项目&#xff0c;变不了了&#xff0c;提示 “…

未来已来:解锁AGI的无限潜能与挑战

未来已来&#xff1a;解锁AGI的无限潜能与挑战 引言 假设你有一天醒来&#xff0c;发现你的智能手机不仅提醒你今天的日程&#xff0c;还把你昨晚做的那个奇怪的梦解释了一番&#xff0c;并建议你可能需要减少咖啡摄入量——这不是科幻电影的情节&#xff0c;而是人工通用智能…

解决Milvus官网提供的单机版docker容器无法启动,以及其它容器进程与Milvus容器通信实现方案【Milvus】【pymilvus】【Docker】

文章目录 问题预备知识方案获取pymilvus获取milvus 实例多容器通信 问题 我的需求是做混合检索单机版可以满足&#xff0c;要走Docker容器部署&#xff0c;还需要和另一个容器中的程序做通信。官方文档提供的Milvus安装启动Milvus方案&#xff0c;见文档&#xff1a;传送门 我…

wlan二层直连组网实验(ensp)

目录 1. VLAN 端口类型及参数设计2. IP 地址规划3. WLAN数据规划(1) DHCP服务器配置(2) AC 源接口地址、认证方式配置(3) AP 组的创建(4) 创建域管理模板、国家码认证(5) 创建安全模板(6) 创建SSID模板(7) 创建VAP模板(8) AP组绑定模板(9) 查看&#xff1a; 1. VLAN 端口类型及…

以太网LAN双向透明传输CH9120透传芯片实现以太网转232串口转485转TTL串口

网络串口透传芯片 CH9120 1、概述 CH9120 是一款网络串口透传芯片。CH9120 内部集成 TCP/IP 协议栈&#xff0c;可实现网络数据包和串口数据的双向透明传输&#xff0c;具有 TCP CLIENT、TCP SERVER、UDP CLIENT 、UDP SERVER 4 种工作模式&#xff0c;串口波特率最高可支持到…
最新文章