產品分類
  • 光源
    圓頂光環形光環形無影光條形光條形組合光線光源同軸線光同軸光同軸平行光
    圓頂光
    環形光
    環形無影光
    條形光
    條形組合光
    線光源
    同軸線光
    同軸光
    同軸平行光
    背光源
    平行背光
    環形/回形背光
    點光源
    AOI光源
    隧道線光源
    超薄側面背光源
    大功率環形光源
    半環形光源
    低角度無影光源
    多方向無影光源
    大功率條形光
    圓頂環形組合光源
    低角度方形光源
    方形/拱形無影光源
    多色條形光源
    大功率同軸光源
    平行集光光源
    多角度環形光源
    定制圓形背光源
    多角度線光
    防水/防塵光源
    工業冷光源
  • 控制器
    模擬控制器數字控制器恒流控制器
    模擬控制器
    數字控制器
    恒流控制器
  • 相機
    大恒相機AVT相機海康微視相機巴斯勒相機(Basler)
    大恒相機
    AVT相機
    海康微視相機
    巴斯勒相機(Basler)
  • 鏡頭
    遠心鏡頭computer鏡頭賓得RICOH理光鏡頭其他鏡頭
    遠心鏡頭
    computer鏡頭
    賓得RICOH理光鏡頭
    其他鏡頭
  • 配件
    偏振鏡及偏振片漫射板濾光片
    偏振鏡及偏振片
    漫射板
    濾光片
聯系我們

聯系我們

副標題

 工作時間
周一至周五 :8:30-17:30
 聯系方式
公司前臺:0769-33282880
客服熱線:18665653625
郵箱:chinwan9@163.com

Halcon教程之基于形狀的匹配

基于形狀的匹配不使用像素及其鄰域的灰度值作為模板而是用輪廓的形狀描述模型。本節主要講述四個方面


?基于形狀的匹配的一個示例

?如何從參考圖像選擇一個適當的 ROI派生模板圖像

?如何創建合適的模型

?如何優化搜索


請注意, 對于基于形狀的匹配, 可用HDevelop 助手進行配置和測試以獲得最大匹配速度和識別率。

1 示例


在本節中, 我們給出了基于形狀匹配的匹配過程的快速概述。實力為HDevelop 程序solution_guide\matching\first_example_shape_matching.hdev, 它定位打印在 IC 上圖案。


步驟 1:在參考圖像中選擇對象


抓取參考圖像后, 第一個任務是創建包含該對象的區域。在示例程序中, 使用算子gen_rectangle1創建一個矩形區域。可以用交互式的方式繪制區域, 例如,draw_rectangle1或者使用以前的分割過程所產生的區域。然后, 使用算子reduce_domain創建一個僅包含選定區域 (即模板圖像) 的圖像。


Row1 := 188

Column1 := 182

Row2 := 298

Column2 := 412

gen_rectangle1 (ROI, Row1, Column1, Row2, Column2)

reduce_domain (ModelImage, ROI, ImageROI)


步驟 2:創建模型


   使用算子create_shape_model創建模型。在創建模型之前, 我們建議應用算子inspect_shape_model, 該算子可以為模型創建找到合適的參數。


inspect_shape_model (ImageROI, ShapeModelImages, ShapeModelRegions, 8, 30)

create_shape_model (ImageROI, NumLevels, 0, rad (360), ' auto ', ' no ',  ' use_polarity ', 30, 10, ModelID)

                1                                                     2

   (左) 參考圖像的 ROI 指定對象;    (右) 內部模型 (4 個金字塔級別)。

       inspect_shape_model顯示兩個參數的效果, 特別是創建模型的金字塔級別數 (NumLevels) 和最小對比度。因此, 算子inspect_shape_model返回所選金字塔級別上的模型點。因此, 您可以檢查模型是否包含相關信息來描述感興趣的對象。


       當實際使用算子create_shape_model創建模型時, 除了NumLevels和對比度可以指定其他參數。例如, 可以限制對象可以承擔的角度范圍 (AngleStart和AngleExtent) 和創建模型的角度步長 (AngleStep)。參數Optimization可以減少模型點的數量, 這在模型非常大的情況下是有用的。參數Metric用于指定是否必須觀察模型點的極性。最后,可以通過參數MinContrast指定最小對比度對象點必須在搜索圖像中與模型進行對比度。

     

       如果不僅方向, 而且搜索對象的縮放比例也允許變化, 則必須使用算子create_scaled_shape_model或create_aniso_shape_model來創建模型。然后, 可以用類似于角度范圍的參數來描述允許的比例范圍。


步驟 3: 查找對象


       要在搜索圖像中查找對象, 只需調用算子find_shape_model即可。對其中一個示例圖像的結果進行了分析。

for i := 1 to 20 by 1

   grab_image (SearchImage, FGHandle)

   find_shape_model (SearchImage, ModelID, 0, rad(360), 0.7, 1, 0.5,     'least_squares', 0, 0.7, RowCheck, ColumnCheck, AngleCheck, Score)

endfor

       除已經被提及的ModelID,find_shape_model提供了進一步優化搜索過程的參數。參數AngleStart,AngleExtent和NumLevels在創建模型時已經指定, 允許在搜索過程中使用更嚴格的值通過使用NumLevels值為0, 則使用在創建模型時指定的值。參數MinScore可以指定如何模型的大部分必須是可見的。值0.5近似地意味著必須找到模型的輪廓的一半。此外, 還可以指定圖像中預期對象的實例數量 (NumMatches) 和多少個實例的對象可能在圖像中重疊 (MaxOverlap)。參數Greediness描述使用的啟發式搜索,范圍從 "安全但緩慢" (值0) "快速但不安全" (值1)。


       算子find_shape_model返回每個找到的對象實例的位置和方向在 "參數行,列和角度, 及其相應得分.

                                   在其他圖像中查找對象。

       如果使用算子find_scaled_shape_model或find_aniso_shape_model(分別在創建模型時使用create_scaled_shape_model或create_aniso_shape_model), 可計算X方向比例或者Y方向比例。


步驟 4:銷毀模型


當不再需要形狀模型時,使用clear_shape_model.將模型銷毀。

Clear_shape_model (ModelID)


2選擇模型 ROI


       作為基于形狀的匹配的第一步, 指定模板圖像的感興趣區域必須按照所描述的那樣選擇,可以創建一個僅包含對象 "健壯" 部分的 ROI。必須選擇 ROI, 以便它包含對象的所有突出結構。為此, ROI 不應該太 "薄", 因為否則它在更高的金字塔等級消失。作為一個經驗法則, 如果 ROI 最小為是2NumLevels?1像素寬。即8像素的寬度允許使用4個金字塔級別。


       在引用圖像中使用基于形狀的匹配時, 還可以使用算子inspect_shape_model通過額外的圖像處理來改進交互式選擇的 ROI。在例程solution_guide\matching\

process_shape_model.hdev中有詳細說明。


步驟 1: 選擇箭頭


在該箭頭周圍不嘗試排除雜波創建初始 ROI



處理結果inspect_shape_model: a) 交互式 ROI;b) 不同價值的模型Contrast;c) 加工模型區域和相應的 ROI 和模型;d) 搜索結果。


gen_rectangle1 (ROI, 361, 131, 406, 171)

reduce_domain (ModelImage, ROI, ImageROI)


步驟 2:創建初始模型區域


然后, 通過以下方式檢查 ROI。


inspect_shape_model (ImageROI, ShapeModelImage, ShapeModelRegion, 1, 30)


b顯示將為參數的不同對比值創建的形狀模型區域。正圖形顯示, 不能刪除雜波而不丟失箭頭本身的特征點。


步驟 3:處理模型區域


這個問題可以通過利用算子inspect_shape_model返回形狀模型區域來解決。因此, 您可以像其他區域一樣處理它。主要利用形態學算子opening_circle去除雜波消除干擾區域。在此之前,必須適應算子 fill_up填充箭頭的內部部分, 因為只有邊界點屬于 (原) 模型區域。


fill_up (ShapeModelRegion, FilledModelRegion)

opening_circle (FilledModelRegion, ROI, 3.5)


步驟 4:創建最終模型


然后, 將獲得的區域用于創建匹配的模型, 以便成功查找所有箭頭。圖3.4c顯示處理的區域、相應的感興趣區域和最終模型區域。


create_shape_model (ImageROI, 3, 0, rad(360), 'auto', 'none', 'use_polarity', 30, 15, ModelID)


3創建合適的形狀模型


       從參考圖像選擇模板圖像用來創建形狀模型。請注意, 基于形狀的匹配由不同的方法組成, 用于在圖像中查找經過訓練的對象。根據所選方法, 采用下列算子之一來創建模型:


?create_shape_model為基于形狀的簡單匹配創建模型, 使用模板圖像派生模型, 并且不支持縮放。

?create_shape_model_xld為基于形狀的簡單匹配創建模型, 使用 XLD 輪廓派生模型, 并且不支持縮放。

?create_scaled_shape_model為基于形狀的匹配創建模型, 使用模板圖像派生模型并支持統一縮放。

?create_scaled_shape_model_xld為基于形狀的匹配創建模型, 使用 XLD 輪廓派生模型, 并支持統一縮放。

?create_aniso_shape_model為基于形狀的匹配創建模型, 使用模板圖像派生模型并支持各向異性縮放。

?create_aniso_shape_model_xld為基于形狀的匹配 t 創建模型hat 使用 XLD 輪廓來推導模型, 并支持各向異性縮放。


請注意, 如果從 XLD 輪廓派生模型, 則在第一次匹配之后, 強烈建議使用set_shape_model_metric確定模型的極性信息。


?通過調整參數Contrast指定哪個像素是模型的一部分

?通過調整參數NumLevels使用抽樣加快搜索速度,

?調整參數的方向范圍AngleExtent,AngleStart和AngleStep

?通過調整參數ScaleMin,ScaleMax和ScaleStep來允許特定范圍的刻度或相應參數的各向同性縮放

?通過調整參數MinContrast指定在最小對比度


請注意, 在調整參數時,可以利用HALCON算子:

?應用inspect_shape_model:

在創建模型之前, 可以應用運算符inspect_shape_model到模板圖像以嘗試不同的NumLevels參數值和對比度。算子返回具有多個金字塔級別的形狀模型的結果表示形式, 從而允許您直觀地檢查該模型是否充分表示了感興趣的對象。如果參數值的幾個組合不能得到滿意的結果, 可能是模板圖像或模型的 ROI 未正確選擇。


?使用自動參數建議:

對于許多參數你可以讓HALCON建議合適的參數。然后, 可以將create_shape_model相應的參數設置為’auto’在, 或應用determine_shape_model_params自動確定參數對于模板圖像中的形狀模型。請注意, 這兩種方法只返回大約相同的值, 并且create_shape_model返回更精確的值。



3.1指定像素這是模型的一部分 (對比度)


      當調用create_shape_model時通過對比度指定獲得一個合適的模型對比應該選擇在重要的特征像素濾除雜波。


       在某些情況下, 不可能找到一個單一的對比度值可以消除雜波而不移除對象的某些部分。下圖顯示一個示例。任務是為墊的輪廓創建模型。如果選擇了完整的輪廓, 則模型還包含雜波 (圖a).如果移除雜波, 則缺少部分輪廓 (b).


選擇對比度: a) 包含雜波的完整對象;b) 小雜波但不完整的物體;c) 滯后閾值;d) 最小輪廓尺寸。


       為解決此問題, 參數Contrast提供了兩種附加方法: 滯后閾值和基于尺寸的輪廓零件的選擇。指定一個值的元組來使用這兩個方法而不是單個值。

滯后閾值 (參見算子hysteresis_threshold) 使用兩個閾值, 一個下限和一個上限。對于模型, 選擇的第一個像素的對比度高于上限閾值。然后, 像素的對比度高于較低的閾值和連接添加到高對比度像素, 直接或通過另一像素與較低閾值的對比度。此方法使您可以選擇對比度較低的輪廓部分。返回到的例子與墊: 你可以看到在c, 有一個滯后閾值, 你可以創建一個模型的完整墊輪廓。下面的代碼行演示如何在元組中指定兩個閾值:


inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 2, [40,70])


       第二種去除雜波的方法是為輪廓組件指定最小輪廓尺寸 (即像素數)。圖d顯示示例任務的結果。必須在元組的第三個元素中指定最小輪廓尺寸。如果不希望另外使用滯后閾值, 必須將前兩個元素設置為相同的值:


inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 2, [40,40,30])


請注意, 您可以讓HALCON選擇合適的值本身通過指定對比對參數為‘auto’。


3.2 使用抽樣和減少點加快搜索速度 (NumLevels)


       為了加快匹配過程, 可以使用抽樣方法。 由原始的、全尺寸的圖像和一組縮減像素取樣圖像組成一個圖像金字塔。然后在上創建并搜索模型在不同的金字塔等級。

       可以指定通過參數使用的金字塔級別數NumLevels。建議選擇最高的金字塔級別, 模型至少包含10-15 像素, 并且模型的形狀仍然類似于對象形狀。


一個簡單得多的方法是讓HALCON選擇合適的值通過指定NumLevels為’auto’.然后, 您可以通過算子get_shape_model_params查詢所使用的值。


3.3.3.3允許方向范圍 (AngleExtent,AngleStart,AngleStep)


       如果對象的旋轉可能在搜索圖像中有所不同, 則可以在參數中指定允許的范圍AngleExtent和起始角AngleStart(單位: 弧度)。請注意, 旋轉的范圍是相對于參考圖像定義的, 即, 一個起始角度0對應于對象在參考圖像中的方向。


       請注意, 在調用算子find_shape_model時可以進一步限制允許的范圍。因此, 如果要對需要不同角度范圍的不同任務重用模型, 則可以在創建模型和搜索范圍較小時使用大范圍。


       如果對象是 (幾乎) 對稱的則應該限制允許的范圍。否則, 搜索過程將在同一對象上以不同的角度找到多個幾乎相同的匹配項。哪個匹配 (在哪個角度) 被返回作為最佳可以跳躍從圖片到圖象。適用的旋轉范圍取決于對稱性: 對于十字形或方形物體, 允許的范圍必須小于90?, 對于小于180的矩形對象?, 對于圓形對象0?。


        大范圍的旋轉也會導致高內存需求。因此, 在這種特殊情況下, 建議盡可能限制在創建模型期間已經允許的旋轉范圍, 以加快搜索速度。


       在匹配過程中, 在允許范圍內的不同角度搜索模型, 并在參數AngleStep指定步長.如果選擇該值’auto’, HALCON通過確定圖像中仍然可見的最小旋轉自動選擇最佳步長φ選擇, 可以達到盡可能高的精度。

旋轉對稱對象的適當角度范圍。

 

請注意, 選擇一個非常小的步驟大小不會導致增加角度精度!


3.4 允許規模范圍 ((Scale*Min, Scale*Max, Scale*Step)


       與方向范圍類似, 您可以指定允許的比例范圍。可以允許以兩種形式進行縮放:

?行和列方向相同的縮放 (統一縮放)

?行和列方向的不同縮放 (各向異性縮放)


請注意, 選擇一個非常小的步長大小不會導致增加的規模精度!


3.5指定與模型比較的像素 ((MinContrast, Metric)


       為提高搜索模型的效率。您可以指定參數MinContrast搜索圖像中某個點必須至少具有的對比度, 以便與模型進行比較。此參數的主要用途是從匹配過程中排除噪聲, 即灰色值波動。


       可以讓HALCON選擇合適的值本身通過指定MinContrast為‘auto’。


       該參數度量讓可指定極性, 即對比度的方向是否和如何被檢測到。如果選擇值' use_polarity '觀察到極性, 即搜索圖像中的點必須顯示與模型中相應點的對比方向。模型是一個明亮的對象在黑暗背景下, 只有當它比背景更亮時, 才會在搜索圖像中找到該對象。

       通過選擇值, 您可以選擇忽略全局極性' ignore_global_polarity '。在這種模式下, 如果對象的對比度反轉也會被識別, 例如, 如果對象在光背景下既可以顯示為深色形狀。然而, 這種靈活性是以降低速度為代價。


       如果選擇該值' ignore_local_polarity ', 即使對比度在背景中更改, 也會找到該對象。此模式很有用, 例如, 如果對象由具有中等灰度值的部件組成, 則在其中深色或更亮的區域。

       但是請注意, 在這種模式下, 識別速度和魯棒性可能會顯著降低, 特別是如果您允許進行大范圍的旋轉 。

如何指定模板的極性


 

       如果您創建了XLD 輪廓模型, 沒有關于可用模型極性的信息。因此, 在創建模型時, Metric必須設置為' ignore_local_polarity '。


3.6檢查和修改形狀模型


       如果要直觀地檢查已創建的形狀模型, 可以使用get_shape_model_contours獲取表示模型在特定的 XLD 的輪廓。請注意, 模型的 XLD 輪廓位于圖像的原點, 因此可能需要進行適當的可視化轉換。


       使用算子get_shape_model_params檢查模型的當前參數值。

       保存到文件時使用write_shape_model。

       讀取模型文件使用read_shape_mode。


       在創建模型之后, 在搜索圖像中搜索對象之前, 可以進一步修改模型。可以使用set_shape_model_param更改單個參數和set_shape_model_origin更改模型的原點。

       請注意, 通過修改參照點, 估計位置的精度可能會降低,因此如果可能, 引用點不應更改。


4優化搜索過程


實際匹配由下列運算符之一執行:


?find_shape_model搜索單個模型的實例, 如果模型的實例可能不隨比例變化, 則使用

?find_shape_models同時搜索多個模型的實例, 如果模型的實例可能不隨比例變化, 則使用

?find_scaled_shape_model搜索單個模型的實例, 如果允許統一縮放, 則使用

?find_scaled_shape_models同時搜索多個模型的實例, 如果允許統一縮放, 則使用

?find_aniso_shape_model搜索單個模型的實例, 如果允許行和列方向的不同縮放比例因子, 則使用

?find_aniso_shape_models同時搜索多個模型的實例, 如果行中的不同縮放因子, 則使用和列方向是允許的。


在下面, 我們展示了如何為這些算子選擇合適的參數來適應和優化匹配任務。


?將搜索空間限制到感興趣的區域

?通過參數限制方向和縮放范圍來限制搜索空間AngleStart,AngleExtent,ScaleMin和ScaleMax或對應的各向異性縮放參數

?將搜索空間限制為對象的允許閉塞的特定數量, 即通過參數指定對象的可見性MinScore

?通過調整參數Greediness, 指定使用的搜索啟發式

?通過調整參數NumMatches和MaxOverlap來搜索模型的多個實例

?通過調整參數ModelIDs同時搜索多個模型

?通過調整參數subpixel指定結果所需的精度

?限制金字塔級別的數量 (NumLevels) 優化搜索過程


請注意, 許多匹配方法只能用于在圖像中搜索單個模型的單個實例, 而基于形狀的匹配還可用于同時搜索多個模型的幾個實例。


create_scaled_shape_model (ImageROIRing, 'auto', -rad(22.5), rad(45), 'auto', 0.8, 1.2, 'auto', 'none', 'use_polarity', 60, 10, ModelIDRing)

create_scaled_shape_model (ImageROINut, 'auto', -rad(30), rad(60), 'auto', 0.6, 1.4, 'auto', 'none', 'use_polarity', 60, 10, ModelIDNut)

ModelIDs := [ModelIDRing,ModelIDNut]


會員登錄
登錄
我的資料
留言
回到頂部