PotatoPie 4.0 实验教程(26) —— FPGA实现摄像头图像拉普拉斯锐化

为什么要对图像进行拉普拉斯锐化

对图像进行拉普拉斯锐化的目的是增强图像的边缘和细节,使图像看起来更加清晰和锐利。这种技术常用于图像处理中,具体原因如下:

  1. 增强图像的边缘信息:拉普拉斯锐化可以突出图像中的边缘特征,使得边缘更加清晰和突出。它通过对图像进行高通滤波来增强高频信息,从而使得图像中的边缘更加明显。

  2. 提高图像的对比度:拉普拉斯锐化可以增强图像的对比度,使得图像中的灰度变化更加明显。这有助于改善图像的视觉效果,使得图像更加生动和逼真。

  3. 减少图像模糊:拉普拉斯锐化可以减少图像的模糊效果,使得图像看起来更加清晰和细致。它可以去除图像中的低频成分,从而提高图像的清晰度。

  4. 增强图像的细节:拉普拉斯锐化可以增强图像中的细节信息,使得图像中的纹理和细微的特征更加明显。这对于图像分析、目标检测和识别等任务非常有帮助。

  5. 图像预处理:拉普拉斯锐化通常作为图像预处理的一部分,用于改善后续图像处理算法的性能和准确性。例如,在图像识别、目标跟踪和计算机视觉任务中,对图像进行拉普拉斯锐化可以提高算法的鲁棒性和准确率。

总的来说,拉普拉斯锐化是一种常用的图像增强技术,可以提高图像的质量和可用性,使得图像在各种应用领域中都能取得更好的效果。

拉普拉斯锐化算法步骤

图像的拉普拉斯锐化是根据图像每个像素领域内的像素到该像素的突变程度来计算的,计算的是图像像素的变化程度。我们知道,一阶微分函数描述了函数图像是朝哪个方向变化的,或增长或降低。二阶微分函数描述的则是图像变化的速度,是急剧增长(下降)还是平缓的增长(下降)。根据上述的描述,可以知道二阶微分可以得到图像色彩的过渡程度,比如白色与黑色的过渡。

换句话说,当邻域中心像素灰度低于它所在的领域内其它像素的平均灰度时,此中心像素的灰度应被进一步降低;当邻域中心像素灰度高于它所在的邻域内其它像素的平均灰度时,此中心像素的灰度应被进一步提高,以此实现图像的锐化处理

对于3×3的拉普拉斯锐化算子,一个常见的模板如下:

0 -1 0
-1 4 -1
0 -1 0

这个3×3的模板是最常用的拉普拉斯锐化算子之一,中心像素的权重是4,周围的4个像素的权重是-1。这个模板可以突出图像中的边缘和细节,增强图像的锐度。这个卷积核涵盖了图像周围的8个像素,包括水平、垂直和对角方向。通过应用这个卷积核,可以突出图像中的边缘和纹理特征,实现图像的增强和锐化处理。

该卷积核对图像进行二阶微分运算,突出了图像中灰度的快速变化,从而增强了图像的边缘和细节。在卷积之后,可以将得到的图像与原始图像相加,或者将得到的图像与原始图像进行混合,以实现拉普拉斯锐化效果。拉普拉斯锐化可以使图像的边缘更加清晰,细节更加突出,但如果处理不当,可能会导致图像中出现噪点或者增强图像中的噪点。因此,在应用拉普拉斯锐化技术时,需要谨慎调整参数,以获得最佳的图像增强效果。

我们FPGA工程中使用的算子是

0 -1 0
-1 5 -1
0 -1 0

为了使边缘更加锐利,我们将拉普拉斯滤波器的中心值从4更改为5时。这会导致输出图像边缘的增强效果更明显,因为增加中心像素的权重,使其对输出像素的贡献更大,但也可能导致图像中的噪声被放大。

当应用拉普拉斯锐化算法时,通常需要以下步骤:

  1. 图像平滑化:首先,应用高斯滤波器或其他平滑滤波器对原始图像进行平滑化处理。平滑化可以减少图像中的噪声,并有助于提取图像的细节。

  2. 计算拉普拉斯算子:接下来,通过应用预定义的拉普拉斯算子(也称为拉普拉斯核)来计算图像的拉普拉斯变换。这个算子可以突出图像中的边缘和细节,通过检测像素值的变化来增强图像的锐度。

  3. 图像叠加:将原始图像与拉普拉斯变换的结果进行叠加,以增强图像的边缘和细节。这通常是通过将原始图像的像素值与拉普拉斯变换的像素值相加来实现的。这个过程可以突出图像中的边缘和细节,使图像看起来更加清晰和锐利。

  4. 调整亮度:由于拉普拉斯变换可能导致图像的像素值超出了合适的范围,因此在叠加后的图像中可能会出现亮度失真。为了解决这个问题,通常需要对图像的亮度进行调整,以确保像素值在合适的范围内。这可以通过灰度拉伸或直方图均衡等技术来实现。

  5. 结果输出:最后,处理后的图像可以保存为图像文件或直接显示在屏幕上,以供后续分析或应用。这样处理后的图像通常具有更好的边缘和细节,看起来更加清晰和锐利,适用于各种计算机视觉应用。​​​​​​​

pyton代码实现上述过程

python代码如下:

PotatoPie 4.0 实验教程(26) —— FPGA实现摄像头图像拉普拉斯锐化-Anlogic-安路论坛-FPGA CPLD-ChipDebug

在这个示例中,首先读取彩色图像,然后将其转换为灰度图像。然后,对灰度图像应用拉普拉斯算子得到锐化后的灰度图像。对于彩色图像,分别对其三个通道应用拉普拉斯算子,然后将结果合并成彩色图像。最后,显示原始图像、灰度图像、锐化后的灰度图像和锐化后的彩色图像。

matlab实现图像拉普拉斯锐化

PotatoPie 4.0 实验教程(26) —— FPGA实现摄像头图像拉普拉斯锐化-Anlogic-安路论坛-FPGA CPLD-ChipDebug

这段 MATLAB 代码实现了图像的锐化功能,具体功能说明如下:

  1. img_sharpen 函数定义了整个处理过程,包括读取彩色图像、转换为灰度图像、应用拉普拉斯算子进行图像锐化,并显示原始图像、灰度图像和锐化后的图像。

  2. 获取当前脚本所在目录,以便读取图像文件。

  3. 读取彩色图像 Lena.jpg

  4. 使用 rgb2gray 函数将彩色图像转换为灰度图像。

  5. 定义拉普拉斯锐化算子 laplacian_kernel,用于图像锐化。

  6. 对灰度图像应用拉普拉斯算子,使用 imfilter 函数进行卷积运算,得到锐化后的灰度图像 sharpened_gray_image

  7. 对彩色图像的每个通道分别应用拉普拉斯算子,同样使用 imfilter 函数,得到锐化后的彩色图像 sharpened_color_image

  8. 分别显示原始图像、灰度图像和锐化后的图像,使用 imshow 函数,并设置标题。

通过这段代码,可以清晰地展示图像的锐化效果,有助于突出图像中的细节和边缘特征。

FPGA工程分析

工程层次图

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

img_laplacian_fltr
(
  .i_clk(clk_pixel),
  .i_rst_n(sys_rst_n),
  .i_hs(VGA_HS),
  .i_vs(VGA_VS),
  .i_en(VGA_DE),
  .i_r(VGA_RGB[23:16]),
  .i_g(VGA_RGB[15:8] ),
  .i_b(VGA_RGB[7:0]  ),            
  .o_hs(laplacian_hs),
  .o_vs(laplacian_vs),
  .o_en(laplacian_de),   
  .o_r(laplacian_data[23:16]),
  .o_g(laplacian_data[15:8] ),
  .o_b(laplacian_data[7:0]  )
);

img_laplacian_fltr模块代码分析

考虑到FPGA示例的简洁性,我们的FPGA示例工程仅进行第二步计算拉普拉斯算子处理后便显示,不做与彩色原图的合并处理。

img_laplacian_fltr  img_buf fifo_3line这三个代码模块相互关联,构成了一个图像 Laplacian 滤波器。这里的三个模块的作用分别是:

  1. fifo_3line模块:FIFO 内存队列生成器,用于数据的存储和读取。
  2. img_buf 模块:用上面的FIFO模块构成行缓存,让图像的像素按3*3进输。
  1. img_laplacian_fltr 模块:图像 Laplacian 滤波器模块,对输入图像进行 Laplacian 滤波处理。

img_laplacian_fltr模块里面分别对RGB三个通道进行了拉普拉斯算子的模版运算,并处理了对行场信号进行延时以实现与数据同步。模块主以下几步:

  1. 首先用 img_buf实现图像的行缓存,R、G、B的每个通道经过缓存之后由原来的每个时钟一个像素变成了每个时钟9个像素,也就是每个时钟输出一个3*3的像素。
  2. 对每个通首3*3的像素值先进行加法运算然后再进行减法运算(上面的拉普拉斯算子只有这两种运算),最后求和(verilog代码的注释对计算过程以及计算优化作了详细说明,请参见代码)。
  3. 对求出来的和进行输出范围限定,避免计算出来的值下溢超过0或上溢超过255。
  4. 同前面的例程一样,需要将行场信号和数据同步,因此将行场信号打一拍。

算法的核心:

0 -1 0
-1 5 -1
0 -1 0

展开就是:

0*pixel11      -1*pixel12       0*piexe13

-1*pixel21      5*pixel22       -1*piexl23

0*pixel31      -1*pixel32       0*pixel33

前面讲过img_buf 会把图像进行缓存,然后每次输出这三行的三列,也就是3*3个像素。上式中pixel11表示第一行一列的像素,同理pixe32表示第三行的第二个像素。

算法的实现及优化详见verilog代码及其注释。

管脚约束

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

时序约束

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

实验结果图

原图

锐化处理后边界是增强了,但噪点也增加了

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

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

相关文章

Spring AOP(1)

AOP概述 AOP是Spring框架的第二大核心(第一大核心是IoC). 什么是AOP? 即Aspect Oriented Programming(面向切面编程) 什么是面向切面编程呢? 切面就是指某一类特定的问题, 所以AOP也可以叫做面向特定方法编程. 什么是面向特定方法编程呢?比如上一篇中讲到的拦截器, 就是…

windows无法启动Remote Desktop Services服务(位于本地计算机上) 错误2:系统找不到指定文件

在使用远程计算机时出现的错误,计算机在后台能正常打开,而无法使用远程连接,初步判定为远程服务问题,检查步骤如下: 一、检查计算机Remote Desktop Services服务 该服务是开启计算机远程时必要的服务,若该…

2024 年最好的免费数据恢复软件,您可以尝试的几个数据恢复软件

由于系统崩溃而丢失数据可能会给用户带来麻烦。我们将重要的宝贵数据和个人数据保存在我们的 PC、笔记本电脑和其他数字设备上。您可能会因分区丢失、意外删除文件和文件夹、格式化硬盘驱动器而丢失数据。数据丢失是不幸的,如果您不小心从系统中删除了文件或数据&am…

Vue3+Vite开发的项目进行加密打包

本文主要介绍Vue3+Vite开发的项目如何进行加密打包。 目录 一、vite简介二、混淆工具三、使用方法1. 安装插件:2. 配置插件:3. 运行构建:4. 自定义混淆选项:5. 排除文件:下面是Vue 3+Vite开发的项目进行加密打包的方法。 一、vite简介 Vite 是一个由 Evan You 创造的现代…

【Linux】进程信号 -- 详解

⚪前言 注意:进程间通信中的信号量跟下面要讲的信号没有任何关系。 一、从不同角度理解信号 1、生活角度的信号 你在网上买了很多件商品,在等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临时,你该怎么处理快递&a…

Java设计模式 _结构型模式_桥接模式

一、桥接模式 1、桥接模式 桥接模式(Bridge Pattern)是一种结构型设计模式。用于把一个类中多个维度的抽象化与实现化解耦,使得二者可以独立变化。 2、实现思路 使用桥接模式,一定要找到这个类中两个变化的维度:如支…

基于Spring Boot的旅游管理系统设计与实现

基于Spring Boot的旅游管理系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 前台浏览管理界面图,通过内容列表可以获取网…

Git--多人协作

目录 一、多人协作一二、多人协作二三、 远程分⽀删除后,本地git branch -a依然能看到的解决办法 一、多人协作一 ⽬前,我们所完成的⼯作如下: 1.基本完成Git的所有本地库的相关操作,git基本操作,分⽀理解,…

适用于芯片行业的开发及管理工具:版本控制、持续集成、代码分析及项目管理工具介绍

3月28日-29日,2024国际集成电路展览会暨研讨会(IIC Shanghai)在上海成功举行。此次盛会汇聚了集成电路产业的众多领军企业,共同探寻和把握集成电路产业的发展脉络。 龙智携芯片研发及管理解决方案亮相展会,展示如何通…

遥感雷达波段的原理及应用

雷达波段是不同波长的组。每一种都有其独特的穿透地球表面的能力。它们还可以揭示环境的不同方面。 雷达频段在电磁频谱内具有特定的频率范围。这些波段由 L-、S-、C- 和 X-波段等字母表示。稍后会详细介绍这一点。 什么是合成孔径雷达? 合成孔径雷达 (SAR) 是一…

云原生Kubernetes: K8S 1.29版本 部署GitLab

目录 一、实验 1.环境 2.搭建NFS 3.K8S 1.29版本 部署Redis 4.K8S 1.29版本 部署Postgresql 5.K8S 1.29版本 部署GitLab 6.K8S 部署istio微服务 7.K8S 部署ingress应用路由 二、问题 1.K8S部署gitlab报错 2.gitlab创建失败 3.生成网关资源报错 4.安装istio 报错 …

PotatoPie 4.0 实验教程(30) —— FPGA实现摄像头图像中值滤波

中值滤波是什么? 图像的中值滤波是一种非线性图像滤波方法,它用于去除图像中的椒盐噪声或其他类型的噪声。中值滤波的原理是用每个像素周围的邻域中的中值来替代该像素的值。与均值滤波不同,中值滤波不会受到极端值的影响,因此在处…

FebHost:摩洛哥.ma域名注册介绍,规则有哪些?

摩洛哥国家域名介绍 摩洛哥是位于非洲西北部的一个国家,北部和西部面向地中海和大西洋,东部和南部则与阿尔及利亚、西撒哈拉和毛里塔尼亚接壤。摩洛哥的首都是拉巴特,但最大城市是卡萨布兰卡。摩洛哥的官方语言是阿拉伯语和柏柏尔语&#xf…

BTCOIN发布WEB3.0论坛:生态与金融的双重叙事热点驱动自由创新意识

在数字时代,信息的自由流动和透明度是推动经济发展和社会进步的关键。尤其在加密货币和区块链领域,这一点尤为重要。BTCOIN的最新创举——一个基于WEB3.0理念的信息论坛,不仅标志着信息传递自由化的新篇章,也为数字货币市场的信息…

聊聊.NET Core处理全局异常有那些方法

简述 处理全局异常的方法有IExceptionFilter(异常处理),使用中间件异常处理,使用框架自带异常中间件等。考点 考察对异常处理方式的熟悉程度和广度,以及对中间件、过滤器熟练程度。 下面分别具体介绍三种处理异常的…

让华为设备跟上自动化的步伐,学会Python配置NETCONF,运维不再难!

在当今数字化时代,网络设备的自动化管理已经成为了不可或缺的趋势。对于华为设备的运维人员来说,学会利用Python配置NETCONF已经成为提高工作效率、降低运维成本的必备技能。本文将介绍如何利用Python和NETCONF来实现华为设备的自动化配置,让…

浅谈大数据时代下的电商风控||电商数据API接口

抢抢抢!最后1天,双十一直播活动来啦!抢直播专属优惠…… 视频号 随着大数据时代的兴起,互联网电商风控已经从无风控、人工抽取规则为主的简易规则模型发展到当前基于大数据的风控。与金融风控不同,互联网电商风控呈现出…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-3

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

红米K40手机刷机详解

了解什么是卡刷、什么是线刷 卡刷,就是把系统包放到你手机的SD卡,这一步,不用手机解BL锁,不用root,直接小米助手下载就可以刷。线刷就是用数据线连接电脑,通过XiaoMiFlash直接刷到手机,这一步权…

K8S深度解析:从入门到精通的全方位指南

目录 一、Kubernetes简介 二、Kubernetes的核心作用 三、Kubernetes架构图例 四、Kubernetes核心概念 Harbor仓库概述: Master----管理组件: API Server(集群之心): Scheduler(调度大师&…
最新文章