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