HED算法介紹
圖像邊緣檢測是圖像處理與計算機視覺領域最基礎也是最重要的任務之一,早期的Canny邊緣檢測到現在還在使用,但是Canny邊緣檢測過于依賴人工閾值的設定,無法在通用場景下工作,如何找到一個在自然場景下可以正確工作的邊緣檢測器,答案是使用CNN。2015年的時候有人提出了基于卷積神經網絡的邊緣檢測算法HED全稱為《Holistically-Nested Edge Detection》, 先看一下HED與Canny的效果對比:
代碼演示
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文章
4798瀏覽量
102449 -
算法
+關注
關注
23文章
4687瀏覽量
94432 -
檢測算法
+關注
關注
0文章
121瀏覽量
25411
原文標題:OpenCV4 調用HED邊緣檢測算法
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
FOC 算法實現永磁同步電機調整指南
本文檔介紹了使用 FOC 算法實現永磁同步電機 (Permanent Magnet SynchronousMotor,PMSM)調整所需的步驟和設置,該算法如 AN1078《PMSM 電機的無傳感器
發表于 03-03 01:53
PID控制算法的C語言實現:PID算法原理
在工業應用中 PID 及其衍生算法是應用最廣泛的算法之一,是當之無愧的萬能算法,如果能夠熟練掌握 PID 算法的設計與實現過程,對于一般的研發人員來講,應該是足夠應對一般研發問題了,而
發表于 02-26 15:24
什么是BP神經網絡的反向傳播算法
BP神經網絡的反向傳播算法(Backpropagation Algorithm)是一種用于訓練神經網絡的有效方法。以下是關于BP神經網絡的反向傳播算法的介紹: 一、基本概念 反向傳播算法
算法加速的概念、意義、流程和應用
本文介紹算法加速的概念、意義、流程和應用 一、什么是算法加速 面向“最耗時”的部分做專用化處理: 在軟件運行時,總有一些特定算法會消耗大量 CPU 資源,比如加密解密、圖像處理或神經網
?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到

圖像識別算法都有哪些方法
圖像識別算法是計算機視覺領域的核心任務之一,它涉及到從圖像中提取特征并進行分類、識別和分析的過程。隨著深度學習技術的不斷發展,圖像識別算法已經取得了顯著的進展。本文將介紹圖像識別算法的
bp神經網絡算法的基本流程包括哪些
BP神經網絡算法,即反向傳播神經網絡算法,是一種常用的多層前饋神經網絡訓練算法。它通過反向傳播誤差來調整網絡的權重和偏置,從而實現對輸入數據的分類或回歸。下面詳細介紹BP神經網絡
常用的電機控制算法有哪些
在電機控制領域,選擇合適的控制算法對于實現高效、精確且穩定的電機運行至關重要。以下將詳細介紹幾種常用的電機控制算法,并通過具體的分析和實例,探討它們的特點、應用以及優勢。
評論