當前位置:
首頁 > 最新 > Section 14-Halcon實戰寶典之數據結構

Section 14-Halcon實戰寶典之數據結構

operator ( iconic input : iconic output :control input : control output )。

在HALCON所有運算元中,變數皆是如上格式。即:圖像輸入:圖像輸出:控制輸入:控制輸出,其中四個參數任意一個可以為空。控制輸入量可以是變數、常量、表達式,控制輸出以及圖像輸入和輸入必須是變數,以存入運算元計算結果中。

一、參數和數據結構:

HALCON有兩種基本的數據型態:圖像數據以及控制數據(例如變數,整數,字元串等等)。所有運運算元的參數都是以相同的方式排列:輸入圖像,輸出圖像,輸入控制,輸出控制。當然,並非所有的運運算元都具有上列四類參數,不過參數排列的次序依舊相同。

Images:Halcon中,Image = Channel + Domain ,像素點存放在Channel矩陣中,根據ROI來描述Image。

Image相關操作:

輸入:從文件、從設備生成外部圖像數據、空內存區域;

顯示:disp_image()圖像首通道灰度圖;disp_color()彩色圖;disp_channel()某特定通道;disp_obj()自動判別類別;

縮放:set_part()設置顯示區域;set_part_style()設置顯示參數;

說明:

(1)Multiple channels //多通道圖像,可以是灰度圖像或RGB圖像

(2)Arbitrary region of interest //ROI區域圖像

(3)Multiple pixel types(byte, (u)int1/2/4,real,complex, direction, cyclic, vector_field)

byte, uint2 //灰度圖像的標準編碼

int1, int2 //Difference oftwo images or derivates with integer precision int4 //兩幅灰度圖的頻譜

direction //圖片邊緣的梯度方向

real //邊緣提取及特定灰度值的輪廓

complex //圖片頻率

cyclic //Assigning one "gray"value to each color(??)

vector_field //連續圖形的光學流分布ROI:影像中要處理的數據範圍。

Region即是一堆像元的集合,以行列坐標形式儲存,特點是高效,可利用同態運算元。比如用閾值對圖像分割的結果,其他系統中稱為BOLB,AREA等。。

Region中的像元不一定要相連,如果要讓相連接的像元成為一個Region,只要呼叫運運算元connection即可。

XLD包含了所有等值線以及多邊型的數據。。XLD對象中除了點坐標數據,還包含了全域或區域屬性,例如edge方向,或是分割時的regression參數等等。

Tuples就像一個數組,其中的數據型態可為整數,浮點數或是字元串。當我們計算一個Region的某些特徵時,會傳回一個結果,如果計算的是一群Region,會傳回一個tuple,其中含有每個Region的特徵計算結果。Control tuple的指標由開始。

二、數組結構

1.Assign運算元:assign(Input, Result),對變數以及表達式或數組賦值

assign(sin(x) + cos(y), u)

which is displayed in the program window as:程序窗等價為

u := sin(x) + cos(y)

Tuple1 := [1,0,3,4,5,6,7,8,9] //對數組進行初始化

Val := sin(1.2) + cos(1.2) //對某一個值進行賦值

Tuple2 := [] //數組定義

2.Insert:對數組中的某一個值進行賦值。

Tuple1 := [1,0,3,4,5,6,7,8,9]

Tuple1[3]:=2

顯示結果為:[1, 0, 3, 2,5, 6, 7, 8, 9],即對索引3後面元素,數組Tuple1中第4個元素賦值2.

例:

read_image(Image, "fabrik")

dev_set_draw ("margin")

read_image (Mreut, "mreut") //讀入圖像

threshold (Mreut, Region, 200, 255) //閾值化,輸出閾值在190-255的Regions

Areas := [] //定義數組Areas

for Radius := 1 to 30 by 2 //循環

dilation_circle (Region, RegionDilation,Radius) //利用半徑為Radius的圓對Region進行膨脹運算,輸出RegionDilation,輸出形式仍然為Region。

area_center (RegionDilation, Area, Row,Column) //輸出區域的面積和中心像素坐標

Areas[Radius-1] := Area //對數組Areas的第Radius-1個元素進行賦值

endfor

3.基本數組操作極其對應的運算元

t := [t1,t2] t1,t2連接成新的數組對應運算元:tuple_concat

i := |t|得到數組長度tuple_length

v := t[i]選取第i個元素0

t := t[i1:i2]選取i1到i1的元素tuple_select_range

t := subset(t,i)選取數組t中的第i個元素tuple_select

t := remove(t,i)去除數組t中的第i個元素tuple_remove

i := find(t1,t2)找到t2數組在t1數組中出現位置索引tuple_find

t := uniq(t)在t數組中把連續相同的值只保留一個tuple_uniq

4.創建數組

1)gen_tuple_const函數

tuple := gen_tuple_const(100,4711) //創建一個具有100個元素的,每個元素都為4711的數據

tuple_new := gen_tuple_const(|tuple_old|,4711)//創建一個和原來數據長度一樣的數據

上面的函數也可以通過如下表達式實現:tuple_new:= (tuple_old * 0) + 4711

2)當數組中的元素不同時,需要用循環語句對數組中的每一個元素賦值

例如:tuple :=[] //創建空數組

for i := 1 to 100 by 1 //建立步長為1的循環

tuple :=[tuple,i*i] //將i方的值賦給數組的第i個元素

endfor //循環結束

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!

TAG: |