select_shape_xld特徵篩選中'row'和'row1'的區別和注意點

 

常見的特徵篩選算子有select_shapeselect_shape_xld

其中,select_shape用於篩選Regionselect_shape_xld用於篩選Xld。實際項目中,經常需要根據行、列來篩選符合條件的Region或者Xld。(如下圖)

 

 

特徵'row'是由算子area_center(Regions : : : Area, Row, Column)計算得出的。(如果是Xld,則是area_center_xld

特徵'row1''row2'是由算子smallest_rectangle1(Regions : : : Row1, Column1, Row2, Column2)計算得出的。(如果是Xld,則是smallest_rectangle1_xld

 

這其中,最值得注意的是area_center_xld算子。它的算子描述中有這麼一句話:

 

 

實際應用中發現,對於一根完全水平或者完全垂直的Xld,使用'row'篩選,篩選結果一般爲空(下式中Min大於0時)。

select_shape_xld(XLD : SelectedXLD : 'row', 'and', Min, Max : )

 

這是因爲此時'row'特徵等於0。—— area_center_xld(XLD : : : Area, Row, Column, PointOrder)

 

因此,對於Xld的行、列的篩選,一般建議使用 'row1'、'column1',而不建議使用 'row'。

 

可以通過下面的程序加深理解:

 1 dev_set_draw ('margin')
 2 dev_set_line_width (2)
 3 dev_set_color ('green')
 4 set_system ('tsp_clip_region', 'false')
 5 dev_get_window (WindowHandle)
 6 set_display_font (WindowHandle, 18, 'Courier', 'true', 'false')
 7 
 8 gen_image_const (Image, 'byte', 512, 512)
 9 gen_rectangle1 (ROI, 100, 50, 160, 300)
10 
11 disp_message (WindowHandle,'(100, 50)' , 'image', 100, 50, 'black', 'true')
12 disp_message (WindowHandle,'(160, 300)' , 'image', 160, 300, 'black', 'true')
13 
14 *Region轉Xld, 並且分割Xld
15 gen_contour_region_xld (ROI, Contours, 'border')
16 segment_contours_xld (Contours, ContoursSplit, 'lines_circles', 5, 4, 2)
17 select_shape_xld (ContoursSplit, XLD_Horiz, 'ratio', 'and', 0, 0.1)
18 
19 *矩形頂邊行座標是100,底邊行座標是160
20 dev_clear_window ()
21 select_shape_xld (XLD_Horiz, XLD_UP, 'row', 'and', 90, 110)     //XLD_UP爲空
22 select_shape_xld (XLD_Horiz, XLD_Down, 'row', 'and', 130, 999)  //XLD_Down不爲空,有1個對象
23 select_shape_xld (XLD_Horiz, XLD_ALL, 'row', 'and', 90, 999)    //XLD_ALL不爲空,有1個對象
24 
25 dev_clear_window ()
26 select_shape_xld (XLD_Horiz, XLD_UP2, 'row1', 'and', 90, 110)    //XLD_UP2不爲空,有1個對象
27 select_shape_xld (XLD_Horiz, XLD_Down2, 'row1', 'and', 130, 999) //XLD_Down2不爲空,有1個對象
28 select_shape_xld (XLD_Horiz, XLD_ALL2, 'row1', 'and', 90, 999)   //XLD_ALL2不爲空,有2個對象

 

放大窗口後發現了XLD_UP爲空、XLD_Down不爲空的原因:XLD_Down左端有一個“毛刺”,而XLD_UP是一根完全水平的直線(它的Area、Row、Column均爲0)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章