图像sobel梯度详细计算过程_视频处理之Sobel【附源码】
边缘检测是检测图像中的一些像素点,它们周围的像素点的灰度发生了急剧的变化,我们认为在这过程中,图像中的物体不同导致了这一变化,因此可以将这些像素点作为一个集合,可以用来标注图像中不同物体的边界。边缘区域的灰度剖面可以看作是一个阶跃,即图像的灰度在一个很小的区域内变化到另一个相差十分明显的区域。边缘是图像中的重要的结构性特征,边缘往往存在于目标和背景之间,不同的区域之间,因此它可以作为图像分割的重要依据。在边缘检测中,它提取的是图像中不连续部分的特征,将闭合的边缘提取出来便可以作为一个区域。与区域划分相比,边缘检测不需要逐个的对像素进行比较,比较适合大图像的处理.
欲观原文,请君移步
图像边缘是图像最基本的特征,所谓边缘(Edge) 是指图像局部特性的不连续性。灰度或结构等信息的突变处称之为边缘。例如,灰度级的突变、颜色的突变,、纹理结构的突变等。这些突变会导致梯度很大。图像的梯度可以用一阶导数和二阶偏导数来求解。但是图像以矩阵的形式存储的,不能像数学理论中对直线或者曲线求导一样,对一幅图像的求导相当于对一个平面、曲面求导。对图像的操作,我们采用模板对原图像进行卷积运算,从而达到我们想要的效果。而获取一幅图像的梯度就转化为:模板(Roberts、Prewitt、Sobel、Lapacian算子)对原图像进行卷积。本文主要描述Sobel算子的实现原理和实现过程。
Sobel算子简介
Sobel算子 是一种用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导。该算子用于计算图像明暗程度近似值,根据图像边缘旁边明暗程度把该区域内超过某个数的特定点记为边缘。Sobel算子在Prewitt算子的基础上增加了权重的概念,认为相邻点的距离远近对当前像素点的影响是不同的,距离越近的像素点对应当前像素的影响越大,从而实现图像锐化并突出边缘轮廓。
Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息。因为Sobel算子结合了高斯平滑和微分求导(分化),因此结果会具有更多的抗噪性,当对精度要求不是很高时,Sobel算子是一种较为常用的边缘检测方法。Sobel算子的边缘定位更准确,常用于噪声较多、灰度渐变的图像。
Sober算法基础
其算法模板如下面的公式所示,其中dx表示水平方向,dy表示垂直方向。
![](/assets/blank.gif)
用数学公式表示如下
![](/assets/blank.gif)
![](/assets/blank.gif)
图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。
![](/assets/blank.gif)
FPGA实现
硬件框图如下
如下图所示,首先需要缓存两行图像用于计算(第三行可以用寄存器存储一个像素即可计算)。
然后加入sobel算子模块将所得到的9个像素按照sobel算子进行运算。
接着把输出的Gx和Gy做平方,所以需要一个乘法器模块。
然后将Gx,Gy和Gxy(分别为水平梯度,垂直梯度,水平和垂直梯度)做平方根输出。
最后再用一个输出模块来整合整个视频流,可以选择阈值和边缘模式。
![](/assets/blank.gif)
缓存模块
小编是一个懒人,能不写代码就尽量不写代码,既然要缓存了,首先看看有没有IP,查看了一下based shift register 这个IP,发现最大深度只有1088,所以没办法,小编只能自己写了。
![](/assets/blank.gif)
为了考虑后期还会继续使用这种缓存的应用场景,小编在这个模块使用RAM的原语进行设计,因为是基于视频的应用,所以设置的缓存深度为1行,如果需要缓存多行,把这个模块级联即可。
![](/assets/blank.gif)
仿真结果如下图
![](/assets/blank.gif)
梯度计算模块
![](/assets/blank.gif)
按照sobel算子给出源码如下
// GX = (A13+2 *A23 + A33 ) - (A11 +2 *A21 + A31 )// GY = (A31+2* A32 + A33 ) - (A11 +2* A12 + A13 )// | G | =(GX^2+ GY^2)^1/2always @ (posedge clk) beginif(pixel_en_d3)beginGX_right <=(A13+2 *A23 + A33 ) ;GX_left <=(A11 +2 *A21 + A31);endif(pixel_en_d3)beginGY_up <=(A31+2* A32 + A33 );GY_down <=(A11 +2* A12 + A13 );endadd_en<=pixel_en_d3;end always @ (posedge clk) beginif(add_en)beginif(GX_right>GX_left) GX<=GX_right-GX_left;else GX<=GX_left-GX_right;if(GY_up>GY_down) GY<=GY_up-GY_down;else GY<=GY_down-GY_up;endGX_GY_valid <= add_en;end
乘法器模块
使用Multiplier IP:输入两个乘法因子为无符号数8bit
![](/assets/blank.gif)
配置其latency为3 clock cycle(便于时序收敛)
![](/assets/blank.gif)
平方根模块
计算平方根,这里用到了Cordic IP,如下图所示选择实现功能为:Square Root
选择Data Fomat为unsigned interger,输入的值限制到(0,2^n)
选择输入位宽为24bit。
![](/assets/blank.gif)
实现结果
仿真程序层次图
![](/assets/blank.gif)
仿真结果
![](/assets/blank.gif)
实现结果
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
调节阈值视频链接
调节阈值https://v.qq.com/x/page/g0969ko1uts.html
参考链接
https://www.jianshu.com/p/bed4ffe996a1
https://blog.csdn.net/zaishuiyifangxym/article/details/89840396
资料获取
![](/assets/blank.gif)
图像sobel梯度详细计算过程_视频处理之Sobel【附源码】相关推荐
- 图像sobel梯度详细计算过程_数字图像处理(第十章)
点.线.边缘检测 背景知识.书中主要介绍了图像的一阶导数与二阶导数,这个之前的文章中有过介绍这里在复习一遍.对于函数 ,对于点 在x方向的一阶偏导为: ,二阶偏导为: 之后书中总结了一阶导与二阶导对于 ...
- 图像sobel梯度详细计算过程_OpenCV-Python 图像梯度 | 十八
目标 在本章中,我们将学习: 查找图像梯度,边缘等 我们将看到以下函数:cv.Sobel(),cv.Scharr(),cv.Laplacian()等 理论 OpenCV提供三种类型的梯度滤波器或高通滤 ...
- JAVA计算机毕业设计弹幕视频网站计算机(附源码、数据库)
JAVA计算机毕业设计弹幕视频网站计算机(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe ...
- 曝肝三天,两千行Python代码,制作B站视频下载工具(附源码)
曝肝三天,两千行Python代码,制作B站视频下载工具(附源码) 文章目录 一.准备工作 二.预览 1.启动 2.解析 3.下载中 4.下载完成 5.结果 三.设计流程 1.bilibili_vide ...
- 手把手教你使用Python网络爬虫获取B站视频选集内容(附源码)
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 位卑未敢忘忧国,事定犹须待阖棺. ...
- jsp+ssm计算机毕业设计智能视频推荐网站【附源码】
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- 【Android App】实战项目之仿抖音的短视频分享App(附源码和演示视频 超详细必看)
需要全部代码请点赞关注收藏后评论区留言私信~~~ 与传统的影视行业相比,诞生于移动互联网时代的短视频是个全新行业,它制作方便又容易传播,一出现就成为大街小巷的时髦潮流. 各行各业的人们均可通过短视频展 ...
- 基于FPGA的视频图像拼接融合(附源码)。
设计的架构通过基于特征和关键点拼接两个视频输入来生成具有更宽视野的视频. 架构经过优化,可以实时生成输出. 一.算法 下图说明了描述算法每个步骤的系统框图 该系统大致可以分为三个子系统: * 预处理 ...
- PyTorch搭建卷积神经网络(CNN)进行视频行为识别(附源码和数据集)
需要数据集和源码请点赞关注收藏后评论区留下QQ邮箱~~~ 一.行为识别简介 行为识别是视频理解中的一项基础任务,它可以从视频中提取语义信息,进而可以为其他任务如行为检测,行为定位等提供通用的视频表征 ...
最新文章
- 前端页面可视化设计工具
- kvm虚拟机设置万兆网卡_SR-IOV 10Gb 万兆网卡支持
- javase11源码文件_JavaSE 7,8:确定特定文件系统支持的视图
- python3下使用cv2.imwrite存储带有中文路径图片或者绝对路径图片
- gtone eclipse plugin install
- 1024 程序员节:给 DBA 们的福音
- 【Spring笔记】Spring创建hello程序
- 【论文解读】[目标检测]retinanet
- 详细vue脚手架安装教程
- [038]量化交易]显示所有股票名称及股票代码
- 【无标题】解决谷歌浏览器最新chrome94版本CORS跨域问题
- Android9设备打开WIFI热点,Android9.0Wifi热点开启流程梳理
- OSChina 周一乱弹 ——程序员已经习惯熬夜了吧
- 水果生鲜类抖音号被大量封号
- 凸优化:ADMM(Alternating Direction Method of Multipliers)交替方向乘子算法
- Thinkphp——hook类行为扩展
- python求素数因子_Python入门教程: 素数判断与素因子分解
- 梅科尔工作室-李舒婷-鸿蒙笔记2
- Nature:肠道微生物异常为何会导致肝病?
- java web怎么实现跳转,成都汇智动力-JAVAweb路径跳转实现教程
热门文章
- C++ STL 乱序算法
- html标签之img,input标签
- java 缓冲区溢出_基于数组越界的缓冲区溢出
- android旋转屏幕 简册,[Android][旋转屏幕]
- linux单点登录命令,配置RHEV中LINUX 虚拟机使用ACTIVE DIRECTORY(AD域)实现单点登录的方法...
- django使用mysql原始语句,Django中使用mysql数据库并使用原生sql语句操作
- 百度网盘vep文件如何转换mp4_用这个软件,聊聊如何将MOV文件转换为MP4
- android封装方法js调用方法吗,common
- 计组之I/O系统:1、I/O系统基本概念
- 操作系统之文件管理:7、文件的系统层次