一、select_region_point
select_region_point(Regions:DestRegions:row,column:)
算子含義:選擇包含給定像素的所有區域。
Regions是待測試的Region集合,DestRegions是包含給定像素點的所有區域集合。
舉例如下:

1 read_image (Image, 'C:/Users/02/Desktop/shape.png')
2 threshold (Image, Region, 0, 50)
3 fill_up (Region, RegionFillUp)
4 difference (RegionFillUp, Region, RegionDifference)
5 opening_circle (RegionDifference, RegionDifference, 1.5)
6
7 connection (RegionFillUp, ConnectedRegions)
8 *RegionHub中共有3個元素
9 concat_obj (ConnectedRegions, RegionDifference, RegionHub)
10
11 row := 175
12 col := 253
13 select_region_point (RegionHub, DestRegions, row, col)
14 dev_display (Image)
15 dev_display (DestRegions)
16 gen_cross_contour_xld (Cross, row, col, 6, 0.80)

其實就是將所有包含點(175, 253)的區域篩選出來了。這個算子在某些需要對Region進行篩選的項目中可能會有用。
二、select_region_spatial
select_region_spatial(Regions1, Regions2 : : Direction : RegionIndex1, RegionIndex2)
算子含義:根據區域的位置關系進行篩選。
雖然Regions1、Regions2都可以包含多個區域,但為了簡單起見,這里只研究Regions1只含一個區域的情況。舉例如下(可參考select_region_spatial.hdev):

1 * Select regions by desired neighboring relation
2 read_image (Meningg6, 'meningg6')
3 gauss_filter (Meningg6, ImageGauss, 7)
4 * Extract watersheds and basins from image
5 watersheds (ImageGauss, Regions, Watersheds)
6 dev_clear_window ()
7 dev_set_color ('light grey')
8 * select_obj (Regions, Reference, 261)
9 select_shape (Regions, Reference, ['row','column'], 'and', [250,250], [260,260])
10 * Choose regions by desired neighboring relation
11 select_region_spatial (Reference, Regions, 'left', RegionIndex1, RegionIndex2)
12 dev_set_color ('red')
13 select_obj (Regions, ObjectSelected1, RegionIndex2)
14 select_region_spatial (Reference, Regions, 'right', RegionIndex1, RegionIndex2)
15 dev_set_color ('green')
16 select_obj (Regions, ObjectSelected2, RegionIndex2)
17 select_region_spatial (Reference, Regions, 'above', RegionIndex1, RegionIndex2)
18 dev_set_color ('blue')
19 select_obj (Regions, ObjectSelected3, RegionIndex2)
20 select_region_spatial (Reference, Regions, 'below', RegionIndex1, RegionIndex2)
21 dev_set_color ('cyan')
22 select_obj (Regions, ObjectSelected4, RegionIndex2)
23
24 dev_set_color ('black')
25 area_center (Reference, Area, Row, Column)
26 gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)
27
28 *繪制4條斜45度的線。gen_line是我自己封裝的函數,如果你沒有類似的函數,可以將下面4行注釋掉
29 gen_line (Line1, Row, Column, rad(45), 400, 'xld')
30 gen_line (Line2, Row, Column, rad(135), 400, 'xld')
31 gen_line (Line3, Row, Column, rad(-45), 400, 'xld')
32 gen_line (Line4, Row, Column, rad(-135), 400, 'xld')
33
34 *顯示所有小區域的中心點
35 area_center (ObjectSelected1, Area1, Row1, Column1)
36 gen_cross_contour_xld (Cross1, Row1, Column1, 6, 0.785398)
37
38 area_center (ObjectSelected2, Area2, Row2, Column2)
39 gen_cross_contour_xld (Cross2, Row2, Column2, 6, 0.785398)
40
41 area_center (ObjectSelected3, Area3, Row3, Column3)
42 gen_cross_contour_xld (Cross3, Row3, Column3, 6, 0.785398)
43
44 area_center (ObjectSelected4, Area4, Row4, Column4)
45 gen_cross_contour_xld (Cross4, Row4, Column4, 6, 0.785398)

上面程序中,Reference是參考區域,Regions是它周邊所有區域的集合。這些區域與Reference的位置關系共有4種:即左側(left)、右側(right)、上方(above)、下方(below)。
RegionIndex1的含義不太重要,這里不研究。RegionIndex2指的是符合某種位置關系(例如"left")的區域在原Regions中的索引集合,它是一個元組,例如[4, 6, 8, 15]。
通過select_obj (Regions, ObjectSelected, RegionIndex2),就可以將這些區域根據索引全部取出,輸出到ObjectSelected中。
那么有一個問題是:程序中的“上下左右”位置具體是如何界定的呢?
通過上面程序的執行結果可知:它以參考區域的中心點(用area_center)為起點,分別向東北、西北、西南、東南繪制了4條傾斜45°的直線作為分界線,這樣整個畫面就被分成了4部分。然后用area_center獲得Regions中每一個區域的中心點坐標,根據中心點坐標,就可以知道它具體是屬于哪一部分(left、right、above、below)了。
--------------------------------------------
本文系原創,轉載請注明出處。
如果文章對您有幫助,可以點擊下方的【好文要頂】或【關注我】;如果您想進一步表示感謝,可通過網頁右側的【打賞】功能進行打賞。
感謝您的支持,我會繼續寫出更多的相關文章!文章有不理解的地方歡迎跟帖交流,博主經常在線!^_^
浙公網安備 33010602011771號