halcon學習之產品檢測

來源:互聯網
上載者:User

轉自:http://qing.blog.sina.com.cn/2316220871/8a0eb9c733002pnh.html


Rinspect_gasket_local_deformable.hdev 檢測墊圈局部變形
*這個例子示範了如何利用局部變形匹配(local deformable matching)來尋找出墊圈是否變形
dev_update_off() Smoothness:=25 read_image(ModelImage,.. read_image( Image,...... 下面是ModelImage和Image(兩個基本相近,肉眼難辨)
顯示資訊不予贅述。。。
一:建立variation model (差異模型) sobel_amp(ModelImage, EdgeAmplitude, 'thin_max_abs', 5) */        'thin_sum_abs' (thin(|a|) + thin(|b|)) / 4來求得幅值大小, 其中a,b是sobel卷積之後所求單一像素的輸出值(橫向,縱向)/*
1 , create_variation_model( 425,410,'byte', 'direct', VariationModelId) create_variation_model( : : Width, Height, Type, Mode : ModelID) 建立一個差異比較的模型
描述:這個函數建立一個用於映像比較的handle, variation model是典型的從不合格產品中分辨出合格產品的應用程式模型(根據灰階圖比較)。           差異模型(VariationModel)包含兩部分,第一部分是理想的標準圖(用於之後的比較,compare_variation_model或者compare_ext_variation_model),第二部分是一張圖片,它包含了訓練圖中各張之間或者平均的差異資訊。         /*差異模型(VM)使用多張標準圖來進行訓練,它的本質需要這些訓練用的圖片能夠在同一個位置合約一個角度,當無法保證同位置同角度的時候,可以使用find_shape_model匹配來使圖片轉換到正確位置(利用affine_trans_image)*/           這裡的type指的是對比的映像類型,Mode參數決定了如何訓練標準圖以及如何進行側視圖和標準圖之間的差異匹配,Mode: ' standard' :標準圖由訓練圖的平均值來得到(經過矯正位置之後的訓練圖),差異值的計算是標準圖與測試圖的標準差  (這種方法的優勢是可以通過迭代來訓練標準圖,直接使用train_variation_model進行訓練,缺點是必須花費很大代價來確認訓練圖的正確性,保證準確率) ' robust' : 標準圖由多張訓練圖的中值來計算,差異值的計算是由訓練圖經過正確縮放後與測試圖進行比較得到的一組數值得中值(這種模式對誤差的容忍度搞,不過不可以迭代訓練,必須通過concat_obj 和train_variation_model來訓練)
2, prepare_direct_variation_model(ModelImage, EdgeAmplitude, VariationModelID, 30, 1.5) prepare_direct_variation_model(RefImage, VarImage : : ModelID,AbsThreshold, VarThreshold : ) 對進行的比較做準備,使用這個函數,前面的建立差異模型時候的mode必須是’direct‘。direct在這裡相對於prepare_variation_model的差別是,標準圖和相應的差異圖並不是使用train_variation_model計算出來的,而是直接在RefImage和VarImage中指出來,作為函數輸入。此函數非常適合標準圖只有一張,即沒有多張訓練圖的情況。這種情況下,差異圖variation image應該由邊緣函數'sobel_amp, edges_image, gray_range_rect' 等產生。(variation image指的是an image that represents the amount of gray value variation at every point of the object)
二:建立本地可變性模型 1, create_local_deformable_model(ModelImage, 'auto', rad(-10), rad(20),'auto',0.9,1.1, 'auto', 'none', 'use_polarity', 'auto', 'auto', [],[],ModelID)
create_local_deformable_model(Template : : NumLevels, AngleStart,AngleExtent, AngleStep, ScaleRMin, ScaleRMax, ScaleRStep, ScaleCMin,ScaleCMax, ScaleCStep, Optimization, Metric, Contrast, MinContrast,ParamName, ParamValue : ModelID) 描述:           這個操作把模板Template做準備工作用來後續的局部變形檢測,變形模型的ROI作為此模板的roi           變形檢測用來檢測一個對象是否局部變形,這個檢測模型在保持嚴格的基礎上允許一些細小的變形,和find_shape_model(在圖中找到相應圖形的首選)不同,create_local_deformable_model更加智能化,它可以預估變形程度並且修正映像中物體的位置(物體相對於映像的相對位置),它可以處理更大的變形。          模型中,參照點(reference point)是由標準圖中對象的重力中心點位置決定的,並且使用物體模板的axis-aligned cnclosing rectangle(個人理解就是一個矩形的長短軸相關)來決定搜尋地區(使用find_local_deformable_model)
參數介紹: Template:輸入多通道映像,用來建立model NumLevels:輸入integer,用來控制最多有多少層金字塔層數:‘auto', 0,1,2,3,。。。 AngleStart:輸入角度,控制初始的最小角度(調整匹配時候開始的最小角度,預設-0.39) AngleExtent:輸入角度,控制旋轉的範圍,預設0.79 AngleStep:輸入角度,控制旋轉的最小角度,即解析度,預設’auto‘ ScaleRMin:行方向的最小縮放比例,預設1.0,通常大於0小於1 ScaleRMax:行方向的最大縮放比例,預設1.0,通常大於1小於1.5 ScaleRStep:行方向的縮放步長,可影響行方向的解析度,預設'auto', 0.01,0.02,0.05,。。 ScaleCMin: ScaleCMax:            列方向,同上 ScaleCStep: Optimization:產生模型時的最佳化方式,預設'none',可選,'auto','point_reduction_XXX' Metric: 比較時候的標準:預設'use_polarity'使用極座標系進行比較 Contrast:在模板圖片的濾波或者磁滯濾波中,控制結果的對比,預設'auto', 10, 20.... MinContrast:在搜尋對象過程中的最小對比,預設'auto', 1, 2, 3, 5.... ParamName: 普通參數名字(不太清楚用途,後續研究)預設[], 'min_size','part_size' ParamValue:參數值, 預設[], 可選'small', 'medium', big' ModelID:  輸出的模型handle
3, get_deformable_model_contours( ModelContours, ModelID,1) get_deformable_model_contours( : ModelContours : ModelID, Level : ) 擷取可變模型的邊緣, Level決定了返回第幾層金字塔映像的邊緣
area_center( ModelImage, Area, Row, Column) hom_mat2d_identity(HomMat2DIdentity) 建立一個單位矩陣,即對角線為1,其他為0,注意:產生的矩陣以tuple形式存在,且最後一行不顯示
hom_mat2d_translate(HomMat2DIdentity, Row, Colum, HomMat2DTranslate) hom_mat2d_translate( : : HomMat2D, Tx, Ty : HomMat2DTranslate) 對上面建立的單位矩陣進行轉換,公式為:                                                          / 1 0 Tx \                   HomMat2DTranslate = | 0 1 Ty | * HomMat2D                                                           \ 0 0 1 / 注意,這個轉換矩陣使用的右手規則,也就是說x軸對應的是行,y軸對應的是列 轉換的意義是:                      定位中心點,在後面的轉換中,對結果矩陣進行行和列的定位。 這裡產生的矩陣主要用於後面對對象映像的旋轉,位移等等轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.