日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

Halcon区域形状特征-area_center、area_holes、select_shape、inner_circle和smallest_rectangle2算子

發布時間:2023/12/18 ChatGpt 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Halcon区域形状特征-area_center、area_holes、select_shape、inner_circle和smallest_rectangle2算子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提示:文章參考了網絡上其他作者的文章,以及相關書籍,如有侵權,請聯系作者。


前言

???????在場景中選擇物體的特征是圖像測量或者識別的重要基礎。區域的形狀特征是非常常用的特征,在模式匹配中,常使用形狀特征作為匹配的依據。下面就介紹幾種常用的與區域形狀特征相關的算子。


一、區域的面積和中心(area_center)

???????提到區域的特征,最常用的莫過于區域的面積和中心點坐標信息。實際工作中,經常會使用面積或中心點進行特征的選擇和定位。Halcon中的area_center算子就是用于實現這一功能的,該算子一次返回以下兩個結果。
???????1)、面積:指的是單個區域(輸入區域可能不止一個)中包含的灰度像素數量。
???????2)、中心:指的是幾何中心點坐標,即單個區域的中心點行坐標均值和列坐標均值。
???????以一個例子說明,下面左圖為輸入的圖像;中圖為閾值分割后的圖像,其中較亮部分為提取的區域,這些區域將作為area_center 算子的輸入;右圖為求面積與形狀中心坐標的結果。其中文字標注的是對應區域的面積,文字的位置為中心位置設置行方向偏移后的位置。

???????上面右圖中第三個孔的中心坐標在控制變量窗口中可以看到,把鼠標放在圓孔的中心,可以從界面右下角的鼠標位置看到鼠標坐標值與控制變量中的值一致。

???????上述過程的代碼如下:

dev close window () *讀取圖片 read_image(Image, ' data/holes') *設置窗口屬性,為了獲取窗口句柄,供后面顯示文字用 get image_size (Image, Width, Height) *創建新窗口 dev_open_window (0, 0, width, Height, 'black', windowID) *將圖像轉化為單通道灰度圖 rgb1_to_gray (Image, GrayImage) *創建矩形選區,選擇感興趣區域 gen_rectangle1 (Rectangle, 180, 83, 371,522) reduce_domain (GrayImage, Rectangle,ROI) *閾值處理,提取圖中深色部分,即文字部分。這里閾值設置為50,基本可以提取出所有黑色文字threshold ( ROI, Region, 0, 80) *gen_image_proto (ImageReduced, ImageCleared, 0) *dev_display(Region) *將提取的整個區域中不相連的部分分割成獨立的區域 connection (Region, ConnectedRegions) *獲取不相連的區域的數量 count_obj (ConnectedRegions,Num) *計算所有不相連區域的面積和中心點坐標。Area為面積,Row和Column為中心點坐標 area_center (ConnectedRegions, Area, Row, Column) *輸出各區域的面積 for i:=1 to Num by 1 dev_set_color ('red') select_obj (ConnectedRegions, ObjectSelected, i) *設定輸出文字的起始坐標點 set_tposition (WindowID,Row[i-1]+40, Column[i-1]) *設置輸出文字的顏色 dev_set_ color ('blue') *設置字體 set_font (WindowID, '-System-32-*-*-0-0-0-1-GB2312_CHARSET-') *輸出文字內容,即該區域的面積 write_string (WindowID, Area[i-1]) endfor

???????該代碼實現了將輸入圖像中的較暗的孔洞區域提取出來,計算各個獨立區域的面積和中心坐標,并輸出各區域的面積。

二、封閉區域(孔洞)的面積(area_holes)

???????除了可以用area_center算子計算區域的面積以外,在Halcon中還可以使用area_holes算子計算圖像中封閉區域(孔洞)的面積。該面積指的是區域中孔洞部分包含的像素數。一個區域中可能不只包含一個孔洞區域,因此該算子將返回所有孔洞區域的面積之和。
???????下面左圖為輸入的灰度圖像,右圖為經閾值分割并輸出了孔洞面積的圖像,其中深色部分為提取的孔洞區域,紅色部分為包含孔洞的區域,也是area_holes算子的輸入。

???????上述過程的代碼如下:

*清空顯示窗口 dev_close_window () *讀取包含孔洞的圖片 read_image (Image, ''data/holes2') *打開新的顯示窗口 dev_open_window_fit_image (Image, 0, 0, -1, -1, wWindowHandle) *將彩色圖像轉化為灰度圖像,這是為了后面的圖像二值化 rgb1_to_gray (Image, GrayImage) *進行閾值處理,提取出圖中較亮的有封閉區域(除孔洞以外)的背景區域 threshold (GrayImage, Region, 50,255) *將背景區域作為area_holes算子的輸入,計算所有孔洞的面積 area_holes (Region, Area) *將面積計算結果以字符串形式顯示在窗口中 disp_message (WindowHandle, 'Size of holes: ' + Area + ' pixel', 'window',10, 10, 'black', 'true')

???????該代碼實現了將輸入區域中的孔洞部分提取出來,并計算孔洞的面積之和。

三、根據特征值選擇區域(select_shape)

???????關于提取圖像的特征,比較常用的一個算子是select_shape算子,它能高效地根據特征提取出符合條件的區域。該算子的原型如下:

select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : )

???????參數1和參數2分別表示輸入和輸出的區域,值得關注的是參數3 Features。這里提供了一個包括多種特征參數的列表,基本包括了區域的常用特征,使用者只需要選擇需要的特征,并設置篩選條件,就能得到需要的區域。
???????1)、area:輸入區域的面積。
???????2)、row:輸入區域中心點的行坐標。
???????3)、column:輸入區域中心點的列坐標。
???????4)、width:輸入區域的寬度。
???????5)、height:輸入區域的高度。
???????6)、circularity:輸入區域的圓度。
???????7)、compactness:輸入區域的緊密度。
???????8)、convexity:輸入區域的凸包性。
???????9)、 rectangularity:輸入區域的矩形度。
???????10)、outer_radius:輸入區域的最小外接圓的半徑。
???????11)、inner_radius:輸入區域的最大內接圓的半徑。
???????12)、inner_width:輸入區域的與坐標軸平行的最大內接矩形的寬度。
???????13)、inner_height:輸入區域的與坐標軸平行的最大內接矩形的高度。
???????14)、connect_num:輸入區域中非連通區域的數量。
???????15)、holes_num:輸入區域包含的孔洞數量。
???????16)、max_diameter:輸入區域的最大直徑。
???????在檢測中,常常使用某個特征值作為分割的依據,這時使用select_shape算子就非常高效,僅用簡潔的代碼就能將這些區域提取出來。例如,我們常利用面積特征來篩選出較大的前景目標,移除雜點和小區域。使用select_shape算子進行面積篩選,無須單獨計算每個區域的具體面積,代碼也非常簡潔。
???????這里有一個要注意的地方,就是算子中Operation的取值。如果你預先要同時檢測多個面積為[min,max]的目標,則在 select_shape語句中用’and’。 檢測結果如果沒有多個, SelectedRegions為空(要么取出兩個以上,不夠兩個就什么都不取----以標明有錯!)。
如果你預先不知道能有幾個面積為[min,max]的區域,用 select_shape時取‘or’ 合適,如果有多個就取多個,有一個就取一個(or —有幾個滿足的區域,就取幾個!)
???????下面是一個使用 select_shape 算子進行特征篩選的例子,如下圖所示。左圖為輸入的彩色圖像,圖中有若干個孔洞。為了將最大的孔洞從圖中提取出來,先使用閾值處理,從ROI中提取出較亮的區域;然后使用 select_shape 算子根據面積area篩選,將大部分雜點排除掉,得到中圖所示的形狀;接著再用一次select_shape算子,使用區域寬度width作為判斷條件,選擇出大的孔。右圖為使用select_shape 算子進行特征提取的圖像,經過第二次篩選,將包含較大孔洞的區域提取出來。

???????上述過程的代碼如下:

*清空顯示窗口 dev close_window () *讀取待檢測的圖像 read image (Image, 'data/crossShape') dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) *設置繪制的顏色 dev set color ('white') *將彩色圖像轉化為灰度圖像,這是為了后面的圖像二值化 rgb1_to_gray (Image, GrayImage) *創建矩形選區,選擇感興趣區域 gen_rectangle1 (Rectangle, 100, 127, 325,490) reduce_domain (GrayImage, Rectangle, ROI) gen_image_proto (ROI, ImageCleared, 0) *進行閾值處理,提取出圖中較暗的包含孔洞的區域 threshold (ROI, Regions, 50, 255) *將不連通的部分獨立分割出來,成為一組區域 connection (Regions,ConnectedRegions) *設置繪制的顏色,為了標記選擇的區域 dev_set_color ('yellow') *方法一 *將閾值處理的結果區域作為select_shape算子的輸入,根據區域的寬度選擇出目標 select_shape (ConnectedRegions, SelectedRegions1, 'area', 'and', 1000,99999) *方法二 *先計算面積,再選擇出面積最大的目標 area_center(ConnectedRegions, Area, Row, Column) select_shape (ConnectedRegions, SelectedRegions2, 'area', 'and', max(Area),99999) *方法三 *選擇面積最大的形狀區域作為目標 select_shape_std (SelectedRegions1, SelectedRegion3, 'max_area',70) dev_clear_window () dev_display (SelectedRegion3)

???????該段代碼中列舉了3種選擇最大目標的方法。方法一是直接根據面積的值設置選擇標準;方法二分為兩步操作,先計算面積,再選擇出面積最大的形狀;方法三是通過在select_shape_std算子中設置max_area,直接提取出面積最大的形狀。3種方法得到的結果相同。這樣即可將符合條件的區域提取出來。
???????注意:可以根據檢測需要組合使用多種選擇條件,多次使用select_shape算子,以篩選出合適的區域。

四、根據特征值創建區域

inner_circle算子

smallest_rectangle2算子


參考文獻

1、Halcon機器視覺算法原理與編程實戰/楊青編著.北京大學出版社

總結

以上是生活随笔為你收集整理的Halcon区域形状特征-area_center、area_holes、select_shape、inner_circle和smallest_rectangle2算子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。