在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在OpenCV中使用基于深度學習的邊緣檢測

新機器視覺 ? 來源:AI算法與圖像處理 ? 作者:AI算法與圖像處理 ? 2021-04-18 10:25 ? 次閱讀

導讀

分析了Canny的優劣,并給出了OpenCV使用深度學習做邊緣檢測的流程,文末有代碼鏈接。

在這篇文章中,我們將學習如何在OpenCV中使用基于深度學習的邊緣檢測,它比目前流行的canny邊緣檢測器更精確。邊緣檢測在許多用例中是有用的,如視覺顯著性檢測,目標檢測,跟蹤和運動分析,結構從運動,3D重建,自動駕駛,圖像到文本分析等等。

什么是邊緣檢測?

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

Canny邊緣檢測算法

1983年,John Canny在麻省理工學院發明了Canny邊緣檢測。它將邊緣檢測視為一個信號處理問題。其核心思想是,如果你觀察圖像中每個像素的強度變化,它在邊緣的時候非常高。

在下面這張簡單的圖片中,強度變化只發生在邊界上。所以,你可以很容易地通過觀察像素強度的變化來識別邊緣。

現在,看下這張圖片。強度不是恒定的,但強度的變化率在邊緣處最高。(微積分復習:變化率可以用一階導數(梯度)來計算。)

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

Canny邊緣檢測器通過4步來識別邊緣:

去噪:因為這種方法依賴于強度的突然變化,如果圖像有很多隨機噪聲,那么會將噪聲作為邊緣。所以,使用5×5的高斯濾波器平滑你的圖像是一個非常好的主意。

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

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

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

非極大值抑制:現在,我們想刪除不是邊緣的像素(設置它們的值為0)。你可能會說,我們可以簡單地選取梯度值最高的像素,這些就是我們的邊。然而,在真實的圖像中,梯度不是簡單地在只一個像素處達到峰值,而是在臨近邊緣的像素處都非常高。因此我們在梯度方向上取3×3附近的局部最大值。

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

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

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

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

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

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

遲滯閾值化

Canny 邊緣檢測的問題:

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

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

Canny邊緣檢測器在這種情況下會失敗,因為沒有理解圖像的上下文

語義理解對于邊緣檢測是至關重要的,這就是為什么使用機器學習或深度學習的基于學習的檢測器比canny邊緣檢測器產生更好的結果。

OpenCV中基于深度學習的邊緣檢測

OpenCV在其全新的DNN模塊中集成了基于深度學習的邊緣檢測技術。你需要OpenCV 3.4.3或更高版本。這種技術被稱為整體嵌套邊緣檢測或HED,是一種基于學習的端到端邊緣檢測系統,使用修剪過的類似vgg的卷積神經網絡進行圖像到圖像的預測任務。

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

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

網絡結構:整體嵌套邊緣檢測

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

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

在OpenCV中訓練深度學習邊緣檢測的代碼

OpenCV使用的預訓練模型已經在Caffe框架中訓練過了,可以這樣加載:

shdownload_pretrained.sh

網絡中有一個crop層,默認是沒有實現的,所以我們需要自己實現一下。

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]]

現在,我們可以重載這個類,只需用一行代碼注冊該層。

cv.dnn_registerLayer('Crop',CropLayer)

現在,我們準備構建網絡圖并加載權重,這可以通過OpenCV的dnn.readNe函數。

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

現在,下一步是批量加載圖像,并通過網絡運行它們。為此,我們使用cv2.dnn.blobFromImage方法。該方法從輸入圖像中創建四維blob。

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

其中:

image:是我們想要發送給神經網絡進行推理的輸入圖像。

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

size:輸出圖像的空間大小。它將等于后續神經網絡作為blobFromImage輸出所需的輸入大小。

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

mean:為了進行歸一化,有時我們計算訓練數據集上的平均像素值,并在訓練過程中從每幅圖像中減去它。如果我們在訓練中做均值減法,那么我們必須在推理中應用它。這個平均值是一個對應于R, G, B通道的元組。例如Imagenet數據集的均值是R=103.93, G=116.77, B=123.68。如果我們使用swapRB=False,那么這個順序將是(B, G, R)。

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

在我們這個場景下:

inp=cv.dnn.blobFromImage(frame,scalefactor=1.0,size=(args.width,args.height), 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])) 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)

結果:

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

中間的圖像是人工標注的圖像,右邊是HED的結果

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

中間的圖像是人工標注的圖像,右邊是HED的結果

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

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

責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 邊緣檢測
    +關注

    關注

    0

    文章

    92

    瀏覽量

    18223
  • OpenCV
    +關注

    關注

    31

    文章

    635

    瀏覽量

    41385
  • 深度學習
    +關注

    關注

    73

    文章

    5506

    瀏覽量

    121265

原文標題:基于OpenCV深度學習的邊緣檢測

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    AI模型部署邊緣設備的奇妙之旅:目標檢測模型

    并非易事,它涉及到從選擇合適的算法架構到針對特定硬件平臺進行優化等一系列復雜的工作。 接下來,我們將詳細介紹如何在資源受限的邊緣設備上成功部署目標檢測模型,探索其背后的原理和技術,并討論解決該領域內常見
    發表于 12-19 14:33

    AI模型部署邊緣設備的奇妙之旅:如何在邊緣端部署OpenCV

    。 接下來我們通過幾個例子來介紹如何在邊緣端設備使用OpenCV進行形狀檢測。 3.1 矩形檢測 import lockzhiner_vis
    發表于 12-14 09:31

    AI模型部署邊緣設備的奇妙之旅:如何在邊緣端部署OpenCV

    力的研究工具。在深度學習中,我們會經常接觸到兩個名稱,圖像處理和計算機視覺,它們之間有什么區別呢?圖像處理(ImageProcessing)目的:圖像處理主要集中在
    的頭像 發表于 12-14 09:10 ?246次閱讀
    AI模型部署<b class='flag-5'>邊緣</b>設備的奇妙之旅:如<b class='flag-5'>何在</b><b class='flag-5'>邊緣</b>端部署<b class='flag-5'>OpenCV</b>

    如何用OpenCV的相機捕捉視頻進行人臉檢測--基于米爾NXP i.MX93開發板

    的是Haar特征人臉檢測,此外OpenCV中還集成了深度學習方法來實現人臉檢測。 【參考資料】 使用O
    發表于 11-15 17:58

    何在智能手機系統中使用bq27505

    電子發燒友網站提供《如何在智能手機系統中使用bq27505.pdf》資料免費下載
    發表于 10-17 10:21 ?0次下載
    如<b class='flag-5'>何在</b>智能手機系統<b class='flag-5'>中使</b>用bq27505

    FPGA做深度學習能走多遠?

    ,共同進步。 歡迎加入FPGA技術微信交流群14群! 交流問題(一) Q:FPGA做深度學習能走多遠?現在用FPGA做深度學習加速成為一個熱門,深鑒科技,商湯,曠視科技等都有基于FPG
    發表于 09-27 20:53

    何在汽車CAN應用中使用負邊緣觸發觸發器節省電力

    電子發燒友網站提供《如何在汽車CAN應用中使用負邊緣觸發觸發器節省電力.pdf》資料免費下載
    發表于 09-13 10:06 ?0次下載
    如<b class='flag-5'>何在</b>汽車CAN應用<b class='flag-5'>中使</b>用負<b class='flag-5'>邊緣</b>觸發觸發器節省電力

    opencv圖像識別有什么算法

    OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件庫,提供了大量的圖像處理和計算機視覺相關的算法。以下是一些常見的OpenCV
    的頭像 發表于 07-16 10:40 ?1092次閱讀

    opencv的主要功能有哪些

    OpenCV提供了豐富的圖像處理功能,包括圖像的讀取、顯示、保存、轉換等。此外,OpenCV還支持圖像的濾波、邊緣檢測、形態學操作、圖像金字塔等高級圖像處理技術。 特征
    的頭像 發表于 07-16 10:35 ?1598次閱讀

    基于AI深度學習的缺陷檢測系統

    在工業生產中,缺陷檢測是確保產品質量的關鍵環節。傳統的人工檢測方法不僅效率低下,且易受人為因素影響,導致誤檢和漏檢問題頻發。隨著人工智能技術的飛速發展,特別是深度學習技術的崛起,基于A
    的頭像 發表于 07-08 10:30 ?1501次閱讀

    基于深度學習的小目標檢測

    在計算機視覺領域,目標檢測一直是研究的熱點和難點之一。特別是在小目標檢測方面,由于小目標在圖像中所占比例小、特征不明顯,使得檢測難度顯著增加。隨著深度
    的頭像 發表于 07-04 17:25 ?936次閱讀

    嵌入式學習-飛凌ElfBoard ELF 1板卡 - 如何在Ubuntu中編譯OpenCV

    使用X86架構的OpenCV庫,利用主機的強大計算性能和豐富的調試工具,可以加速開發進程并簡化調試環節。下面就跟小伙伴詳細講述如何在Ubuntu環境下將 OpenCV 編譯為 X86 架構。 開發環境
    發表于 06-07 09:21

    ELF 1技術貼|如何在Ubuntu中編譯OpenCV

    OpenCV庫,利用主機的強大計算性能和豐富的調試工具,可以加速開發進程并簡化調試環節。下面就跟小伙伴詳細講述如何在Ubuntu環境下將OpenCV編譯為X86
    的頭像 發表于 05-31 16:41 ?1177次閱讀
    ELF 1技術貼|如<b class='flag-5'>何在</b>Ubuntu中編譯<b class='flag-5'>OpenCV</b>庫

    深度學習檢測小目標常用方法

    深度學習的效果在某種意義上是靠大量數據喂出來的,小目標檢測的性能同樣也可以通過增加訓練集中小目標樣本的種類和數量來提升。
    發表于 03-18 09:57 ?738次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>學習</b><b class='flag-5'>檢測</b>小目標常用方法

    何在測試中使用ChatGPT

    Dimitar Panayotov 在 2023 年 QA Challenge Accepted 大會 上分享了他如何在測試中使用 ChatGPT。
    的頭像 發表于 02-20 13:57 ?771次閱讀
    主站蜘蛛池模板: 骚黄视频| 欧美三级第一页| 午夜a视频| 日本视频三区| 国产亚洲婷婷香蕉久久精品 | 精品啪啪| 国产三级在线观看视频| 91噜噜噜| 天天挨操| 成人国产一区二区三区| 久久亚洲精品国产亚洲老地址| 久久亚洲国产午夜精品理论片 | 国产精品虐乳在线播放| 在线观看886影院成人影院| 狠狠尻| 年轻人影院www你懂的| 久久夜色精品国产噜噜小说| 国产欧美高清| 午夜欧美福利视频| 九九碰| 中年艳妇乱小玩| 亚洲日本色图| 欧美一级艳片视频免费观看| 激情综合网激情| 亚洲色图激情| 国产不卡毛片| 亚洲1区2区3区4区| 五月婷婷六月婷婷| 久久鲁视频| 婷婷综合网站| 日日干夜夜操视频| 日日干夜夜欢| 网站啪啪| 亚洲一级毛片在线观播放| 欧美在线观看视频一区| 成人看片在线观看| 久久女同| 欧美不卡视频在线观看| 色视频在线免费看| 三级黄色免费| 国产美女主播在线|