RM新时代网站-首页

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

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

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

FPGA圖像處理之Canny邊緣檢測

FPGA開源工坊 ? 來源:FPGA開源工坊 ? 2023-11-17 09:10 ? 次閱讀

在邊緣檢測算法里面Sobel是比較簡單的一個(gè)算法,但是其檢測出來的邊緣往往是比較粗的,效果不是很好,因?yàn)槲覀冏罾硐氲倪吘壙隙ň褪且粋€(gè)寬度為1的細(xì)線。

Canny算法在此基礎(chǔ)上進(jìn)行了改進(jìn),通過使用邊緣的梯度信息進(jìn)行非最大值抑制(NMS)和利用雙閾值,這些措施消除了假性邊緣,提高了邊緣檢測的效果。

Canny邊緣檢測分為以下幾個(gè)部分:

高斯濾波

Sobel邊緣檢測

非最大值抑制

雙閾值邊緣檢測

弱邊緣連接

高斯濾波和Sobel邊緣檢測在之前的文章里面介紹過,在這里不再贅述。

可以參見:FPGA圖像處理--Sobel邊緣檢測FPGA圖像處理--高斯模糊(一)FPGA圖像處理--高斯模糊(二)這三篇文章。

在本篇中為大家介紹Canny邊緣檢測中的NMS部分。

我們通過Sobel的計(jì)算可以獲得兩個(gè)信息,分別是梯度的幅值和方向。

梯度的幅值可以表示為:

因?yàn)槲覀兿朐贔PGA中實(shí)現(xiàn)Canny算子,而根號對FPGA來說消耗的資源是比較多的,因此我們選擇另一種幅值的表示方式:

梯度的方向可以表示為:

接下來就可以通過梯度的幅值和方向來做NMS了。

我們在做完Sobel之后得到的幅值和方向也就是下面一幅示意圖

ec822e8a-84e5-11ee-939d-92fbcf53809c.png

每一個(gè)點(diǎn)都有其方向和梯度的值。

假如我們Sobel檢測的閾值設(shè)置的為90,那么在上面示意圖中左上角的99,108,110,97這幾個(gè)點(diǎn)都會被看做邊緣部分,在Canny中會對這個(gè)做NMS,首先看到99他的梯度方向向下,然后梯度方向下一個(gè)值是110比99大,那么就認(rèn)為99這個(gè)點(diǎn)不是邊緣,110比他更靠近邊緣部分,這樣99就被抑制掉了,邊緣也能夠被細(xì)化。對于108來說,他的梯度方向下一個(gè)值是77,比108小,那么108就不會被抑制。通過這種方式就能完成非最大值抑制。

在上圖里面展示的梯度方向只有0,45,90這些角度,然而在實(shí)際計(jì)算中不可能只有這些角度的,所以我們要進(jìn)行插值計(jì)算,接下來就說明一下如何進(jìn)行插值計(jì)算。

ec96f810-84e5-11ee-939d-92fbcf53809c.png

以任意一點(diǎn)為坐標(biāo)原點(diǎn),如上圖中的5這個(gè)點(diǎn),他周圍有一個(gè)3*3的矩陣,然后他的梯度方向是紅色箭頭的方向。這個(gè)方向不在X和Y軸的45°方向(PS:我們規(guī)定圖像向下為Y軸正方向,向右為X軸正方向,象限為順時(shí)針方向)。

因?yàn)槠洳辉?5°方向,那么就不能直接將5的梯度和1,9的梯度進(jìn)行比較來確定是否對5這點(diǎn)進(jìn)行抑制,那么我們就需要使用插值的方式來生成兩個(gè)點(diǎn)(亞像素點(diǎn))進(jìn)而進(jìn)行判斷。

在上圖里面可以看到GX和GY的方向相同并且GX大于GY,所以我們分別選取6 9和1 4這四個(gè)點(diǎn)來進(jìn)行插值以生成兩個(gè)亞像素點(diǎn)。

在之前的介紹里面我們知道梯度的方向是用arctan來表示的,但是這個(gè)計(jì)算比較復(fù)雜,我們也僅僅是為了插值計(jì)算,所以并不需要進(jìn)行arctan的計(jì)算,只需要拿到GX和GY的值即可。

因?yàn)镚X大于GY,所以讓GY/GX這樣得到一個(gè)小于1的值,記作weight。那么我們就可以得到一個(gè)比例關(guān)系:

point1 = 9*weight +6 *(1 - weight)

point2 = 1*weight+4* (1 - weight)

這樣就能得到兩個(gè)亞元素點(diǎn),通過比較5這個(gè)點(diǎn)和point1以及point2的大小就可以決定是否對其進(jìn)行抑制。

通過將GX和GY的關(guān)系可以分為以下四種情況:

|GX| >|GY| 并且 GX和GY同號

|GX|>|GY|并且 GX和GY異號

|GX|

|GX|

其他幾個(gè)方向的分析就不贅述了,可以直接看代碼里面的實(shí)現(xiàn):

代碼里面矩陣的坐標(biāo)關(guān)系如下圖:

eca77b86-84e5-11ee-939d-92fbcf53809c.png

python實(shí)現(xiàn)的參考模型如下:

ecaea1b8-84e5-11ee-939d-92fbcf53809c.png

可以根據(jù)上面的坐標(biāo)對應(yīng)關(guān)系來分析剩下的幾種情況。

來看一下實(shí)現(xiàn)的效果:

可以明顯看到nms之后的結(jié)果相對于sobel之后的結(jié)果要細(xì)化很多。

Python的NMS參考模型介紹完了,之后就是Verilog的RTL怎么實(shí)現(xiàn)它,今天就寫到這里,休息。

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

    關(guān)注

    1629

    文章

    21729

    瀏覽量

    602977
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1289

    瀏覽量

    56722
  • 邊緣檢測
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    18204

原文標(biāo)題:FPGA圖像處理--Canny邊緣檢測(一)

文章出處:【微信號:FPGA開源工坊,微信公眾號:FPGA開源工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Canny雙閾值邊緣檢測和弱邊緣連接詳解

    在上一篇FPGA圖像處理--Canny邊緣檢測(一)里介紹了
    的頭像 發(fā)表于 11-18 17:07 ?2593次閱讀

    基于FPGA的實(shí)時(shí)邊緣檢測系統(tǒng)設(shè)計(jì),Sobel圖像邊緣檢測,FPGA圖像處理

    的主要特征提取手段 。由于實(shí)時(shí)視頻圖像邊緣檢測需要處理的數(shù)據(jù)量非常大,所以采用一般的軟件方法實(shí)現(xiàn)起來處理速度慢,無法滿足實(shí)時(shí)性的要求。 隨
    發(fā)表于 05-24 07:45

    基于Canny邊緣檢測算子的圖像檢索算法

    【摘要】:針對依賴傳統(tǒng)Canny算子的基于邊緣圖像檢索系統(tǒng)所存在的不足,提出一種基于Canny邊緣檢測
    發(fā)表于 04-24 10:03

    基于FPGA的數(shù)字圖像處理中的邊緣檢測系統(tǒng)

    `基于FPGA的數(shù)字圖像處理領(lǐng)域的邊緣檢測系統(tǒng)。該系統(tǒng)實(shí)現(xiàn)了從24位真彩色圖片的存儲到VGA顯示邊緣
    發(fā)表于 06-26 13:36

    【DragonBoard 410c試用體驗(yàn)】OpenCV中canny算子邊緣檢測

    `具體介紹之前,先來一起看看邊緣檢測的一般步驟 濾波:邊緣檢測的算法主要是基于圖像強(qiáng)度的一階和二階導(dǎo)數(shù),但導(dǎo)數(shù)通常對噪聲很敏感,因此必須采用
    發(fā)表于 09-11 23:24

    關(guān)于canny算子邊緣檢測的問題

    本帖最后由 豆吖豆 于 2017-4-4 23:14 編輯 grd=edge(Egray,'canny',0.09,'both');大神門 問一下這個(gè)后面的0.09和both什么意思是指的是Egray圖像的上下大小還是,另外可以的話能大概說說這個(gè)
    發(fā)表于 04-04 22:27

    基于FPGA的Sobel邊緣檢測的實(shí)現(xiàn)

    我們在此基礎(chǔ)上修改,從而實(shí)現(xiàn),基于FPGA的動態(tài)圖片的Sobel邊緣檢測、中值濾波、Canny算子邊緣
    發(fā)表于 08-29 15:41

    圖象處理中的哈夫變換和Canny邊緣檢測算法

    圖象處理中的邊緣檢測------canny算子
    發(fā)表于 03-16 06:48

    Labview圖像處理——邊緣檢測

    。Sobel算子檢測方法對灰度漸變和噪聲較多的圖像處理效果較好,sobel算子對邊緣定位不是很準(zhǔn)確,圖像
    發(fā)表于 12-01 12:16

    基于Canny 法的紅外小目標(biāo)邊緣檢測方法

    從紅外圖像的特點(diǎn)出發(fā),基于Canny算法進(jìn)行了目標(biāo)邊緣檢測。首先,對源圖像進(jìn)行小波分解和重構(gòu),對圖像
    發(fā)表于 05-27 15:02 ?12次下載

    基于Canny邊緣檢測算子的圖像檢索算法

      針對依賴傳統(tǒng)Canny算子的基于邊緣圖像檢索系統(tǒng)所存在的不足,提出一種基于Canny邊緣
    發(fā)表于 02-11 11:22 ?28次下載

    基于FPGA圖像邊緣檢測

    基于FPGA圖像邊緣檢測 引言     圖像邊緣
    發(fā)表于 01-14 11:07 ?1874次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>圖像</b><b class='flag-5'>邊緣</b><b class='flag-5'>檢測</b>

    實(shí)時(shí)圖像邊緣檢測的設(shè)計(jì)及FPGA實(shí)現(xiàn)

    文中將FPGA應(yīng)用于實(shí)時(shí)圖像邊緣檢測系統(tǒng),從而實(shí)現(xiàn)動態(tài)實(shí)時(shí)圖像邊緣
    發(fā)表于 12-22 17:06 ?39次下載
    實(shí)時(shí)<b class='flag-5'>圖像</b><b class='flag-5'>邊緣</b><b class='flag-5'>檢測</b>的設(shè)計(jì)及<b class='flag-5'>FPGA</b>實(shí)現(xiàn)

    canny邊緣檢測

    《OpenCV3編程入門》書本配套源代碼canny邊緣檢測
    發(fā)表于 06-06 15:20 ?2次下載

    Canny圖像算法仿真驗(yàn)證原理與實(shí)現(xiàn)

    先讀為快,以結(jié)果為導(dǎo)向,本期介紹Canny圖像算法仿真驗(yàn)證,后續(xù)將介紹canny算法原理與實(shí)現(xiàn),歡迎持續(xù)關(guān)注,公眾號設(shè)置星標(biāo),不錯(cuò)過每一次推送~ 一、簡要說明 1.1 算法流程 Canny
    的頭像 發(fā)表于 10-15 09:10 ?1893次閱讀
    RM新时代网站-首页