Halcon模板匹配算子find_shape_model裏的參數Row, Column, Angle含義是什麼?html
find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)dom
先看官方文檔怎麼說
The position and rotation of the found instances of the model is returned in Row, Column, and Angle. Additionally, the score of each found instance is returned in Score. 找到的模型實例的位置和旋轉以行,列和角度返回。 此外,每一個找到的實例的分數都在Score中返回。
再來作個小實驗
畫圖舉例說明,Row, Column, Angle到底指的是什麼距離?spa
一、已知圖1和圖2。小實驗須要從圖1取出模板,而後在圖2找到相同的物體。.net
二、從圖1框選ROI,ROI的像素中心點是B,ROI就是模板。3d
三、使用find_shape_model算子,在圖2找到了物品,算子返回了Row, Column, Angle三個參數。code
四、以下圖所示,A,B,C點三者的對應關係是求出來了。htm
A是圖1左上角的起點;blog
B是ROI的像素中心點,也是圖2的起點;文檔
C是匹配到的物體像素中心點。get
A與B之間的寬和高分別是(row1,col1)
B與C之間的寬和高分別是(row2,col2)
結論:
find_shape_model算子,其返回值Row, Column參數指的就是row2和col2。
最後來看看halcon實例
*從圖1選取ROI,創建模板 read_image (Image1, '1.jpg') draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2) gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2) area_center (Rectangle, Area, RowRef, ColumnRef) reduce_domain (Image1, Rectangle, ImageReduced) create_shape_model (ImageReduced, 'auto', 0, rad(180), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID) get_shape_model_contours (ShapeModel, ModelID, 1) *讀圖2 read_image (Image2, '2.jpg') *模板匹配 find_shape_model (Image2, ModelID, 0, rad(180), 0.1, 1, 0.5, 'least_squares', 0, 0.7, Row, Column, Angle, Score) if (|Score| > 0) dev_set_color ('yellow') dev_clear_window() vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, MovementOfObject) affine_trans_contour_xld (ShapeModel, ModelAtNewPosition, MovementOfObject) dev_display (ImageNew1) dev_display (ModelAtNewPosition) endif
//Halcon二維仿射變換,嚴格按照平移/旋轉/縮放的前後順序實施 //一切以minModel的中心點(不是幾何中心,而是圖像的分辨率中心)爲零點,即匹配到的圖像的位置,是以minModel的中心點(不是幾何中心,而是圖像的分辨率中心)爲基準的; //先把模板圖minModel.jpg的中心點和待配圖minWorkpiece.jpg的圖像像素起點重合(opencv圖像起點在左上角),而後開始匹配,計算XY偏移量和旋轉角度及縮放因子; //再把模板圖minModel.jpg進行上個步驟獲得的偏移量平移,而後再旋轉和縮放,就能夠獲得minWorkpiece像素座標