HED算法介绍
图像边缘检测是图像处理与计算机视觉领域最基础也是最重要的任务之一,早期的Canny边缘检测到现在还在使用,但是Canny边缘检测过于依赖人工阈值的设定,无法在通用场景下工作,如何找到一个在自然场景下可以正确工作的边缘检测器,答案是使用CNN。2015年的时候有人提出了基于卷积神经网络的边缘检测算法HED全称为《Holistically-Nested Edge Detection》, 先看一下HED与Canny的效果对比:作者提出HED算法是受到了全卷积网络与深度监督网络的启发与影响,作者以VGGNet与FCN作为基础网络进行改进,对VGG网络进行conv1_2, conv2_2, conv3_3, conv4_3, conv5_3多个特征层的输出,借助FCN全卷积网络的设计,通过权重融合层实现各个层相连接,去掉了VGG网络的后半部分,大大减少了网络浮点数计算次数,网络架构示意图如下:
代码演示
OpenCV DNN本身是不支持该网络直接加载与执行的,必须通过OpenCV4中支持的自定义层方法,首先解析HED网络的自定义多层输出,然后重载它的forward方法之后,才可以正确执行。
自定义层解析的代码如下:
#自定义层
classCropLayer(object):
def__init__(self,params,blobs):
self.xstart=0
self.xend=0
self.ystart=0
self.yend=0
defgetMemoryShapes(self,inputs):
inputShape,targetShape=inputs[0],inputs[1]
batchSize,numChannels=inputShape[0],inputShape[1]
height,width=targetShape[2],targetShape[3]
self.ystart=(inputShape[2]-targetShape[2])//2
self.xstart=(inputShape[3]-targetShape[3])//2
self.yend=self.ystart+height
self.xend=self.xstart+width
return[[batchSize,numChannels,height,width]]
defforward(self,inputs):
return[inputs[0][:,:,self.ystart:self.yend,self.xstart:self.xend]]
加载网络,进行多全层次的边缘检测:
#自定义层
#注册自定义层
cv.dnn_registerLayer('Crop',CropLayer)
#Loadthemodel.
net=cv.dnn.readNet("D:/projects/models/hed/deploy.prototxt","D:/projects/models/hed/hed_pretrained_bsds.caffemodel")
kWinName='Holistically-NestedEdgeDetection'
cv.namedWindow('Input',cv.WINDOW_AUTOSIZE)
cv.namedWindow(kWinName,cv.WINDOW_AUTOSIZE)
cap=cv.VideoCapture(0)
whilecv.waitKey(1)< 0:
hasFrame,frame=cap.read()
frame=cv.flip(frame,1)
ifnothasFrame:
cv.waitKey()
break
cv.imshow('Input',frame)
inp=cv.dnn.blobFromImage(frame,scalefactor=1.0,size=(500,500),
mean=(104.00698793,116.66876762,122.67891434),
swapRB=False,crop=False)
net.setInput(inp)
out=net.forward()
out=out[0,0]
out=cv.resize(out,(frame.shape[1],frame.shape[0]))
cv.imshow(kWinName,out)
运行效果
图像测试
视频测试
论文与源码
源码与预训练模型
https://github.com/s9xie/hed
论文地址:
https://arxiv.org/abs/1504.06375
审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
神经网络
+关注
关注
42文章
4772浏览量
100835 -
算法
+关注
关注
23文章
4615浏览量
92972 -
检测算法
+关注
关注
0文章
119浏览量
25221
原文标题:OpenCV4 调用HED边缘检测算法
文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
ISP算法及架构分析介绍
一、ISP算法及架构分析介绍 ISP即Image Signal Processor,是一种图像处理架构,不是我们用的下载器。 ISP其实算是图像处理的一个特例,一般应用于前端设备(相对于SENSOR
【「从算法到电路—数字芯片算法的电路实现」阅读体验】+内容简介
的Matlab建模和RTL设计,可帮助数字IC设计者掌握常用算法设计思路、工具和流程,从根本上提高设计基本算法电路和复杂算法电路的能力。本书共分为12章。第1~2章介绍
发表于 11-21 17:14
【「从算法到电路—数字芯片算法的电路实现」阅读体验】+介绍基础硬件算法模块
作为嵌入式开发者往往比较关注硬件和软件的协调。本书介绍了除法器,信号发生器,滤波器,分频器等基本算法的电路实现,虽然都是基础内容,但是也是最常用到的基本模块。
随着逆全球化趋势的出现,过去的研发
发表于 11-21 17:05
【「从算法到电路—数字芯片算法的电路实现」阅读体验】+第九章sigma delta adc阅读与分享
sigma-deleta ADC https://mp.weixin.qq.com/s/0grIIVJGTnXQQy5_ahN3SQPDM系列文章之三:sigma-deleta思想应用实践之降帧率算法 本文后面还介绍
发表于 11-20 13:58
【「从算法到电路—数字芯片算法的电路实现」阅读体验】+一本介绍基础硬件算法模块实现的好书
作为嵌入式开发者往往比较关注硬件和软件的协调。本书介绍了除法器,信号发生器,滤波器,分频器等基本算法的电路实现,虽然都是基础内容,但是也是最常用到的基本模块,本书的内容比较对本人胃口。 我们先来
发表于 11-20 13:42
激光雷达在SLAM算法中的应用综述
SLAM算法运行的重要传感器。基于激光雷达的SLAM算法,对激光雷达SLAM总体框架进行介绍,详细阐述前端里程计、后端优化、回环检测、地图构建模块的作用并总结所使用的算法;按由2D到
PID算法的基本原理介绍
在现代工业自动化和控制系统中,PID控制器因其简单、鲁棒和高效而成为最广泛使用的控制算法之一。PID代表比例(Proportional)、积分(Integral)和微分(Derivative
时间复杂度为 O(n^2) 的排序算法
, O(n2) 的排序算法可能会比 O(nlogn) 的排序算法执行效率高。不过随着数据规模增大, O(nlogn) 的排序算法是不二选择。本篇我们主要对 O(n2) 的排序算法进行
图像识别算法都有哪些方法
图像识别算法是计算机视觉领域的核心任务之一,它涉及到从图像中提取特征并进行分类、识别和分析的过程。随着深度学习技术的不断发展,图像识别算法已经取得了显著的进展。本文将介绍图像识别算法的
bp神经网络算法的基本流程包括哪些
BP神经网络算法,即反向传播神经网络算法,是一种常用的多层前馈神经网络训练算法。它通过反向传播误差来调整网络的权重和偏置,从而实现对输入数据的分类或回归。下面详细介绍BP神经网络
常用的电机控制算法有哪些
在电机控制领域,选择合适的控制算法对于实现高效、精确且稳定的电机运行至关重要。以下将详细介绍几种常用的电机控制算法,并通过具体的分析和实例,探讨它们的特点、应用以及优势。
计算机视觉的十大算法
随着科技的不断发展,计算机视觉领域也取得了长足的进步。本文将介绍计算机视觉领域的十大算法,包括它们的基本原理、应用场景和优缺点。这些算法在图像处理、目标检测、人脸识别等领域有着广泛的应用,对计算机
AC电机控制算法是什么
AC电机控制算法是一种用于控制交流电机运行的技术,它可以实现对电机的启动、停止、速度调节和位置控制等功能。本文将对AC电机控制算法的原理、分类和应用进行详细介绍。 一、AC电机控制算法
评论