halcon學習筆記3 幾何定位 仿射變換

2021-10-11 14:28:40 字數 2945 閱讀 8904

關於仿射變換,這裡不做詳細介紹,這裡推薦一篇文章:如何通俗地理解仿射變換

幾何定位和仿射變換的一部分運算元

affine_trans_(iamge,region,xld):仿射變換-作用到iamge,region、xld等都可以

vector_angle_to_rigid():得到乙個剛性仿射變換矩陣

orientation_region():得到指定區域的弧度(與x軸正方向的弧度)

hom_mat2d_identity ():得到乙個單位矩陣

hom_mat2d_translate ():得到乙個平移變換矩陣

hom_mat2d_rotate ():得到乙個旋轉變換矩陣

hom_mat2d_scale ():得到乙個縮放變換矩陣

這裡的引數會在後面的**例項中詳細講解

首先,我採用的影象是自己手機拍的乙個手機充電器頭頭:

我們的此處的目的是:

1.將充電頭先放平(與水平線一致)

這裡先灰度化再通過閾值操作,拿到充電頭所佔的區域

* 灰度化

rgb1_to_gray (image, grayimage)

* 閾值操作,拿到充電頭區域

threshold (grayimage, regions,

133,

254)

效果如下:

然後在拿到充電頭的弧度、中心座標、面積

* 得到充電頭區域與x軸正方形的弧度

orientation_region (regions, phi)

* 得到充電頭的面積和中心點座標

area_center (regions, area, row, column)

這裡的orientation_region 運算元作用是給定區域(regions),返回該區域與x軸正方向的弧度(phi)

在對其進行乙個剛性仿射變換

* 得到乙個剛性仿射的變換矩陣

vector_angle_to_rigid (row, column, phi, row, column,

0, hommat2d)

* 根據旋轉的變換矩陣進行仿射變換

affine_trans_region (regions, regionaffinetrans, hommat2d,

'nearest_neighbor'

)

這裡的vector_angle_to_rigid 運算元,第乙個和第二個引數是要給定乙個原始座標,第三個引數要給他乙個原來的弧度,第四個和第五個就是原來的點座標變換後的點座標,第六個也就是變換後的弧度,最後是接收變換的矩陣控制代碼

affine_trans_region 運算元的第乙個引數是指輸入要變換的區域,第二個引數是變換後的區域控制代碼,第三個引數是乙個變換矩陣,此次變換就是根據這個變換矩陣來變換的,最後乙個引數指的是插值的方式,這裡是預設是最近鄰插值

效果如下:

這裡我們完成了第一步。

2.將充電頭進行旋轉、平移和縮放

* 得到乙個單位矩陣

hom_mat2d_identity (hommat2didentity)

* 得到乙個平移的變換矩陣

hom_mat2d_translate (hommat2didentity,

500,

500, hommat2dtranslate)

* 得到乙個平移加旋轉的變換矩陣

hom_mat2d_rotate (hommat2dtranslate,

rad(-90

), column, row, hommat2drotate)

* 得到乙個平移、旋轉、縮放的變換矩陣

hom_mat2d_scale (hommat2drotate,

0.5,

0.5, column, row, hommat2dscale)

* 根據變換矩陣進行仿射變換

affine_trans_region (regionaffinetrans, regionaffinetrans1, hommat2dscale,

'nearest_neighbor'

)

這裡的hom_mat2d_identity 運算元的作用是得到乙個單位矩陣

hom_mat2d_translate 運算元作用是得到乙個平移的變換矩陣,第乙個引數需要輸入乙個矩陣,第二和第三個引數是指沿x、y軸正方向平移的值,最後乙個引數是輸出的矩陣控制代碼

hom_mat2d_rotate 運算元作用是得到乙個旋轉的變換矩陣,第乙個引數是輸入矩陣,第二個引數是指逆時針旋轉的弧度,這裡使用ard(-90)的意思是旋轉-90度大小的弧度,使用旋轉後的頭頭的插入的方向應該是垂直於x軸的,第三和第四個引數是乙個中心點的座標,此次選擇就是沿著這個點進行旋轉,最後得到輸出矩陣控制代碼,因為輸入是進行了旋轉的矩陣,所以這裡輸出的矩陣是旋轉+平移的矩陣

hom_mat2d_scale 運算元的作用是得到乙個縮放矩陣,第乙個引數是輸入的矩陣,第二個和第三個引數的寬和搞的縮放比例,這裡縮小成了0.5,後面一樣的,是旋轉中心的座標和輸出矩陣控制代碼

最後用affine_trans_region 完成仿射變換

效果圖:

這就完成了!

萌新學習中,給大佬們請多多指教!

HALCON學習筆記3

來自黑土的halcon學習教程,求鞍點 讀取影象 read image image,landmarks 獲得影象大小 get image size image,width,height 關閉影象視窗 dev close window 開啟指定大小顏色的視窗 dev open window 0,0,w...

halcon基於形狀的幾何定位函式說明

1.create shape model template reduce domain後的模板影象 numlevels,金字塔的層數,可設為 auto 或0 10的整數 anglestart,模板旋轉的起始角度 angleextent,模板旋轉角度範圍,0 anglestep,旋轉角度的步長,0 a...

halcon學習筆記02

直方圖均衡化 直方圖均衡化 equ histo image grayimage,imageequhisto 增強對比度,細節 emphasize data,imageemphasize,10,10,1.5 去噪 第四個引數是進行中值濾波的卷積核的尺寸,第五個引數是邊界處理方式,continued表示...