halcon-find_shape_model形狀模板匹配


形狀匹配原理:模板創建后,會根據模板中的邊緣等關系去圖像中進行搜索,可以理解成提取模板中的灰度發生變化的那些點,然后再去圖像中匹配,這樣的效果是對干擾比較穩定,匹配速度快,並且即使邊緣發生部分遮擋,匹配效果依舊較好

定位對象內部的灰度值可以有變化,但對象邊緣輪廓必須清晰平滑的場合

 

 

在HDevelop中

dev_close_window ()
read_image (Image, 'D:/bb/tu/3.jpg')
rgb1_to_gray (Image, GrayImage)

****截取模板圖像:B字母****
gen_rectangle1 (Rectangle, 16, 120, 69, 172)
reduce_domain (GrayImage, Rectangle, ImageReduced)
get_image_size (ImageReduced, Width, Height)
dev_open_window(10,100,Width, Height,'black',WindowHandle1)
*顯示模板圖像
dev_display(ImageReduced)

inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 4, 30)
*預覽金字塔
*金字塔多少層比較合適,可以通過ModelRegions觀看--為后面創建模板做准備
*參數1:輸入模板圖像
*參數2:輸出的金字塔圖像
*參數3:金字塔區域
*參數4:金字塔層數
*參數5:圖像中物體對比度的閾值或滯后閾值,以及可選的物體部分的最小尺寸


create_shape_model (ImageReduced, 'auto', -0.2, 0.2, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
*創建形狀模板
*參數1:模板圖像(reduce_domain后)
*參數2:金字塔的最大層級--層級越高搜索越快
*      值列表:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'auto'
*參數3:模板旋轉的起始角度--弧度
*參數4:模板旋轉的終止角度--弧度
*參數5:角度步長
*       限制:角度步長>=0和角度步長<=pi/16
*參數6:設置模板優化和模板創建方法
*       'auto'
*       'no_pregeneration'
*       'none', 'point_reduction_high', 'point_reduction_low', 'point_reduction_medium', 'pregeneration'
*參數7:匹配方法設置
*       'ignore_color_polarity'    即使顏色對比度在局部發生變化,也會找到模型--可用於具有任意數量通道的圖像
*       'ignore_global_polarity'   如果對比度(比如亮背景暗前景)全局反轉,也會在圖像中找到對象--只能應用於單通道圖像
*       'ignore_local_polarity'    即使對比度在局部發生變化,也會找到模型--只能應用於單通道圖像
*       'use_polarity'   則圖像中的對象和模型必須具有相同的對比度。例如,如果模型是暗背景上的明亮對象,則僅當該對象也比背景亮時,才能找到該對象--只能應用於單通道圖像  
*                        如果多通道圖像用作模型圖像或搜索圖像,則只會使用第一個通道(並且不會返回錯誤消息)
*參數8:設置對比度
*參數9:設置最小對比度
*參數10:模板句柄


find_shape_model (GrayImage, ModelID, -0.2, 0.2, 0.5, 6, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
*形狀模板匹配
*參數1:輸入圖像
*參數2:模板句柄
*參數3:搜索時的起始角度
*參數4:搜索時的終止角度,必須與創建模板時的有交集
*參數5:被找到的模板最小分數--大於等於這個值才能被匹配
*      默認值:0.5      建議值:0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0
*      典型值范圍:0≤MinScore ≤ 1
*      最小增量:0.01       建議增量:0.05
*參數6:要找到的模板最大實例數
*       0   不限制
*參數7:要找到的模型實例的最大重疊比例
*      默認值:0.5       建議值:0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0
*      典型值范圍:0≤ MaxOverlap≤ 1      最小增量:0.01     建議增量:0.05
*      0 表示不允許重疊
*參數8:計算精度的設置
*        'none'   不適用亞像素,最大誤差為半個像素
*        'interpolation'   差值得到亞像素精度
*        'least_squares', 'least_squares_high', 'least_squares_very_high'
*        'max_deformation 1', 'max_deformation 2', 'max_deformation 3', 'max_deformation 4'
*        'max_deformation 5', 'max_deformation 6'
*參數9:搜索時金字塔的層級
*參數10:貪婪度,搜索啟發式,一般都設為0.8,越高速度快,容易出現找不到的情況
*       0≤ Greediness ≤ 1   
*最后4個:輸出匹配位置的行和列坐標、角度、得分 【中心坐標】

 

 


在QtCreator中

  HObject  ho_Image, ho_GrayImage, ho_Rectangle;
  HObject  ho_ImageReduced, ho_ModelImages, ho_ModelRegions;
  HTuple  hv_Width, hv_Height, hv_WindowHandle1;
  HTuple  hv_ModelID, hv_Row, hv_Column, hv_Angle, hv_Score;

 

  ReadImage(&ho_Image, "D:/bb/tu/3.jpg");
  Rgb1ToGray(ho_Image, &ho_GrayImage);

  //***截取模板圖像:B字母****
  GenRectangle1(&ho_Rectangle, 16, 120, 69, 172);
  ReduceDomain(ho_GrayImage, ho_Rectangle, &ho_ImageReduced);
  GetImageSize(ho_ImageReduced, &hv_Width, &hv_Height);
  SetWindowAttr("background_color","black");
  OpenWindow(10,100,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle1);
  HDevWindowStack::Push(hv_WindowHandle1);
  //顯示模板圖像
  if (HDevWindowStack::IsOpen())
    DispObj(ho_ImageReduced, HDevWindowStack::GetActive());

  InspectShapeModel(ho_ImageReduced, &ho_ModelImages, &ho_ModelRegions, 4, 30);
  //預覽金字塔
  //金字塔多少層比較合適,可以通過ModelRegions觀看--為后面創建模板做准備
  //參數1:輸入模板圖像
  //參數2:輸出的金字塔圖像
  //參數3:金字塔區域
  //參數4:金字塔層數
  //參數5:圖像中物體對比度的閾值或滯后閾值,以及可選的物體部分的最小尺寸


  CreateShapeModel(ho_ImageReduced, "auto", -0.2, 0.2, "auto", "auto", "use_polarity", 
      "auto", "auto", &hv_ModelID);
  //創建形狀模板
  //參數1:模板圖像(reduce_domain后)
  //參數2:金字塔的最大層級--層級越高搜索越快
  //     值列表:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'auto'
  //參數3:模板旋轉的起始角度--弧度
  //參數4:模板旋轉的終止角度--弧度
  //參數5:角度步長
  //      限制:角度步長>=0和角度步長<=pi/16
  //參數6:設置模板優化和模板創建方法
  //      'auto'
  //      'no_pregeneration'
  //      'none', 'point_reduction_high', 'point_reduction_low', 'point_reduction_medium', 'pregeneration'
  //參數7:匹配方法設置
  //      'ignore_color_polarity'    即使顏色對比度在局部發生變化,也會找到模型--可用於具有任意數量通道的圖像
  //      'ignore_global_polarity'   如果對比度(比如亮背景暗前景)全局反轉,也會在圖像中找到對象--只能應用於單通道圖像
  //      'ignore_local_polarity'    即使對比度在局部發生變化,也會找到模型--只能應用於單通道圖像
  //      'use_polarity'   則圖像中的對象和模型必須具有相同的對比度。例如,如果模型是暗背景上的明亮對象,則僅當該對象也比背景亮時,才能找到該對象--只能應用於單通道圖像
  //                       如果多通道圖像用作模型圖像或搜索圖像,則只會使用第一個通道(並且不會返回錯誤消息)
  //參數8:設置對比度
  //參數9:設置最小對比度
  //參數10:模板句柄


  FindShapeModel(ho_GrayImage, hv_ModelID, -0.2, 0.2, 0.5, 6, 0.5, "least_squares", 
      0, 0.9, &hv_Row, &hv_Column, &hv_Angle, &hv_Score);
  //形狀模板匹配
  //參數1:輸入圖像
  //參數2:模板句柄
  //參數3:搜索時的起始角度
  //參數4:搜索時的終止角度,必須與創建模板時的有交集
  //參數5:被找到的模板最小分數--大於等於這個值才能被匹配
  //     默認值:0.5      建議值:0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0
  //     典型值范圍:0≤MinScore ≤ 1
  //     最小增量:0.01       建議增量:0.05
  //參數6:要找到的模板最大實例數
  //      0   不限制
  //參數7:要找到的模型實例的最大重疊比例
  //     默認值:0.5       建議值:0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0
  //     典型值范圍:0≤ MaxOverlap≤ 1      最小增量:0.01     建議增量:0.05
  //     0 表示不允許重疊
  //參數8:計算精度的設置
  //       'none'   不適用亞像素,最大誤差為半個像素
  //       'interpolation'   差值得到亞像素精度
  //       'least_squares', 'least_squares_high', 'least_squares_very_high'
  //       'max_deformation 1', 'max_deformation 2', 'max_deformation 3', 'max_deformation 4'
  //       'max_deformation 5', 'max_deformation 6'
  //參數9:搜索時金字塔的層級
  //參數10:貪婪度,搜索啟發式,一般都設為0.8,越高速度快,容易出現找不到的情況
  //      0≤ Greediness ≤ 1
  //最后4個:輸出匹配位置的行和列坐標、角度、得分 【中心坐標】

 

 

 

 


免責聲明!

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



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