91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在OpenCV中使用基于深度學(xué)習(xí)的邊緣檢測(cè)

新機(jī)器視覺 ? 來源:AI算法與圖像處理 ? 作者:AI算法與圖像處理 ? 2021-04-18 10:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

導(dǎo)讀

分析了Canny的優(yōu)劣,并給出了OpenCV使用深度學(xué)習(xí)做邊緣檢測(cè)的流程,文末有代碼鏈接。

在這篇文章中,我們將學(xué)習(xí)如何在OpenCV中使用基于深度學(xué)習(xí)的邊緣檢測(cè),它比目前流行的canny邊緣檢測(cè)器更精確。邊緣檢測(cè)在許多用例中是有用的,如視覺顯著性檢測(cè),目標(biāo)檢測(cè),跟蹤和運(yùn)動(dòng)分析,結(jié)構(gòu)從運(yùn)動(dòng),3D重建,自動(dòng)駕駛,圖像到文本分析等等。

什么是邊緣檢測(cè)?

邊緣檢測(cè)是計(jì)算機(jī)視覺中一個(gè)非常古老的問題,它涉及到檢測(cè)圖像中的邊緣來確定目標(biāo)的邊界,從而分離感興趣的目標(biāo)。最流行的邊緣檢測(cè)技術(shù)之一是Canny邊緣檢測(cè),它已經(jīng)成為大多數(shù)計(jì)算機(jī)視覺研究人員和實(shí)踐者的首選方法。讓我們快速看一下Canny邊緣檢測(cè)。

Canny邊緣檢測(cè)算法

1983年,John Canny在麻省理工學(xué)院發(fā)明了Canny邊緣檢測(cè)。它將邊緣檢測(cè)視為一個(gè)信號(hào)處理問題。其核心思想是,如果你觀察圖像中每個(gè)像素的強(qiáng)度變化,它在邊緣的時(shí)候非常高。

在下面這張簡(jiǎn)單的圖片中,強(qiáng)度變化只發(fā)生在邊界上。所以,你可以很容易地通過觀察像素強(qiáng)度的變化來識(shí)別邊緣。

現(xiàn)在,看下這張圖片。強(qiáng)度不是恒定的,但強(qiáng)度的變化率在邊緣處最高。(微積分復(fù)習(xí):變化率可以用一階導(dǎo)數(shù)(梯度)來計(jì)算。)

801770a0-9fbb-11eb-8b86-12bb97331649.png

Canny邊緣檢測(cè)器通過4步來識(shí)別邊緣:

去噪:因?yàn)檫@種方法依賴于強(qiáng)度的突然變化,如果圖像有很多隨機(jī)噪聲,那么會(huì)將噪聲作為邊緣。所以,使用5×5的高斯濾波器平滑你的圖像是一個(gè)非常好的主意。

梯度計(jì)算:下一步,我們計(jì)算圖像中每個(gè)像素的強(qiáng)度的梯度(強(qiáng)度變化率)。我們也計(jì)算梯度的方向。

801ffb94-9fbb-11eb-8b86-12bb97331649.png

梯度方向垂直于邊緣,它被映射到四個(gè)方向中的一個(gè)(水平、垂直和兩個(gè)對(duì)角線方向)。

非極大值抑制:現(xiàn)在,我們想刪除不是邊緣的像素(設(shè)置它們的值為0)。你可能會(huì)說,我們可以簡(jiǎn)單地選取梯度值最高的像素,這些就是我們的邊。然而,在真實(shí)的圖像中,梯度不是簡(jiǎn)單地在只一個(gè)像素處達(dá)到峰值,而是在臨近邊緣的像素處都非常高。因此我們?cè)谔荻确较蛏先?×3附近的局部最大值。

8039549a-9fbb-11eb-8b86-12bb97331649.png

遲滯閾值化:在下一步中,我們需要決定一個(gè)梯度的閾值,低于這個(gè)閾值所有的像素都將被抑制(設(shè)置為0)。而Canny邊緣檢測(cè)器則采用遲滯閾值法。遲滯閾值法是一種非常簡(jiǎn)單而有效的方法。我們使用兩個(gè)閾值來代替只用一個(gè)閾值:

高閾值 = 選擇一個(gè)非常高的值,這樣任何梯度值高于這個(gè)值的像素都肯定是一個(gè)邊緣。

低閾值 = 選擇一個(gè)非常低的值,任何梯度值低于該值的像素絕對(duì)不是邊緣。

在這兩個(gè)閾值之間有梯度的像素會(huì)被檢查,如果它們和邊緣相連,就會(huì)留下,否則就會(huì)去掉。

804523ec-9fbb-11eb-8b86-12bb97331649.jpg

遲滯閾值化

Canny 邊緣檢測(cè)的問題:

由于Canny邊緣檢測(cè)器只關(guān)注局部變化,沒有語義(理解圖像的內(nèi)容)理解,精度有限(很多時(shí)候是這樣)。

804e107e-9fbb-11eb-8b86-12bb97331649.png

Canny邊緣檢測(cè)器在這種情況下會(huì)失敗,因?yàn)闆]有理解圖像的上下文

語義理解對(duì)于邊緣檢測(cè)是至關(guān)重要的,這就是為什么使用機(jī)器學(xué)習(xí)或深度學(xué)習(xí)的基于學(xué)習(xí)的檢測(cè)器比canny邊緣檢測(cè)器產(chǎn)生更好的結(jié)果。

OpenCV中基于深度學(xué)習(xí)的邊緣檢測(cè)

OpenCV在其全新的DNN模塊中集成了基于深度學(xué)習(xí)的邊緣檢測(cè)技術(shù)。你需要OpenCV 3.4.3或更高版本。這種技術(shù)被稱為整體嵌套邊緣檢測(cè)或HED,是一種基于學(xué)習(xí)的端到端邊緣檢測(cè)系統(tǒng),使用修剪過的類似vgg的卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行圖像到圖像的預(yù)測(cè)任務(wù)。

HED利用了中間層的輸出。之前的層的輸出稱為side output,將所有5個(gè)卷積層的輸出進(jìn)行融合,生成最終的預(yù)測(cè)。由于在每一層生成的特征圖大小不同,它可以有效地以不同的尺度查看圖像。

812ca140-9fbb-11eb-8b86-12bb97331649.png

網(wǎng)絡(luò)結(jié)構(gòu):整體嵌套邊緣檢測(cè)

HED方法不僅比其他基于深度學(xué)習(xí)的方法更準(zhǔn)確,而且速度也比其他方法快得多。這就是為什么OpenCV決定將其集成到新的DNN模塊中。以下是這篇論文的結(jié)果:

81849198-9fbb-11eb-8b86-12bb97331649.png

在OpenCV中訓(xùn)練深度學(xué)習(xí)邊緣檢測(cè)的代碼

OpenCV使用的預(yù)訓(xùn)練模型已經(jīng)在Caffe框架中訓(xùn)練過了,可以這樣加載:

shdownload_pretrained.sh

網(wǎng)絡(luò)中有一個(gè)crop層,默認(rèn)是沒有實(shí)現(xiàn)的,所以我們需要自己實(shí)現(xiàn)一下。

classCropLayer(object): def__init__(self,params,blobs): self.xstart=0 self.xend=0 self.ystart=0 self.yend=0 #Ourlayerreceivestwoinputs.Weneedtocropthefirstinputblob #tomatchashapeofthesecondone(keepingbatchsizeandnumberofchannels) 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]]

現(xiàn)在,我們可以重載這個(gè)類,只需用一行代碼注冊(cè)該層。

cv.dnn_registerLayer('Crop',CropLayer)

現(xiàn)在,我們準(zhǔn)備構(gòu)建網(wǎng)絡(luò)圖并加載權(quán)重,這可以通過OpenCV的dnn.readNe函數(shù)。

net=cv.dnn.readNet(args.prototxt,args.caffemodel)

現(xiàn)在,下一步是批量加載圖像,并通過網(wǎng)絡(luò)運(yùn)行它們。為此,我們使用cv2.dnn.blobFromImage方法。該方法從輸入圖像中創(chuàng)建四維blob。

blob=cv.dnn.blobFromImage(image,scalefactor,size,mean,swapRB,crop)

其中:

image:是我們想要發(fā)送給神經(jīng)網(wǎng)絡(luò)進(jìn)行推理的輸入圖像。

scalefactor:圖像縮放常數(shù),很多時(shí)候我們需要把uint8的圖像除以255,這樣所有的像素都在0到1之間。默認(rèn)值是1.0,不縮放。

size:輸出圖像的空間大小。它將等于后續(xù)神經(jīng)網(wǎng)絡(luò)作為blobFromImage輸出所需的輸入大小。

swapRB:布爾值,表示我們是否想在3通道圖像中交換第一個(gè)和最后一個(gè)通道。OpenCV默認(rèn)圖像為BGR格式,但如果我們想將此順序轉(zhuǎn)換為RGB,我們可以將此標(biāo)志設(shè)置為True,這也是默認(rèn)值。

mean:為了進(jìn)行歸一化,有時(shí)我們計(jì)算訓(xùn)練數(shù)據(jù)集上的平均像素值,并在訓(xùn)練過程中從每幅圖像中減去它。如果我們?cè)谟?xùn)練中做均值減法,那么我們必須在推理中應(yīng)用它。這個(gè)平均值是一個(gè)對(duì)應(yīng)于R, G, B通道的元組。例如Imagenet數(shù)據(jù)集的均值是R=103.93, G=116.77, B=123.68。如果我們使用swapRB=False,那么這個(gè)順序?qū)⑹?B, G, R)。

crop:布爾標(biāo)志,表示我們是否想居中裁剪圖像。如果設(shè)置為True,則從中心裁剪輸入圖像時(shí),較小的尺寸等于相應(yīng)的尺寸,而其他尺寸等于或大于該尺寸。然而,如果我們將其設(shè)置為False,它將保留長(zhǎng)寬比,只是將其調(diào)整為固定尺寸大小。

在我們這個(gè)場(chǎng)景下:

inp=cv.dnn.blobFromImage(frame,scalefactor=1.0,size=(args.width,args.height), mean=(104.00698793,116.66876762,122.67891434),swapRB=False, crop=False)

現(xiàn)在,我們只需要調(diào)用一下前向方法。

net.setInput(inp) out=net.forward() out=out[0,0] out=cv.resize(out,(frame.shape[1],frame.shape[0])) out=255*out out=out.astype(np.uint8) out=cv.cvtColor(out,cv.COLOR_GRAY2BGR) con=np.concatenate((frame,out),axis=1) cv.imshow(kWinName,con)

結(jié)果:

81fddbac-9fbb-11eb-8b86-12bb97331649.png

中間的圖像是人工標(biāo)注的圖像,右邊是HED的結(jié)果

823d4954-9fbb-11eb-8b86-12bb97331649.png

中間的圖像是人工標(biāo)注的圖像,右邊是HED的結(jié)果

文中的代碼:https://github.com/sankit1/cv-tricks.com/tree/master/OpenCV/Edge_detection

英文原文:https://cv-tricks.com/opencv-dnn/edge-detection-hed/

責(zé)任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 邊緣檢測(cè)
    +關(guān)注

    關(guān)注

    0

    文章

    94

    瀏覽量

    18675
  • OpenCV
    +關(guān)注

    關(guān)注

    33

    文章

    652

    瀏覽量

    44803
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5599

    瀏覽量

    124400

原文標(biāo)題:基于OpenCV深度學(xué)習(xí)的邊緣檢測(cè)

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    OpenCV首次到訪奧比中光并展開深度交流

    1月15日,OpenCV創(chuàng)始人及核心團(tuán)隊(duì)首次到訪奧比中光,雙方圍繞3D視覺硬件與計(jì)算機(jī)視覺軟件的協(xié)同創(chuàng)新,展開深度交流。
    的頭像 發(fā)表于 01-21 15:51 ?392次閱讀

    穿孔機(jī)頂頭檢測(cè)儀 機(jī)器視覺深度學(xué)習(xí)

    LX01Z-DG626穿孔機(jī)頂頭檢測(cè)儀采用深度學(xué)習(xí)技術(shù),能夠?qū)崿F(xiàn)頂頭狀態(tài)的在線實(shí)時(shí)檢測(cè),頂頭丟失報(bào)警,頂頭異常狀態(tài)報(bào)警等功能,響應(yīng)迅速,異常狀態(tài)視頻回溯,
    發(fā)表于 12-22 14:33

    沒有專利的opencv-python 版本

    費(fèi)用于商業(yè)產(chǎn)品,僅需保留版權(quán)聲明); 包含所有核心功能:圖片讀取/處理、視頻讀寫、繪圖、形態(tài)學(xué)操作、邊緣檢測(cè)(Canny)、閾值分割、輪廓檢測(cè)等,滿足 90%+ 開發(fā)場(chǎng)景; 適配 Python 3.13,安裝
    發(fā)表于 12-13 12:37

    如何深度學(xué)習(xí)機(jī)器視覺的應(yīng)用場(chǎng)景

    深度學(xué)習(xí)視覺應(yīng)用場(chǎng)景大全 工業(yè)制造領(lǐng)域 復(fù)雜缺陷檢測(cè):處理傳統(tǒng)算法難以描述的非標(biāo)準(zhǔn)化缺陷模式 非標(biāo)產(chǎn)品分類:對(duì)形狀、顏色、紋理多變的產(chǎn)品進(jìn)行智能分類 外觀質(zhì)量評(píng)估:基于學(xué)習(xí)的外觀質(zhì)量標(biāo)
    的頭像 發(fā)表于 11-27 10:19 ?223次閱讀

    何在AMD Vitis Unified IDE中使用系統(tǒng)設(shè)備樹

    您將在這篇博客中了解系統(tǒng)設(shè)備樹 (SDT) 以及如何在 AMD Vitis Unified IDE 中使用 SDT 維護(hù)來自 XSA 的硬件元數(shù)據(jù)。本文還講述了如何對(duì) SDT 進(jìn)行操作,以便在 Vitis Unified IDE 中實(shí)現(xiàn)更靈活的使用場(chǎng)景。
    的頭像 發(fā)表于 11-18 11:13 ?3123次閱讀
    如<b class='flag-5'>何在</b>AMD Vitis Unified IDE<b class='flag-5'>中使</b>用系統(tǒng)設(shè)備樹

    機(jī)器視覺雙雄YOLO 和 OpenCV 到底有啥區(qū)別?別再傻傻分不清!

    何在深圳市鋇錸技術(shù)有限公司的AI邊緣計(jì)算產(chǎn)品中結(jié)合,實(shí)現(xiàn)真正的“視覺智能”。 一、前言:為什么總有人把YOLO和OpenCV搞混? 在AI視覺項(xiàng)目中,你可能聽過這樣的討論:“要做人臉檢測(cè)
    的頭像 發(fā)表于 10-14 16:00 ?1272次閱讀
    機(jī)器視覺雙雄YOLO 和 <b class='flag-5'>OpenCV</b> 到底有啥區(qū)別?別再傻傻分不清!

    何在機(jī)器視覺中部署深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

    圖 1:基于深度學(xué)習(xí)的目標(biāo)檢測(cè)可定位已訓(xùn)練的目標(biāo)類別,并通過矩形框(邊界框)對(duì)其進(jìn)行標(biāo)識(shí)。 在討論人工智能(AI)或深度學(xué)習(xí)時(shí),經(jīng)常會(huì)出現(xiàn)“
    的頭像 發(fā)表于 09-10 17:38 ?902次閱讀
    如<b class='flag-5'>何在</b>機(jī)器視覺中部署<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>神經(jīng)網(wǎng)絡(luò)

    【開發(fā)實(shí)例】基于GM-3568JHF開發(fā)板安裝OpenCV并使用視頻目標(biāo)跟蹤 ( CamShift)

    常用的算法。本文將詳細(xì)講解這兩種算法的原理、實(shí)現(xiàn)步驟以及如何在OpenCV中使用它們。https://bbs.elecfans.com/jishu_2497622
    的頭像 發(fā)表于 09-02 08:04 ?796次閱讀
    【開發(fā)實(shí)例】基于GM-3568JHF開發(fā)板安裝<b class='flag-5'>OpenCV</b>并使用視頻目標(biāo)跟蹤 ( CamShift)

    如何使用樹莓派與OpenCV實(shí)現(xiàn)面部和運(yùn)動(dòng)追蹤的云臺(tái)系統(tǒng)?

    使用樹莓派和OpenCV實(shí)時(shí)掃描并存儲(chǔ)二維碼使用樹莓派和OpenCV實(shí)現(xiàn)物體與動(dòng)物識(shí)別使用樹莓派、攝像頭和OpenCV進(jìn)行速度檢測(cè)用樹莓派+Open
    的頭像 發(fā)表于 08-14 17:45 ?1606次閱讀
    如何使用樹莓派與<b class='flag-5'>OpenCV</b>實(shí)現(xiàn)面部和運(yùn)動(dòng)追蹤的云臺(tái)系統(tǒng)?

    【Milk-V Duo S 開發(fā)板免費(fèi)體驗(yàn)】SDK編譯、人臉檢測(cè)OpenCV測(cè)試

    【Milk-V Duo S 開發(fā)板免費(fèi)體驗(yàn)】SDK編譯、人臉檢測(cè)、OpenCV測(cè)試 本文介紹了 Milk-V Duo S 開發(fā)板實(shí)現(xiàn) Buildroot SDK 鏡像編譯、基于 TDL 模型的人
    發(fā)表于 07-11 13:48

    何在k230上運(yùn)行OpenCV的代碼?

    何在k230上運(yùn)行OpenCV的代碼
    發(fā)表于 06-17 06:06

    【「# ROS 2智能機(jī)器人開發(fā)實(shí)踐」閱讀體驗(yàn)】視覺實(shí)現(xiàn)的基礎(chǔ)算法的應(yīng)用

    : 一、機(jī)器人視覺:從理論到實(shí)踐 第7章詳細(xì)介紹了ROS2在機(jī)器視覺領(lǐng)域的應(yīng)用,涵蓋了相機(jī)標(biāo)定、OpenCV集成、視覺巡線、二維碼識(shí)別以及深度學(xué)習(xí)目標(biāo)檢測(cè)等內(nèi)容。通過
    發(fā)表于 05-03 19:41

    OpenCV行人檢測(cè)應(yīng)用方案--基于米爾全志T527開發(fā)板

    本文將介紹基于米爾電子MYD-LT527開發(fā)板(米爾基于全志T527開發(fā)板)的OpenCV行人檢測(cè)方案測(cè)試。摘自優(yōu)秀創(chuàng)作者-小火苗一、軟件環(huán)境安裝1.安裝
    的頭像 發(fā)表于 04-10 08:03 ?1314次閱讀
    <b class='flag-5'>OpenCV</b>行人<b class='flag-5'>檢測(cè)</b>應(yīng)用方案--基于米爾全志T527開發(fā)板

    嵌入式AI技術(shù)之深度學(xué)習(xí):數(shù)據(jù)樣本預(yù)處理過程中使用合適的特征變換對(duì)深度學(xué)習(xí)的意義

    ? 作者:蘇勇Andrew 使用神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)機(jī)器學(xué)習(xí),網(wǎng)絡(luò)的每個(gè)層都將對(duì)輸入的數(shù)據(jù)做一次抽象,多層神經(jīng)網(wǎng)絡(luò)構(gòu)成深度學(xué)習(xí)的框架,可以深度理解數(shù)據(jù)中所要表示的規(guī)律。從原理上看,使用
    的頭像 發(fā)表于 04-02 18:21 ?1521次閱讀

    行業(yè)首創(chuàng):基于深度學(xué)習(xí)視覺平臺(tái)的AI驅(qū)動(dòng)輪胎檢測(cè)自動(dòng)化

    全球領(lǐng)先的輪胎制造商 NEXEN TIRE 在其輪胎生產(chǎn)檢測(cè)過程中使用了基于友思特伙伴Neurocle開發(fā)的AI深度學(xué)習(xí)視覺平臺(tái),實(shí)現(xiàn)缺陷檢測(cè)
    的頭像 發(fā)表于 03-19 16:51 ?1019次閱讀
    行業(yè)首創(chuàng):基于<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>視覺平臺(tái)的AI驅(qū)動(dòng)輪胎<b class='flag-5'>檢測(cè)</b>自動(dòng)化