from:https://www.cnblogs.com/hanzhaoxin/archive/2013/01/09/2852213.html
dev_clear_obj(Objects : : : )?
刪除一個iconic對象
dev_error_var( : : ErrorVar, Mode : )?
定義或取消定義一個錯誤變量
dev_get_exception_data( : : Exception, Name : Value)?
獲取異常數據?
Exception:包含異常數據或用戶定義的錯誤碼的元組;?
Name:異常數據的名字?
Value:異常數據
dev_set_check( : : Mode : )?
指定錯誤處理的模式?
當Mode為give_error時,拋出異常;?
當Mode為~give_error時,不拋出異常。
dev_update_pc( : : DisplayMode : )?
在程序執行過程中,程序編輯器是否更新。
dev_update_time( : : DisplayMode : )?
是否更新時間顯示
dev_update_var( : : DisplayMode : )?
是否實時更新變量窗口
dev_update_window( : : DisplayMode : )?
是否實時更新圖形窗口?
dev_clear_window( : : : )?
清除圖形窗口中的內容
dev_inspect_ctrl( : : Variable : )?
打開變量Variable的變量監視窗口
dev_close_inspect_ctrl( : : Variable : )?
關閉變量Variable的變量監視窗口
dev_close_window( : : : )?
關閉(當前)活動的圖形窗口
dev_display(Object : : : )?
在當前窗口顯示Image對象
dev_get_preferences( : : PreferenceNames : PreferenceValues)?
獲取偏好名稱對應的偏好值
dev_map_par( : : : )?
打開可視化參數對話框
dev_map_prog( : : : )?
用于再現被dev_unmap_prog( : : : ) 隱藏的主窗口。
dev_map_var( : : : )?
用于再現被dev_unmap_var( : : : ) 隱藏的變量窗口。
dev_open_window( : : Row, Column, Width, Height, Background : WindowHandle)?
打開一個新的圖形窗口
dev_set_color( : : ColorName : )?
設置一個或多個輸出顏色
dev_set_colored( : : NumColors : )?
設置多種輸出顏色
dev_set_draw( : : DrawMode : )?
設置區域(Region)填充模式
dev_set_line_width( : : LineWidth : )?
設置區域輪廓的線寬
dev_set_lut( : : LutName : )?
設置查詢表(lut)
dev_set_paint( : : Mode : )?
定義灰度值輸出模式
dev_set_part( : : Row1, Column1, Row2, Column2 : )?
設置顯示圖像的部分
dev_set_preferences( : : PreferenceNames, PreferenceValues : )?
在一個程序中設置HDevelop的偏好
dev_set_shape( : : Shape : )?
定義區域的輸出形狀
dev_set_window( : : WindowHandle : )?
激活一個圖形窗口
dev_set_window_extents( : : Row, Column, Width, Height : )?
改變一個圖形窗口的位置和大小
from:https://blog.csdn.net/fred_yang2013/article/details/9665077
dev_update_window(: : DisplayMode: ) :默認狀態下運行產生的所有的對象(圖像,區域,或XLD)都在活動圖形窗口顯示。可以用OFF關閉此模式,默認值為off(不支持C++代碼),因為這會拖慢程序運行的速度,我們需要的只是最終的結果。
dev_display(Operator)顯示image,region等變量,當先輸出image在輸出region變量時,image可以被覆蓋
get_system(: : Query: Information) 返回關于當前激活的halcon系統參數。例如查詢當前處理器的核心數get_system('processor_num',Information)。獲得信息的目的是為了再set_system,保持系統參數不變。
dev_open_window(左上角開始行數,左上角開始列數,窗口的寬,窗口的高,窗口的背景顏色,窗口標識符(輸出));創建一個窗口
gen_grid_region(創建線或者像素區域名(輸出),行方向的間隔,列方向的間隔,類型線或者像素,線的橫向長度,列向長度);創建一個域。直線或者像素組成
clip_region(畫的圖像:被畫的圖像(輸出):畫的圖像的矩形左上角的行坐標,列坐標,矩形右下角的行坐標,列坐標)? ;將域進行固定
read_image(圖像名字(輸出),文件名字);
reduce_domain(輸入的圖像,新的圖像域,有新圖像域的圖像(輸出))? 減少圖像域
?
sobel_amp(被處理的圖像,處理后的圖像:濾波類型,梯度大小) sobel 算子
根據選擇的不同濾波器類型,使用的模板也不同,a,b分別表示和濾波模A,B板卷積之后單個像素的值
'sum_sqrt'????????????? sqrt(a^2 + b^2) / 4?????????????????????????
'sum_abs'?????????? (|a| + |b|) / 4
'thin_sum_abs'????????? (thin(|a|) + thin(|b|)) / 4
'thin_max_abs'????????? max(thin(|a|),thin(|b|)) / 4
'x'???????????????????? b / 4
'y'???????????????????? a / 4
thin(x)分別表示一個垂直最大值(垂直方向只取一個最大)(模板A)和一個水平最大值(模板B),否則就是0.因此對于thin_sum_abs和thin_max_abs梯度圖像的邊緣就變細了。不同濾波處理方式如圖處理結果如圖。
threshold(被處理圖像,分割后的域:最小的灰度值,最大的灰度值)? 返回? min<= >=max的那部分圖像
dilation_rectangle1(要擴張的區域,擴張后的圖像,矩形的寬,矩形的高)以檢測出的點為中心進行矩形擴張
fill_up(檢測的圖像域,檢測后的圖像域)把區域中檢測到的不一樣顏色的孔進行著色(默認是八鄰域檢測)
?
?skeleton(:: : )?
skeleton算子計算區域內的骨架,也就是輸入區域的中軸線。在骨架上的每一個點可以被看做圓的中心點,并且有盡可能大的半徑,但是仍然被完全包含在區域里。
Region是被變細的區域;Skeleton是結果骨架
有關此方法具體可以參考Eckardt,U. “Verdünnungmit Perfekten Punkten”,Proceedings 10. DAGM-Symposium, IFB 180, Zurich, 1988。
?
?sobel_dir(Image:EdgeAmplitude, EdgeDirection: FilterType, Size: )
用Sobel算子檢測邊緣(幅度(梯度向量的長度)和方向)
sobel_dir計算圖像的一階導數并且被用來當做邊緣檢測器。濾波器基于下面的濾波模板來模擬一階導數
?A =????????????????????????????????
1?????? 2??????1
0?????? 0??????0
-1????? -2?????-1
B=
1?????? 0?????-1
2?????? 0?????-2
1?????? 0?????-1
根據選擇的不同的濾波類型,使用不同的濾波模板。(下面的式子a,b表示用模板A,B和圖像進行卷積的結果,表示一個特定的像素值)
'sum_sqrt'????????????? sqrt(a^2 + b^2) / 4
'sum_abs'?????????????? (|a| + |b|) / 4
對于一個3x3大小的Sobel算子,分別直接應用A,B模板進行檢測就可以了。如果要使用大一些尺寸的濾波器首先要進行高斯濾波或者二項式濾波。高斯濾波器必須使用如下所示的濾波類型。并且此存只可以是5,7,9,13。二項式濾波器通過在FilterType后面添加"_binomaial"。它的尺寸可以使用3到39中任何一個值。并且它可以通過兩個Size參數選擇不同數量的行和列方向進行平滑,,第一個Size參數表示模板的寬(在列的方向平滑,也就是行),第二個Size參數表示模板的高(在行的方向進行平滑,也就是列)。二值濾波器只可以用在字節類型的圖像上,uint2和real。因為平滑濾波減小了邊緣幅度,在這種情況下邊緣幅度乘以2以減少信息的丟失。因此
sobel_dir(I,Amp,Dir,FilterType,S)
forSize > 3 在概念上等于
scale_image(I,F,2,0)
gauss_image(F,G,S-2)
sobel_dir(G,Amp,Dir,FilterType,3)
或者
scale_image(I,F,2,0)
binomial_filter(F,G,S[0]-2,S[1]-2)
sobel_dir(G,Amp,Dir,FilterType,3).
邊緣方向返回值放在EdgeDirection中,并且分兩步存儲,例如一個邊緣方向為在正方向相對于x軸為x度并且在邊緣方向圖像中存儲x/2。并且在強度變化的方向也被考慮在其中,用[Ex,Ey]表示梯度方向。下面的邊緣方向作為r/2返回:
intensityincrease???????????????????? Ex / Ey??????? edge direction r
frombottom to top????????????????????? 0 /+???????? 0
fromlower right to upper left????????? - /+???????? ]0,90[
fromright to left????????????????????? - /0???????? 90
fromupper right to lower left????????? - /-???????? ]90,180[
fromtop to bottom????????????????????? 0 /-???????? 180
fromupper left to lower right????????? + /-???????? ]180,270[
fromleft to right????????????????????? + /0???????? 270
fromlower left to upper right????????? + /+???????? ]270,360[.
邊緣幅度為0的點被標記為邊緣方向255(未定義方向)
Sobel_amp可以在OpenCL設備上執行。注意當用高斯濾波器模板尺寸大于三,結果可以在不同CPU中實現
參數:
Image(input_object)? (multichannel-)image(-array) →object(byte / int2 / uint2 / real)
Inputimage.
EdgeAmplitude(output_object)? (multichannel-)image(-array) →object(byte / int2 / uint2 / real)
Edgeamplitude (gradient magnitude) image.
EdgeDirection(output_object)? (multichannel-)image(-array) →object(direction)
Edgedirection image.
FilterType(input_control)? string →(string)
Filtertype.
Defaultvalue: 'sum_abs'
Listof values: 'sum_abs', 'sum_sqrt', 'sum_abs_binomial', 'sum_sqrt_binomial'
Listof values (for compute devices): 'sum_abs', 'sum_sqrt', 'sum_abs_binomial','sum_sqrt_binomial'
Size(input_control)? integer(-array) →(integer)
Sizeof filter mask.
Defaultvalue: 3
Listof values: 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,39
difference(Region,Sub: RegionDifference: :) 計算兩個Region中的不同(Regionsin Region)- (Regions in Sub)
Region(input_object)? region(-array) →object
Regionsto be processed.
Sub(input_object)? region(-array) →object
Theunion of these regions is subtracted from Region.
RegionDifference(output_object)? region(-array) →object
Resultingregion.
計算結果就是除去Region中存在于Sub中的點。Notethat, internally, all regions of Sub are united to a single region before thedifferences between the individual regions of Region and the united region arecalculated.
對于上述兩個輸入參數,空域是合法的。在輸出中,也許會出現空域的結果。
shape_trans(Region:RegionTrans: Type: )? 改變區域的形狀
Region(input_object)? region(-array) →object
Regionsto be transformed.
RegionTrans(output_object)? region(-array) →object
Transformedregions.
Type(input_control)? string →(string)
Typeof transformation.
Defaultvalue: 'convex'
Listof values: 'convex', 'ellipse', 'outer_circle', 'inner_circle', 'rectangle1','rectangle2', 'inner_rectangle1', 'inner_center'
根據Type的類型來改變輸入區域的圖像:
'convex'? 凸包
'ellipse'橢圓
'outer_circle'最小包容圓
'inner_circle'最大的內部圓
'rectangle1'平行于坐標系的最小的包圍矩形
'rectangle2'最小包圍矩形
'inner_rectangle1'最大的平行于坐標系的內部矩形
'inner_center'輸入區域骨架上的離區域中心最近的點
dilation_circle(Region:RegionDilation: Radius: )用圓的結構化區域膨脹一個區域
算子應用一個Minkowski和一個圓形結構元素相加作用于輸入域Region。由于圓模板是對稱的,所以膨脹也是對稱的。作為結構元素的圓的尺寸是由參數Radius決定的。
這個算子返回一個擴大的區域,平滑的邊界,并且在區域內部的小于圓模板的洞被封閉了。
Itis useful to select only values like 3.5, 5.5, etc. for Radius in order toavoid a translation of a region, because integer radii result in the circlehaving a non-integer center of gravity which is rounded to the next integer.
?
create_variation_model(: : Width, Height, Type, Mode: ModelID) 為圖像對比創建一個變化模型
Width(input_control)? extent.x →(integer)
Widthof theimages to be compared.
Defaultvalue:640
Suggestedvalues:160, 192, 320, 384, 640, 768
Height(input_control)? extent.y →(integer)
Heightof theimages to be compared.
Defaultvalue:480
Suggestedvalues:120, 144, 240, 288, 480, 576
Type(input_control)? string →(string)
Typeof theimages to be compared.
Defaultvalue:'byte'
Suggestedvalues:'byte', 'int2', 'uint2'
Mode(input_control)? string →(string)
Methodused forcomputing the variation model.
Defaultvalue:'standard'
Suggestedvalues:'standard', 'robust', 'direct'
ModelID(output_control)? variation_model →(integer)
IDof thevariation model.
通常情況下變量模型用來把好的對象和不好的對象區分出來。它假設這個區分可以只通過對象的灰度值實現。
變量模型包含一個對象的理想圖像,這個理想圖像是用compare_variation_model或者compare_ext_variation_model來進行比較的,并且圖像代表了對象上每一點的灰度值數量變化。圖像和訓練的對象模型以及后來用來用來對比的模型的大小都是由Width和Height參數確定的。用來訓練和比較的圖像類型是通過參數Type來確定的。
變化模型是用多個合格的圖像來訓練的。因此,訓練圖像在同一位置和角度來顯示對象時很重要的。如果不能通過外部方法保證上述條件,那么對象的姿勢可以用匹配(matching)來決定(見find_shape_model)。圖像可以通過affine_trans_image轉換成一個參考姿勢。
???? 參數Mode用來決定理想的圖像對象和相應的變化圖像的計算模式。當Mode=’standard’,理想的圖像對象(theidealimage of the object)(為計算變化圖像做準備)是訓練圖像在各自的圖像位置求平均的結果。相應的變化圖像是訓練圖像在各自圖像位置的標準差(standarddeviation)。這個模式的優點就是可以迭代的進行訓練,例如,只要是一個好的對象時可用的,那么就可以用train_variation_model來進行訓練。但是這樣做的缺點就是要注意訓練的圖相是好圖像,因為平均標準方差對于其它圖相沒有魯棒性,例如,如果一個差圖像不小心被放入到訓練圖像中,理想圖像對象的精度和變化圖像可能會退化。
???? 如果變化模型在訓練時不可避免的要參雜一些包含錯誤的圖像,那么參數Mode可以設置為’robust’。在這種模式下,理想的圖像對象是這些所有訓練圖像的在各自位置的中間值。相應的變化圖像是訓練圖像和中值圖像再各自圖像位置的一個合適尺度的絕對中值偏差。這種模式的優點是對于差圖像是魯棒的。缺點就是它不能迭代的進行訓練,例如,所有的訓練圖像必須用concat_obj累積并且被train_variation_model一次性訓練。
???? 在一些情況下很難獲得多個訓練圖像。在這種情況下,不可以通過單個訓練圖像獲得有用的變化圖像。為了解決這個問題,變化圖像可以被綜合的創造,例如,通過使用灰度值形態學方法(gray_erosion_shapeand gray_dilation_shape)把訓練圖像按行或者列方向移動+/- 1像素,然后再綜合修正圖像。其他的一種方法是使用參數Mode=’direct’。在這種情況下,變量模型變化模型只可以用prepare_direct_variation_model直接指定理想圖像和變化圖像。因為在對象的邊緣變化比較劇烈,應當使用邊緣算子像soble_amp,edges_image,或者gray_rang_rect來創建變化圖像。
?
inspect_shape_model(Image(input_object):ModelImages(output_object), ModelRegions(output_object)? : NumLevels(input_control), Contrast? (input_control): )? 創建一個形狀模型的表示
?Image(input_object)? (multichannel-)image →object (byte / uint2)
Inputimage.
ModelImages(output_object)?(multichannel-)image-array → object(byte /uint2)
Imagepyramid of the input image
ModelRegions(output_object)? region-array →object
Modelregion pyramid
NumLevels(input_control)? integer →(integer)
Numberof pyramid levels.
Defaultvalue: 4
Listof values: 1, 2, 3, 4, 5, 6, 7, 8,9, 10
Contrast(input_control)? number(-array) →(integer)
Thresholdor hysteresis thresholds forthe contrast of the object in the image andoptionally minimum size of theobject parts.
Defaultvalue: 30
Suggestedvalues: 10, 20, 30, 40, 60,80, 100, 120, 140, 160
?
為了決定參數Numlevels和Contrast算子inspect_shape_model特別有用,這兩個參數可以快速方便的用在create_shape_model,create_scaled_shape_model,or create_aniso_shape_model上。模型表象基于多個圖像金字塔層創建,這個層數被參數NumLevels決定,為了和create_shape_model,create_scaled_shape_model,and create_aniso_shape_model做對比,這個模型只用來對輸入的對象進行旋轉或者設置尺度,例如0度和1。作為輸出,算子創建輸出一個圖像對象ModeImages包含每一個圖像金字塔層和一個區域(Region)ModelRegions代表每一個金字塔層模型。每一個對象可以通過select_obj訪問。如果輸入的圖像Image是單通道的,那么這個方法創造的模型用在create_shape_model,create_scaled_shape_modelor create_aniso_shape_model方法中它們的參數metrics只可用'use_polarity','ignore_global_polarity',and 'ignore_local_polarity'。如果輸入圖像時多通道那么參數用'ignore_color_polarity'。就像方法create_shape_model,create_scaled_shape_model,and create_aniso_shape_model,描述的那樣,金字塔層的個數應該是越大越好,但是考慮到模型必須在金字塔的最高層是可以辨認的并且必須有足夠的模型點。參數Contrast要滿足那些對于模板對象有意義的特征用在模型上。Contrast可以是一個tuple包含兩個值。在這種情況下,模型使用一個像用在edges_image那樣的滯后閾值法分割。在這里,tuple里的第一個值是小閾值,第二個是大閾值。(關于更多的滯后閾值法參見hysteresis_threshold)。Contrast還可以包含一個第三個值作為tuple的最后一個元素。這個值根據部分的大小決定一個挑選有意義的模型部分的閾值。例如,這個部分的點數比最小尺寸還要少,那么就會被抑制。對于每一個連續的金字塔層最小尺寸閾值除以二。如果小的模型部分那就應當被抑制,但是不應當使用滯后閾值分割法,不過這三個值一定要在Contrast中指定。在這種情況下,前連個值可以被設定為相同的值。在這種情況下,inspect_shape_model使用不同的NumLevels和Contrast參數值交互的被調用多次,直到獲得了一個滿意的模型。然后create_shape_modelcreate_scaled_shape_model,or create_aniso_shape_model使用那些獲得的參數。