PotatoPie 4.0 实验教程(24) —— FPGA实现摄像头图像中心差分变换

news/2024/10/21 7:28:34/

为什么要对图像进行中心差分变换?

对图像进行中心差分变换的主要目的是计算图像中每个像素点的梯度。梯度在图像处理中是一个非常重要的概念,它可以用来描述图像中灰度变化的快慢和方向,常用于边缘检测、特征提取和图像增强等任务中。

具体来说,中心差分变换有以下几个作用:

  1. 边缘检测:梯度可以帮助我们找到图像中的边缘,因为在边缘处像素的灰度值通常会发生较大的变化。通过计算梯度,我们可以找到这些变化较大的区域,从而实现边缘检测。

  2. 特征提取:梯度可以用来提取图像中的一些重要特征,例如角点和边缘点。这些特征在图像匹配和目标识别等任务中非常有用。

  3. 图像增强:梯度可以用来增强图像的对比度和细节。通过计算梯度,我们可以调整图像的灰度级,使得图像中的细节更加清晰。

  4. 图像去噪:梯度可以帮助我们去除图像中的噪声。由于噪声通常会导致像素值的随机变化,因此在梯度计算中可以将这些随机变化过滤掉,从而实现去噪效果。

综上所述,通过对图像进行中心差分变换,我们可以获得图像中每个像素点的梯度信息,从而实现边缘检测、特征提取、图像增强和图像去噪等各种图像处理任务。

图像中心差分变换的算法

中心差分图像的计算公式是通过当前像素的后一像素和前一像素的差值除以2来得到的。具体公式如下所示:

 I(x) = (I(x+1) - I(x-1)) / 2 ​

其中,I(x)  表示图像的像素值,x 表示当前像素的位置。I(x+1)表示后一像素值,I(x-1))表示前一像素值,这个公式描述了图像中每个像素的变化情况,可以用来分析图像的梯度或边缘信息。

中心差分图像的应用非常广泛,包括视频压缩、生物医学诊断、天文学、遥感、人脸识别等领域。

python实现图像的领域中心差分算法

PotatoPie 4.0 实验教程(24) —— FPGA实现摄像头图像中心差分变换-Anlogic-安路论坛-FPGA CPLD-ChipDebug

这段代码使用了 OpenCV 库和 NumPy 库来实现图像的中心差分变换。首先,它定义了一个 central_difference 函数,该函数接受一个灰度图像作为输入,并返回中心差分后的图像。然后,它读取了一张彩色图像,将其转换为灰度图像,并应用了中心差分算法。最后,它将原始图像、灰度图像和中心差分后的图像水平叠加,并添加了标题,最终显示出来。

matlab实现图像的领域中心差分算法

PotatoPie 4.0 实验教程(24) —— FPGA实现摄像头图像中心差分变换-Anlogic-安路论坛-FPGA CPLD-ChipDebug

这个 MATLAB 代码实现了对彩色图像应用中心差分算法,并将结果与原始彩色图像和灰度图像进行水平叠加,显示合并后的图像。下面是每个函数的功能说明:

  • img_central_diff: 主函数,用于读取彩色图像,将其转换为灰度图像,并应用中心差分算法。然后将原始彩色图像、灰度图像和差分图像水平叠加,并添加标题,最后显示合并后的图像。

  • central_difference: 辅助函数,接受一个灰度图像作为输入,并应用中心差分算法来计算每个像素的差分值。然后将结果取绝对值并转换为 uint8 类型,最后返回差分图像。

上面的代码可以看到合并后的灰度图太黑了,几乎看不到,要解决图像太黑的问题,可以考虑调整灰度图像和差分图像的亮度范围,使它们更接近彩色图像的亮度范围。这可以通过线性拉伸或直方图均衡化来实现。为了教程和简洁性在FPGA中我们不组合这些步骤。

下面是对代码的修改,其中使用了直方图均衡化来调整灰度图像和差分图像的亮度范围:

PotatoPie 4.0 实验教程(24) —— FPGA实现摄像头图像中心差分变换-Anlogic-安路论坛-FPGA CPLD-ChipDebug

调整后的图像如下

FPGA工程解析

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

代码解析

核心算法就这一段,这一段代码中以红色分量为例i_r_d是前一周期的像素值,i_r为当前像素值,二者相减,然后右移一位即为除以2。

PotatoPie 4.0 实验教程(24) —— FPGA实现摄像头图像中心差分变换-Anlogic-安路论坛-FPGA CPLD-ChipDebug

其它请参考代码中的详细注释。

管脚约束

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

时序约束

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

实验结果

像机噪点有点多呃。


http://www.ppmy.cn/news/1442239.html

相关文章

HTTP与HTTPS 对比,区别详解(2024-04-25)

一、简介 HTTP(超文本传输协议,Hypertext Transfer Protocol)是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上,通常使用端口 80。 HTTPS&#xf…

element -ui 横向时间轴,时间轴悬浮对应日期

效果&#xff1a; <el-tabs v-model"activeName" type"card" tab-click"handleClick"><el-tab-pane label"周期性巡视" name"zqxxs" key"zqxxs" class"scrollable-tab-pane"><div v-if…

JavaScript底层原理(栈、堆、主线程、任务队列、事件循环机制)

1. 栈(heap)和堆(stack) 栈是栈内存的简称&#xff0c;堆是堆内存的简称。顾名思义&#xff0c;内存是干啥的&#xff1f;内存就是用来存放数据的。 栈 栈只有一个入口&#xff0c;同时也是出口&#xff0c;数据遵循先进后出、后进先出的原则。 栈用于存放基本类型数据和引用…

ROS 2边学边练(34)-- 写一个广播(C++)

前言 上一篇我们体验了一下静态广播的例子流程&#xff0c;通过命令行方式传入所需的6D参数&#xff08;死数据称之为静态&#xff09;并广播给tf2系统&#xff0c;实际使用中&#xff0c;这些参数可是实打实实时生成的&#xff0c;所以需要动态处理这些实时数据&#xff0c;本…

【Docker】docker部署lnmp和wordpress网站

环境准备 docker&#xff1a;192.168.67.30 虚拟机&#xff1a;4核4G systemctl stop firewalld systemctl disable firewalld setenforce 0 安装docker #安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2 #设置阿里云镜像 yum-config-manager --add…

Python爬虫--用户代理IP池

前面一篇讲了用户 UA 代理池&#xff0c;现在这篇来讲下 IP 代理&#xff0c; 相对于 UA 来说&#xff0c;IP 更容易被封&#xff0c; 这里讲两种方法。 方法一&#xff1a;本地ip池 方法一 就是将 IP 拿下来本地&#xff0c;然后通过随机选取或者其他来调用 这就跟之前使用…

go 安装软件报go.mod file not found

执行 go get -u github.com/go-sql-driver/mysql 下载mysql 报错 解决方法: 控制台&#xff1a;输入go env 返回如下&#xff1a; 红圈值为NUL&#xff0c;需要设置GOMOD的值, 然后再控制台执行 &#xff08;1&#xff09;mkdir mod (2)go mod init mod 然后再执行下载&…

【C语言】编译与链接

1.翻译环境与运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 1.翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令&#xff08;二进制指令&#xff09; 2.执行环境&#xff0c;它用于实际执行代码 2.翻译环境 那么翻译环境是怎么将源代码…