Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenCV4中调用HED边缘检测算法

OpenCV4中调用HED边缘检测算法

作者头像
OpenCV学堂
发布于 2019-06-14 04:22:42
发布于 2019-06-14 04:22:42
4.5K10
代码可运行
举报
运行总次数:0
代码可运行

OpenCV4 DNN 模块,自定义层解析! 觉得不错,请点【在看】支持!

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方法之后,才可以正确执行。

自定义层解析的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 自定义层
class CropLayer(object):
    def __init__(self, params, blobs):
        self.xstart = 0
        self.xend = 0
        self.ystart = 0
        self.yend = 0

    def getMemoryShapes(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]]

    def forward(self, inputs):
        return [inputs[0][:,:,self.ystart:self.yend,self.xstart:self.xend]]

加载网络,进行多全层次的边缘检测:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 自定义层
# 注册自定义层
cv.dnn_registerLayer('Crop', CropLayer)

# Load the model.
net = cv.dnn.readNet("D:/projects/models/hed/deploy.prototxt", "D:/projects/models/hed/hed_pretrained_bsds.caffemodel")

kWinName = 'Holistically-Nested Edge Detection'
cv.namedWindow('Input', cv.WINDOW_AUTOSIZE)
cv.namedWindow(kWinName, cv.WINDOW_AUTOSIZE)

cap = cv.VideoCapture(0)
while cv.waitKey(1) < 0:
    hasFrame, frame = cap.read()
    frame = cv.flip(frame, 1)
    if not hasFrame:
        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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
下不到pretrained model了
下不到pretrained model了
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
OpenCV4 调用HED边缘检测算法
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 HED算法介绍 图像边缘检测是图像处理与计算机视觉领域最基础也是最重要的任务之一,早期的Canny边缘检测到现在还在使用,但是Canny边缘检测过于依赖人工阈值的设定,无法在通用场景下工作,如何找到一个在自然场景下可以正确工作的边缘检测器,答案是使用CNN。2015年的时候有人提出了基于卷积神经网络的边缘检测算法HED全称为《Holistically-Nested Edge Detection》, 先看一下HED与Ca
OpenCV学堂
2022/08/29
1.5K1
OpenCV4 调用HED边缘检测算法
在OpenCV中基于深度学习的边缘检测
分析了Canny的优劣,并给出了OpenCV使用深度学习做边缘检测的流程,文末有代码链接。
AI算法与图像处理
2021/01/20
2.1K0
在OpenCV中基于深度学习的边缘检测
Python+OpenCV+OpenPose实现人体姿态估计(人体关键点检测)
人体姿态估计(Human Posture Estimation),是通过将图片中已检测到的人体关键点正确的联系起来,从而估计人体姿态。
不脱发的程序猿
2021/01/20
11.4K0
更丰富的卷积特征用于目标边缘检测
【导读】边缘检测是计算机视觉中的一个基本问题。近年来,卷积神经网络(CNNs)的出现极大地推动了这一领域的发展。现有的方法采用特定的深层CNN,但由于尺度和纵横比的变化,可能无法捕捉到复杂的数据结构。今天分享的paper提出了一种利用更丰富的卷积特征(RCF)来精确的边缘检测方法。
计算机视觉研究院
2019/07/19
1K0
汇总 | OpenCV4中的非典型深度学习模型
前面给大家分别汇总了OpenCV中支持的图像分类与对象检测模型,视觉视觉任务除了分类与检测还有很多其他任务,这里我们就来OpenCV中支持的非分类与检测的视觉模型汇总一下。注意一点,汇总支持的模型都是OpenCV4.4 Github上已经提供的,事实上除了官方的提供的模型,读者还可以自己探索更多非官方模型支持。这里的汇总模型主要来自OpenCV社区官方测试过的。
OpenCV学堂
2020/09/22
8610
汇总 | OpenCV4中的非典型深度学习模型
轮廓检测论文解读 | 整体嵌套边缘检测HED | CVPR | 2015
轮廓检测,对我这样的初学者而言,与语义分割类似。分割任务是什么我就不再赘述了,轮廓检测则是完成这样的一个任务:
机器学习炼丹术
2020/12/16
1.4K0
HED 和 RCF 图像边缘检测
虽然传统边缘检测算法在不断发展的过程中也取得了很大的进步,但仍然无法做到精细的边缘检测处理。随着近年来深度学习的快速发展,计算机视觉领域因此获益颇丰,当下最先进的计算机视觉应用几乎都离不开深度学习,深入我们生活的各个领域如目标检测、工业、农业、医疗等。由于深度学习的特性,使得它成为最适合处理计算机视觉任务的工具之一,特别是卷积神经网络(CNN),得益于它强大的自动学习能力,图像边缘检测任务得到了长足的发展,涌现出了许多优秀的方法,如 N4-field、DeepContour、HED、RCF,基于神经网络的边缘检测算法成为了研究热点之一。
EmoryHuang
2022/10/31
1.3K0
HED 和 RCF 图像边缘检测
OpenCV 入门之图像模糊与边缘检测
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。官方下载链接如下:https://opencv.org/releases/
用户6021899
2019/08/21
2.3K0
OpenCV 入门之图像模糊与边缘检测
用霍夫变换&amp;SCNN码一个车道追踪器
大多数车道都设计得相对简单,这不仅是为了鼓励有序,还为了让人类驾驶员更容易以相同的速度驾驶车辆。因此,我们的方法可能会通过边缘检测和特征提取技术先检测出摄像机馈送回来的直线。我们将用 OpenCV(一个开源的用来实现计算机视觉算法的库)。下图是我们的方法流程的概述。
机器之心
2019/03/06
7410
用霍夫变换&amp;SCNN码一个车道追踪器
Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示
这个是设定半径范围 50-70 后的效果,因为原图稍微大一点,半径也大了一些。
小蓝枣
2022/01/11
1.7K0
Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示
OpenCV 边缘检测
Canny 边缘检测算子,其算法步骤大体如下: 1) 用高斯滤波器对输入图像做平滑处理 (大小为 5x5 的高斯核)
AI异构
2020/07/29
1K0
OpenCV 边缘检测
OpenCV边缘检测与视频读写
边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。边缘的表现形式:
@小森
2024/03/15
1760
OpenCV边缘检测与视频读写
教程 | OpenCV深度神经网络实现人体姿态评估
OpenCV自从发布了DNN模块之后,就开始以开挂的方式支持各种深度学习预训练模型的调用,DNN模块的全称为深度神经网络,但是并不是所有深度学习模型导出到OpenCV DNN模块中都可以使用,只有那些OpenCV声明支持的层与网络模型才会被DNN模块接受,当期OpenCV支持的模型与层类型可以在下面链接中找到相关文档
OpenCV学堂
2018/12/05
1.3K0
笔记分享 : OpenCV中的常用边缘检测算法
哈喽,大家好,我们今天了解一下OpenCV中的边缘检测功能实现。在一些案例中,我们需要对物体进行边缘检测,而且是越精准越好。那么,OpenCV提供了哪些边缘检测的方法呢?
唐国梁Tommy
2021/05/28
1.5K0
笔记分享 : OpenCV中的常用边缘检测算法
CV学习笔记(十四):边缘检测
在这一篇文章里我们将去学习在计算机视觉中边缘检测的知识,并且去使用OpenCV来实现Canny边缘检测算法。
云时之间
2020/03/27
2.3K0
OpenCV实现年龄与性别预测
前面我写了很多篇关于OpenCV DNN应用相关的文章,这里再来一篇文章,用OpenCV DNN实现一个很有趣好玩的例子,基于Caffe的预训练模型实现年龄与性别预测,这个在很多展会上都有展示,OpenCV DNN实现这里非常简洁明了,总共不到100行的代码。下面就来说一下怎么实现的,首先下载两个Caffe的预训练模型:
OpenCV学堂
2019/04/29
1.7K0
OpenCV实现年龄与性别预测
Python OpenCV 霍夫(Hough Transform)直线变换检测应用
在 OpenCV 中提供了两个霍夫直线检测的函数,一个是标准霍夫变换,另一个是概率霍夫变换。
玖柒的小窝
2021/09/20
2.1K0
Python OpenCV 霍夫(Hough Transform)直线变换检测应用
教程 | 100行代码搞定实时视频人脸表情识别
好就没有写点OpenCV4 + OpenVINO的应用了,前几天上课重新安装了一下最新OpenVINO2020.3版本,实现了一个基于OpenCV+OpenVINO的Python版本人脸表情识别。100行代码以内,简单好用!
OpenCV学堂
2020/07/08
2.6K0
基于 TensorFlow 在手机端实现文档检测
手机端运行卷积神经网络的一次实践 — 基于 TensorFlow 和 OpenCV 实现文档检测功能 1. 前言 本文不是神经网络或机器学习的入门教学,而是通过一个真实的产品案例,展示了在手机客户端上运行一个神经网络的关键技术点 在卷积神经网络适用的领域里,已经出现了一些很经典的图像分类网络,比如 VGG16/VGG19,Inception v1-v4 Net,ResNet 等,这些分类网络通常又都可以作为其他算法中的基础网络结构,尤其是 VGG 网络,被很多其他的算法借鉴,本文也会使用 VGG16 的基础
腾讯Bugly
2018/03/23
2K0
专栏 | 手机端运行卷积神经网络实践:基于TensorFlow和OpenCV实现文档检测功能
机器之心投稿 作者:腾讯 iOS 客户端高级工程师冯牮 本文作者通过一个真实的产品案例,展示了在手机客户端上运行一个神经网络的关键技术点。 前言 本文不是神经网络或机器学习的入门教学,而是通过一个真实的产品案例,展示了在手机客户端上运行一个神经网络的关键技术点。 在卷积神经网络适用的领域里,已经出现了一些很经典的图像分类网络,比如 VGG16/VGG19,Inception v1-v4 Net,ResNet 等,这些分类网络通常又都可以作为其他算法中的基础网络结构,尤其是 VGG 网络,被很多其他的算法借鉴
机器之心
2018/05/07
1.4K0
专栏 | 手机端运行卷积神经网络实践:基于TensorFlow和OpenCV实现文档检测功能
相关推荐
OpenCV4 调用HED边缘检测算法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验