select_shape_proto是一個非常有用的region篩選算子,但是由於難以理解,因此一般人使用得不是太多。
算子簽名如下:
select_shape_proto(Regions, Pattern : SelectedRegions : Feature, Min, Max : )
其中Feature可以取這7種模式:'distance_center'、'distance_contour'、'distance_dilate'、'fits'、'overlaps_rel'、'overlaps_abs'、'covers'。
下面逐個解析。
提供一張圖供讀者研究驗證:
select_shape_proto(Regions, Pattern, SelectedRegions, 'distance_center', 0 ,60)
distance_center:判斷Regions中每個region的中心(area_center)距離Pattern中心的距離,Min和Max控制距離的下限和上限,可以取負數。
distance_contour:判斷Regions中每個region的邊緣距離Pattern邊緣的距離,Min和Max控制距離的下限和上限,可以取負數。
需要注意的是,如果Pattern中的區域是不連續的,也就說Pattern通過connection操作以后可以變成多個region,那么此時'distance_center'、'distance_contour'模式的篩選結果較難預料,要盡量避免這種情況。例如下面這樣的Pattern:
distance_dilate:和distance_contour極為類似,當Pattern的膨脹量為Min~Max中的某個值時,Regions中剛好(注意“剛好”這兩個字)能與Pattern有交集的region被選出。在計算方法上與'distance_contour'模式有極細微的區別,更大的區別是——如果Pattern中的區域不連續,也不影響'distance_dilate'模式的這一特性。
但是'distance_dilate'模式有個非常嚴重的缺點,當Regions中的元素非常多(例如超過50個)的時候,該模式下整個算子執行時間非常長,經常超過1秒鍾。此時如果用'distance_contour'模式設法實現類似的功能,效率遠高於'distance_dilate'模式。
select_shape_proto(Regions, Pattern, SelectedRegions, 'fits', Min, Max )
fits:判斷Regions中每個region通過平移(shift,不能旋轉)能不能完全蓋住(fit)Pattern,如果能,則將這些region篩選出來;這里參數'Min'、'Max'無效。
(圖中三個大的矩形和紅色圓平移以后都能完全蓋住藍色的小矩形Pattern,因此被選出)
select_shape_proto(Regions, Pattern, SelectedRegions, 'overlaps_rel', 5 ,6)
overlaps_rel:根據Pattern和Regions中每個region的重疊部分進行篩選,overlaps_rel定義為重疊部分面積和當前region面積的比值,用於篩選的重疊比例由參數'Min'、'Max'控制,有效取值為0-100。
(圖中紅色矩形和大圓('margin形式表示')的重疊部分占紅色矩形的比例為5.76875%,剛好位於Min和Max之間,因此被選出)
overlaps_abs:跟overlaps_rel類似,不過由比值(相對值)改成了重疊的絕對值,即重疊的像素面積。
covers:看了半天、試了半天,沒搞懂這個模式的規律,以后再說。
使用經驗:就我個人來說,我覺得這7種特征模式中'distance_center'、'distance_contour'、'distance_dilate'、'overlaps_rel'最有用。