天天看點

select_shape算子的使用與特性

用過Halcon的基本都用過這個select_shape,靈活用起來,還是非常好用的。

下面來說說它的使用。

我們門檻值分割後,通常的想法是直接選取自己感興趣的。

但是這是非常理想的狀态,按這個思路寫的程式,八成要被工程蹂躏。

一般用select_shape算子來進行兩類的操作來達成工程上更好的魯棒性:

  1. 首先是用select_shape很小心的過濾掉确定沒用的幹擾區域,但是有用資訊又不會損失太大。

    比如用area去掉dyn_threshold提取出來的很多小噪點。比如離目标較遠的其他選中區域去掉等。

  2. 進行blob分析和形态學操作,對感興趣的目标特征進行各種特征增強,為後面的最後提取目标做準備。
  3. 最後再用select_shape,一般用多條件組合來選取目标區域。

這樣寫出來的程式才具有更好的魯棒性,更能适應工程需求。

在它的各項特征中,最常用而有效的就是area面積了,

另外其他的特性雖然用的沒那麼普及,但是深入了解每個特性的具體定義,絕對是事半功倍。

比如用圓度去除非圓弧長條,反之,離心率提取細長特征體等等。

磨刀不誤砍柴工,花在這個select_shape上的時間是絕對值得的。

  • 題外話:模闆比對,邊緣提取,多種門檻值分割都值得花力氣掌握,後面有時間陸續寫。

下面是select_shape的Feature的中英文解釋

核心:提取出來目标形狀和幹擾形狀最大最明顯的本質特征差别,組合特性進行篩選。

'area': Area of the object
           

目标的面積:ROI面積大小進行篩選,去掉小面積的幹擾,和其他組合效果更好。

'row': Row index of the center
'column': Column index of the center
           

中心行列的值:定位在一個範圍進行篩選

'width': Width of the region
'height': Height of the region
           

區域的寬度和高度:對區域的整體大小占地進行篩選

'row1': Row index of upper left corner
'column1': Column index of upper left corner
           

左上角的行列值:可以得到形狀的最左最上值

'row2': Row index of lower right corner
'column2': Column index of lower right corner
           

右下角的行列值:可以得到形狀的最右最下值

圓度,與圓相似程度,圓度=區域面積/((中心到區域邊界的最大距離)^2PI),區域面積和以最大距離為半徑的圓面積做比較,越接近圓,這個比值就會越接近1。

圓度對于大的凸起、孔洞和不相連的區域敏感。必須實心圓度才高。

緊湊度=輪廓的長度^2/(4區域的面積PI)。一個圓的緊湊度是1。如果區域是長條或有孔,則緊湊度大于1。

緊湊度對粗糙度和孔洞敏感。大于1,外表越是粗糙毛刺多,值越大。孔洞多,值越大。越接近實心圓越緊湊。鐵匠鍛鐵塊就是這樣的。

輪廓長度:輪廓線的總長度。同等尺寸下,多刺多孔的值大。

凸性,又稱凸度,凸性=凸包面積/原區域面積,如果是矩形、圓,凸性為1,如果區域含有缺口或孔洞,凸性小于1. 凸包内每個頂點所對應的内角是否小于180度

矩形相似度,越接近矩形,就越接近1,否則小于1

等效橢圓的主半徑

等效橢圓的副半徑

等效橢圓的方向

離心率,等距=等效橢圓主軸/副軸

蓬松性=PI主軸*副軸/區域面積

結構元素

最小外接圓的半徑

最小内接圓的半徑

區域最大内接矩形的寬度

區域最大内接矩形的高度

從區域邊界到中心的平均距離

從區域邊界到中心的偏差

圓度

多邊形的邊的數量

連接配接區域的數量

孔洞數

目标的孔洞面積

區域最大直徑

區域方向

歐拉數

最小外接矩形的方向

最小外接矩形的長度的一半

最小外接矩形的寬度的一半

區域的幾何矩

繼續閱讀