SOBEL图像边缘检测器的设计

本项目使用FPGA设计出SOBEL图像边缘检测器,通过分析项目在使用过程中的工作原理和相关软硬件设计进行分析详细介绍SOBEL图像边缘检测器的设计。

资料获取可联系wechat 号:comprehensivable

边缘可定义为图像中灰度发生急剧变化的区域边界,它是图像最基本的特征。边缘检测主要就是(图像的)灰度变化的度量、检测和定位,它是图像分析和模式识别的主要特征提取手段,它在计算机视觉、图像分析等应用中起着重要的作用,是图像分析与处理中研究的热点问题。在过去的20年里产生了许多边缘检测器,而Sobel算法只涉及加法操作,但却可以得到很好的划分效果,因而是图像处理系统中最常用的边缘检测算法

Sobel算法包括带4个3×3掩码的输入图像数据,即Sobel算子,它设置权重来检测水平、垂直、左对角、右对角各个不同方向上密度幅度的不同。这个过程通常被称为过滤。我们来看像素窗口(3×3),如图2所示。水平、垂直、左对角、右对角各图像方向上密度幅度的变化可以用如下算子进行计算:

H=(Q0+2Q3+Q6)-(Q2+2Q5+Q8);V=(Q0+2Q1+Q2)-(Q6+2Q7+Q8);

DR=(Q1+2Q0+Q3)-(Q5+2Q8+Q7);DL=(Q1+2Q2+Q5)-(Q3+2Q6+Q7);

H,V,DL,DR这四个参数用于计算梯度大小和方向。

对梯度大小的一个普遍估计值为:Magnitude=Max(H,V,DR,DL)

H=(Q0+2Q3+Q6)-(Q2+2Q5+Q8);V=(Q0+2Q1+Q2)-(Q6+2Q7+Q8);

DR=(Q1+2Q0+Q3)-(Q5+2Q8+Q7);DL=(Q1+2Q2+Q5)-(Q3+2Q6+Q7);

Q0Q3Q6
Q1[i,j]Q7
Q2Q5Q8

H,V,DL,DR这四个参数用于计算梯度大小和方向。                

我们通过对图像灰度作直方图分析后,便可以给出区分度阀值

Threshold,区分度阀值往往要借助一定的经验并需要反复调整。如果Magnitude大于Threshold,则该像素被声明为边界像素,否则为一般像素。

本课题就是要求使用LPM兆功能块设计和VHDL程序设计相结合的方式或全部采用VHDL程序设计方式,用FPGA/CPLD实现Sobel算法。


图1.1为一个DSP+FPGA/CPLD的图像处理系统的总体框图,本课题就是设计图中的图像边缘检测协处理器,并且能够绘画出图形边缘如图1.2所示;

图1.1  DSP+FPGA /CPLD 图像处理系统的组成框图

图1.2  实验效果


由于Sobel算法只涉及加法操作,但却可以得到很好的划分效果,因而是图像处理系统中最常用的边缘检测算法。

Sobel算法包括带4个3×3掩码的输入图像数据,即Sobel算子:

H=(Q0+2Q3+Q6)-(Q2+2Q5+Q8);

V=(Q0+2Q1+Q2)-(Q6+2Q7+Q8);

DR=(Q1+2Q0+Q3)-(Q5+2Q8+Q7);

DL=(Q1+2Q2+Q5)-(Q3+2Q6+Q7);

H,V,DL,DR这四个参数用于计算 水平、垂直、左对角、右对角各个不同方向的梯度大小和方向(该过程称之为过滤)。

梯度大小的估计公式:Magnitude=Max(H,V,DR,DL)。

边缘的判定:如果Magnitude>Threshold,则该像素为边界像素,否则为一般像素。处理像素端见图1.3所示;

Sobel的滤波函数为:

H=(Q0+2Q3+Q6)-(Q2+2Q5+Q8);

V=(Q0+2Q1+Q2)-(Q6+2Q7+Q8);

DR=(Q1+2Q0+Q3)-(Q5+2Q8+Q7);

DL=(Q1+2Q2+Q5)-(Q3+2Q6+Q7);

Magnitude=Max(H,V,DR,DL)

为了减少设计的复杂度,可将Sobel的滤波函数中的乘法运算可以改写成加法运算:

H=(Q0+Q3+Q3+Q6)-(Q2+Q5+Q5+Q8);

V=(Q0+Q1+Q1+Q2)-(Q6+Q7+Q7+Q8);

DR=(Q1+Q0+Q0+Q3)-(Q5+Q8+Q8+Q7);

DL=(Q1+Q2+Q2+Q5)-(Q3+Q6+Q6+Q7);

对于数据的处理,我们估算一下分别使用单片机、DSP、CPLD/FPGA所需的时间。

(1)如果使用12M的单片机:完成一次Sobel滤波操作需要的时间至少为:(24×2+20+2×3+2)×1us=72us。对于一幅600×800像素的图像,总共的时间为:600×800×72us=32s。

(2)若使用40M六级流水的DSP,他们的处理时间大概为 32s/24=1.4s。

(3)如果使用CPLD/FPGA进行自行设计,通过采用并行流水线技术假设使用50M的系统时钟,处理完一个像素点的时间为 4×1/(50M)=80ns,处理完一帧图像的时间为 800×600×80ns=38.4ms,结果处理速度比DSP高了大约两个数量级,从上可以看出,使用CPLD/FPGA进行自行设计有关图像处理模块,对整个系统速度的改善是很非常明显的。


通过使用VHDL代码设计出对应的模块,以下为部分RTL图; 

UPDATE的RTL图 

读取的RTL图 

由于本次实验要求只需要在软件上显示图像并且进行边缘化即可,无需在硬件在显示出像素的数据,整体RTL图见图4.1所示,主要包括俩个模块,即SOBEL算法的部分和数据输出的部分,在SOBEL算法内部又包括了许多的模块,从而达到我们需要设计的目的。

编译完成后调用ALTERA-MODELSIM仿真如下图4.4所示;

 图4.4 调用ALTERA-MODELSIM仿真

总结:

对SOBEL算法有了初步的了解,并且本次SOBEL算法对图形边缘检测能够很好的应用,对嵌入式的功能有了更多的知晓,也明白VHDL语言的强大之处;

本次实验网上资料较多,要求使用matalab软件和EDA仿真等软件配合使用,在网络上寻找相关资料并且去深入了解,对于我的自学能力有了进一步的提高。

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

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

相关文章

linux中find命令和exec的强大组合用法

如何将 find 命令与 exec 一起使用 Find 是一个已经非常强大的命令,用于根据许多条件搜索文件。exec 命令使您能够处理 find 命令的结果。 我在这里分享的例子只是一瞥。find-exec 命令组合在一起为您提供了在 Linux 命令行中执行操作的无限可能。 find 和 exec 命令…

Llama 3 模型微调的步骤

环境准备 操作系统:Ubuntu 22.04.5 LTS Anaconda3:Miniconda3-latest-Linux-x86_64 GPU: NVIDIA GeForce RTX 4090 24GStep 1. 准备conda环境 创建一个新的conda环境: conda create --name llama_factory python3.11激活刚刚创…

[每周一更]-(第103期):GIT初始化子模块

文章目录 初始化和更新所有子模块分步骤操作1. 克隆包含子模块的仓库2. 初始化子模块3. 更新子模块 查看子模块状态提交子模块的更改处理子模块路径错误的问题 该问题的缘由是因为:在写某些代码的时候,仓库中有些文件夹,只提交了文件夹名称到…

Spring Boot中的依赖注入详解

Spring Boot中的依赖注入详解 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在今天的文章中,我们将深入探讨Spring Boot中的依赖注入(D…

EasyExcel 导出批注信息以及背景色

1. 批注信息 package com.xxx.demo;import lombok.Getter; import org.apache.poi.ss.usermodel.IndexedColors;/*** This class represents the comment information associated with a specific cell in an Excel sheet.* The columnIndex field specifies the column numbe…

react中自定义上传文件的hook

react中自定义上传文件的hook 在React中,你可以创建自定义Hook来处理文件上传的逻辑。自定义Hook允许你将组件逻辑提取到可重用的函数中,这样你就可以在不同的组件之间共享这些逻辑。 以下是一个简单的示例,展示了如何创建一个用于文件上传…

[GIS]WPS地理处理服务

在GeoServer中,WPS(Web Processing Service)是一个用于执行地理空间数据处理的规范。WPS服务允许用户提交地理处理请求,这些请求由服务器上的地理处理过程(GeoProcessing Process)执行,并返回结…

时常在面试中被问到的多线程问题:下篇

文章目录 线程和线程池有什么区别?线程池 (ThreadPool)区别 如何创建线程池?1. 固定大小线程池 (Fixed Thread Pool)2. 可缓存线程池 (Cached Thread Pool)3. 单线程线程池 (Single Thread Pool)4. 定时线程池 (Scheduled Thread Pool) 推荐使用哪种方式…

【贪心】个人练习-Leetcode-2271. Maximum White Tiles Covered by a Carpet

题目链接:https://leetcode.cn/problems/maximum-white-tiles-covered-by-a-carpet/description/ 题目大意:给定一个左右区间序列tiles[][],每个元素代表这个区间被瓷砖覆盖(左右都是闭合的)。给定一块毯子&#xff0…

使用 Ubuntu x86_64 平台交叉编译适用于 Linux aarch64(arm64) 平台的 QT5(包含OpenGL/WebEngine支持) 库

使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库 目录 使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库写在前面前期准备编译全流程1. 环境搭建2. 复制源码包并解压,创…

PrestaShop的目录结构详解

admin-dev:这个目录通常包含开发和测试PrestaShop后台时所需的脚本和配置文件。例如,它可能包含用于测试API的脚本或用于在开发过程中快速访问某些后台功能的快捷方式。 app:这个目录是PrestaShop的核心,包含了许多关键的组件。例…

解决HTTP 400 Bad Request错误的方法

解决HTTP 400 Bad Request错误的方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在进行网络通信时,HTTP 400 Bad Request错误是相对常见的问题…

在Mac上恢复丢失或未保存的Word文档的5种有效方法

“救命!我想在Mac上恢复丢失的Word文档。就在 1 小时前,我错误地删除了它们,并清空了垃圾桶。这些Word文档对我来说非常重要。我不知道如何恢复它们,谁能帮我?提前致谢! 没有什么比忘记保存 Word 文档或在…

3d模型里地毯的材质怎么赋予?---模大狮模型网

在进行3D建模时,赋予地毯逼真的材质是营造现实感和增强场景氛围的重要步骤。模大狮将介绍在常见的3D建模软件中,如何有效地为地毯赋予各种材质,以及一些实用的技巧和注意事项。 一、选择合适的地毯材质 在3D建模中,地毯的材质选择…

Spring Boot与WebFlux的实战案例

Spring Boot与WebFlux的实战案例 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将探讨如何利用Spring Boot和WebFlux构建响应式应用的实战…

MySQL之可扩展性(七)

可扩展性 通过集群扩展 理想的扩展方案时单一逻辑数据库能够存储尽可能多的数据,处理尽可能多的查询,并如期望的那样增长。许多人的第一想法就是建立一个"集群"或者"网格"来无缝处理这些事情,这样应用就无须去做太多工…

LangServe APIHandler:定制化LangChain REST API

LangServe,这一创新性的工具,专为简化LangChain对象及链的部署而生,将它们转化为REST API,从而赋能开发人员构建更为敏捷高效的应用。与FastAPI的深度融合以及Pydantic的精准数据验证,使得LangServe成为构建微服务的理…

K8S中的某个容器突然出现内存和CPU占用过高的情况解决办法

当K8S中的某个容器突然出现内存和CPU占用过高的情况时&#xff0c;可以采取以下步骤进行处理&#xff1a; 观察和分析&#xff1a; 使用kubectl top pods命令查看集群中各个Pod的CPU和内存占用情况&#xff0c;找出占用资源高的Pod。使用kubectl describe pod <pod-name>…

双向长短期记忆神经网络BiLSTM

先说一下LSTM LSTM 是一种特殊的 RNN&#xff0c;它通过引入门控机制来解决传统 RNN 的长期依赖问题。 LSTM 的结构包含以下几个关键组件&#xff1a; 输入门&#xff08;input gate&#xff09;&#xff1a;决定当前时间步的输入信息对细胞状态的影响程度。遗忘门&#xff…

C盘满了怎么办?用这方法彻底拯救你的C盘

C盘满了怎么办&#xff1f;用这方法彻底拯救你的C盘。我们的C盘是整个电脑运行的核心部分&#xff0c;里面装载了很重要的系统框架和数据&#xff0c;由于使用的时间越来越长&#xff0c;C盘也会积累很多的垃圾&#xff0c;这样就经常容易出现爆满的情况。 对于C盘爆满&#x…