Halcon知识:如何求一个工件的粗细
一、說明
在實際應用中,有時需要求一個物件的粗細;本文用最簡單的方法,給出示范,并對關鍵幾個函數給以說明。如圖,假定我們有如下圖物品,求其寬度。
?二、程序代碼
dev_set_color ('red') read_image(Image,'D:/images/reglist/scrw.jpg') rgb1_to_gray(Image, Gmage)WindowWidth := 640 WindowHeight := 540 dev_open_window_fit_size (0, 0, WindowWidth, WindowHeight, -1, -1, WindowHandle1)threshold(Gmage, Region, 10, 75)fill_up(Region,RegionFillUp) get_region_thickness (RegionFillUp, Thickness, Histogramm) area_center (RegionFillUp, Area, Row, Column) elliptic_axis (RegionFillUp, Ra, Rb, Phi) StartRow := Row + sin(Phi) * Ra StartColumn := Column - cos(Phi) * Ra EndRow := Row - sin(Phi) * Ra EndColumn := Column + cos(Phi) * Ra dev_set_color ('yellow') disp_line (WindowHandle1, StartRow, StartColumn, EndRow, EndColumn)dev_open_window (0, WindowWidth + 10, 660, WindowHeight, 'black', WindowHandle2) plot_tuple (WindowHandle2, [], Thickness, [], [], 'red', ['style','margin_top'], ['line',WindowHeight * 0.2]) disp_message (WindowHandle2, 'Thickness along the main axis', 'window', 12, 12, 'black', 'true')輸出效果圖:
??
三、代碼說明
3.1 讀入圖像并二值化
dev_set_color ('red')
read_image(Image,'D:/images/reglist/scrw.jpg')? ?讀圖像
rgb1_to_gray(Image, Gmage)? ? ? ? 轉成灰度
WindowWidth := 640
WindowHeight := 540
dev_open_window_fit_size (0, 0, WindowWidth, WindowHeight, -1, -1, WindowHandle1)?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 預備一個窗口
threshold(Gmage, Region, 10, 75)? ? 二值化區域
fill_up(Region,RegionFillUp)? ? ? ? ? 填充區域內部空洞
3.2 橢圓區域處理
get_region_thickness (RegionFillUp, Thickness, Histogramm) area_center (RegionFillUp, Area, Row, Column) elliptic_axis (RegionFillUp, Ra, Rb, Phi)以上代碼將區域假定為橢圓擬合,求出沿主軸的一些屬性:
- get_region_thickness (RegionFillUp, Thickness, Histogramm)
運算符 get_region_thickness 計算截面中每個像素沿主軸(參見 elliptic_axis)的區域厚度。主軸上某一點處的厚度定義為輪廓與主軸上鉛垂在相應點上相距最遠的交點之間的距離。此外,運算符 get_region_thickness 返回區域厚度的直方圖。直方圖的長度對應于觀察區域中出現的最大厚度。
Histogramm:的數據結構
- area_center (RegionFillUp, Area, Row, Column)
運算符 area_center 計算輸入區域的面積和中心。面積定義為一個區域的像素數。中心分別計算為所有像素的行坐標或列坐標的平均值。
如果傳遞了多個區域,則結果存儲在元組中,元組中值的索引對應于輸入區域的索引。在空白區域的情況下,如果沒有設置其他行為,則所有參數的值都為 0.0(參見 set_system)。
- elliptic_axis (RegionFillUp, Ra, Rb, Phi)
3.3 畫出主軸線
這里是從中心點為基點,輔助軸偏角畫出軸線?
StartRow := Row + sin(Phi) * Ra StartColumn := Column - cos(Phi) * Ra EndRow := Row - sin(Phi) * Ra EndColumn := Column + cos(Phi) * Ra dev_set_color ('yellow') disp_line (WindowHandle1, StartRow, StartColumn, EndRow, EndColumn)3.4 畫出直方圖
dev_open_window (0, WindowWidth + 10, 660, WindowHeight, 'black', WindowHandle2) plot_tuple (WindowHandle2, [], Thickness, [], [], 'red', ['style','margin_top'], ['line',WindowHeight * 0.2]) disp_message (WindowHandle2, 'Thickness along the main axis', 'window', 12, 12, 'black', 'true')- plot_tuple( : : WindowHandle, XValues, YValues, XLabel, YLabel, Color, GenParamNames, GenParamValues : )
該算子將輸入的 “x元組,等長度的y元組”,畫出其函數的曲線:
XValues:要繪制的函數的 X 值。
如果 XValues 設置為 [],則將其內部設置為 0,1,2,...,|YValues|-1。
如果 XValues 是字符串元組,則將這些值視為類別。
YValues:要繪制的函數的 Y 值。
如果 YValues 設置為 [],則它內部設置為 0,1,2,...,|XValues|-1。
y 值的數量必須等于 x 值的數量
或整數倍。在后一種情況下,
繪制了多個函數,它們共享相同的 x 值。
XLabel: X axis label.
XLabel: Y axis label.
color:繪制函數的顏色。
如果給出 [],則使用當前設置的顯示顏色。 如果給出'none',則不繪制函數,而僅繪制 指定的坐標軸。 如果給出一種以上的顏色,多種函數可以用不同的顏色顯示。
總結
以上是生活随笔為你收集整理的Halcon知识:如何求一个工件的粗细的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像处理:Hough变换原理分析
- 下一篇: 编辑距离:最长公共子序列-LCS问题