骨架提取演算法應用

2021-10-02 05:32:15 字數 1646 閱讀 1696

1、引言

根據個人理解,骨架提取(顧名思義)就是根據各個連通區域,將其抽離出與其輪廓近似的單畫素表示形態。以便於直觀觀察、影象的後繼處理。因此可以將其視為影象處理中的預處理,其操作是基於二值圖。為了更好的提取影象骨架,必要時需要對影象進行相應的預處理(比如去噪、濾波、形態學變換等)。

我的應用主要集中在對一些包含線條型的零件檢測,除此之外,骨架提取的應用特別廣泛,比如文字的檢測/識別、道路觀測等。

2、原理

zhang和suen提出了一種帶有模板匹配的並行細化演算法,生成乙個畫素寬的骨架,不僅保持影象的連通性,並且產生更薄的結果,保持快速的處理速度。

zhang-suen細化演算法通常是乙個迭代演算法,整個迭代過程分為兩步

第一步:迴圈所有前景畫素點,對符合如下條件的畫素點標記為刪除:

1)2<=n(p1)<=6

2)s(p1)=1

3)p2p4p6=0

4)p4p6p8=0

其中n(p1)表示跟p1相鄰的8個畫素點中,為前景畫素點的個數,s(p1)表示從p2-p9-p2畫素**現0-1的累積次數,其中0表示背景,1表示前景,完整的p1-p9的畫素位置分布如表1:

第二步:

1)2<=n(p1)<=6

2)s(p1)=1

3)p2p4p8=0

4)p2p6p8=0

迴圈以上兩個步驟,直到兩步中沒有畫素被標記為刪除為止,輸出的結果即為二值影象細化後的骨架。

3、案例核心**

//zhang-sun細化演算法

void

skeletonextraction()

//條件①2<=b(p1)<=6if(

(whitepointcount >=2)

&&(whitepointcount <=6)

)elseif(

!inodditerations &&

(neighbourhood[1]

* neighbourhood[5]

* neighbourhood[7]

==0)&&

(neighbourhood[1]

* neighbourhood[3]

* neighbourhood[7]

==0))

}}}}

}if(deletelist.

size()

==0)break

;for

(size_t i =

0; i < deletelist.

size()

; i++

) deletelist.

clear()

; inodditerations =

!inodditerations;

}namedwindow

("骨架提取",0

);imshow

("骨架提取"

提取骨架 細化

bool iscontourp int x,int y,iplimage src img int linebytes src img widthstep byte lpptr byte src img imagedata linebytes y x p 2 lpptr linebytes true ...

視覺組學習內容 Zhang Suen骨架提取演算法

封裝 這是視覺組dalao給大家布置的學期末學習任務。因為之前沒有接觸過linux,環境也沒有配置好,對很多操作不夠熟悉,做這個任務從頭到尾大約花了兩天合計15個小時的時間,中間還問過dalao兩個小時左右的問題 此處給大佬比心 雖然和大佬說的三個小時相去甚遠但是最後還是趕在ddl之前完成了任務。總...

小程式(uniapp)骨架屏應用

1.基本理解 骨架屏實現原理很簡單,就是通過佔位線框元素,漸進式載入資料。骨架屏是結合了懶載入功能,在頁面沒有載入完成之前,先呈現頁面基本結構。效果圖 注意點 1,引入組建後,template 標籤內加入 2,data物件中設定showskeleton true 預設一開始進入頁面載入骨架屏內容。3...