0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HED算法介绍

OpenCV学堂 来源:OpenCV学堂 作者:OpenCV学堂 2022-07-28 10:10 次阅读

HED算法介绍

图像边缘检测是图像处理与计算机视觉领域最基础也是最重要的任务之一,早期的Canny边缘检测到现在还在使用,但是Canny边缘检测过于依赖人工阈值的设定,无法在通用场景下工作,如何找到一个在自然场景下可以正确工作的边缘检测器,答案是使用CNN。2015年的时候有人提出了基于卷积神经网络的边缘检测算法HED全称为《Holistically-Nested Edge Detection》, 先看一下HED与Canny的效果对比:

4d337462-0dbb-11ed-ba43-dac502259ad0.jpg

作者提出HED算法是受到了全卷积网络与深度监督网络的启发与影响,作者以VGGNet与FCN作为基础网络进行改进,对VGG网络进行conv1_2, conv2_2, conv3_3, conv4_3, conv5_3多个特征层的输出,借助FCN全卷积网络的设计,通过权重融合层实现各个层相连接,去掉了VGG网络的后半部分,大大减少了网络浮点数计算次数,网络架构示意图如下:

4d4e30cc-0dbb-11ed-ba43-dac502259ad0.jpg

代码演示

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)

运行效果

图像测试

4d652318-0dbb-11ed-ba43-dac502259ad0.jpg

视频测试

4d74f270-0dbb-11ed-ba43-dac502259ad0.jpg

论文与源码

源码与预训练模型
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
    的头像 发表于 11-26 10:05 455次阅读
    ​ISP<b class='flag-5'>算法</b>及架构分析<b class='flag-5'>介绍</b>

    【「从算法到电路—数字芯片算法的电路实现」阅读体验】+内容简介

    的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到
    的头像 发表于 11-12 10:30 660次阅读
    激光雷达在SLAM<b class='flag-5'>算法</b>中的应用综述

    PID算法的基本原理介绍

    在现代工业自动化和控制系统中,PID控制器因其简单、鲁棒和高效而成为最广泛使用的控制算法之一。PID代表比例(Proportional)、积分(Integral)和微分(Derivative
    的头像 发表于 11-06 10:28 413次阅读

    时间复杂度为 O(n^2) 的排序算法

    , O(n2) 的排序算法可能会比 O(nlogn) 的排序算法执行效率高。不过随着数据规模增大, O(nlogn) 的排序算法是不二选择。本篇我们主要对 O(n2) 的排序算法进行
    的头像 发表于 10-19 16:31 1170次阅读
    时间复杂度为 O(n^2) 的排序<b class='flag-5'>算法</b>

    图像识别算法都有哪些方法

    图像识别算法是计算机视觉领域的核心任务之一,它涉及到从图像中提取特征并进行分类、识别和分析的过程。随着深度学习技术的不断发展,图像识别算法已经取得了显著的进展。本文将介绍图像识别算法
    的头像 发表于 07-16 11:14 5647次阅读

    bp神经网络算法的基本流程包括哪些

    BP神经网络算法,即反向传播神经网络算法,是一种常用的多层前馈神经网络训练算法。它通过反向传播误差来调整网络的权重和偏置,从而实现对输入数据的分类或回归。下面详细介绍BP神经网络
    的头像 发表于 07-04 09:47 659次阅读

    BLDC电机控制算法详解

    算法。本文将详细介绍BLDC电机的控制算法,包括电速算法、电流环控制算法、磁场导向控制算法等,并
    的头像 发表于 06-14 10:49 1093次阅读

    常用的电机控制算法有哪些

    在电机控制领域,选择合适的控制算法对于实现高效、精确且稳定的电机运行至关重要。以下将详细介绍几种常用的电机控制算法,并通过具体的分析和实例,探讨它们的特点、应用以及优势。
    的头像 发表于 06-05 16:31 2392次阅读

    计算机视觉的十大算法

    随着科技的不断发展,计算机视觉领域也取得了长足的进步。本文将介绍计算机视觉领域的十大算法,包括它们的基本原理、应用场景和优缺点。这些算法在图像处理、目标检测、人脸识别等领域有着广泛的应用,对计算机
    的头像 发表于 02-19 13:26 1250次阅读
    计算机视觉的十大<b class='flag-5'>算法</b>

    AC电机控制算法是什么

    AC电机控制算法是一种用于控制交流电机运行的技术,它可以实现对电机的启动、停止、速度调节和位置控制等功能。本文将对AC电机控制算法的原理、分类和应用进行详细介绍。 一、AC电机控制算法
    的头像 发表于 01-11 11:21 1099次阅读
    AC电机控制<b class='flag-5'>算法</b>是什么

    FPGA图像处理之CLAHE算法

    在FPGA图像处理--CLAHE算法(一)中介绍了为啥要用CLAHE算法来做图像增强。
    的头像 发表于 01-04 12:23 2563次阅读
    FPGA图像处理之CLAHE<b class='flag-5'>算法</b>