HALCON 1D Measure 算子初識


基本上1D Measure都是建立一個ROI(region of interest,感興趣區域),然后在感興趣區域提取出邊界的測量。常見的ROI有矩形ROI和圓環ROI
下圖為一個矩形ROI,中間的Profile Line為橫截線,Center是行和列的坐標,Phi指定了它的傾斜角度,Length1Length2指定了它的長寬。
圖1 矩形ROI

下圖為一個圓環ROI,比較不一樣的是它還有一個角度的概念,如伸展角度(angle extent),開始角度(angle start),等。
圖2 環形ROI

通常,我們就是要確定在ROI內,圖像中的邊界線的具體坐標,怎么確定呢?通常是通過灰度值。如下圖a,我們想測試一下管腳的長度,因為管腳本身和背景比起來是比較暗的,因此就可以通過測灰度值的方法將他們區分開來。

怎么測呢?實際上,我們是以Profile Line為橫坐標,在每個橫坐標點,做垂線,求得這條垂線上,ROI內,每個點的坐標的灰度值,取平均,作為這個橫坐標點的平均灰度值。這樣有管腳的地方,灰度值就會和兩邊都不一樣(一邊暗,一邊亮)。

看看具體的算子:

gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, Interpolation, MeasureHandle)

首先通過gen_measure_rectangle2生成一個ROI,這里會產生一個MeasureHandle,即測量的句柄,用它,就可以告訴其它需要用到這個ROI的算子:"嘿,我構建了一個ROI,它叫MeasureHandle要用的話就拿去",Interpolation代表我們要用插值的方法,找到一些小數位置的灰度值,因為如果ROI不是垂直或水平的,它就可能包含很多坐標是小數的點,這些點本身是沒有灰度值定義的,需要通過插值的方法算出來。

measure_pos (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdge, ColumnEdge, Amplitude, Distance)

通過上面得到的MeasureHandle,當然還有更早得到的Image,我們再用measure_pos 這個算子,意思是要測量(邊緣)的位置。這里Sigma是進行均值濾波的參數,而要進行均值濾波的原因是,圖像上可能會有噪點,影響我們對邊緣的判斷,用均值濾波平滑掉這些噪點,可以減少誤判;Threshold是閾值,代表閾值超過多少把它當做邊緣;Transition代表是如何轉換的,是亮到暗還是暗到亮還是都要;Select代表可以為firstlastall,意思是你要選你一個還是最后一個還是所有檢測到的邊緣因為接下來的RowEdgeColumnEdge存儲邊緣的數組,它可以存儲很多的點;Amplitude指定的是一個縮放,因為工業上還是要測量具體的值的,通過邊界的坐標加上縮放的計算,可以計算出確切的距離,就存在Distance里。
類似的還有measure_pairs:

measure_pairs (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)

由它測量出來的邊界都是成對存在的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM