第七章 图像的几何变换
标签旋转
read_image (Image, 'C:/Users/DELL/AppData/Roaming/MVTec/HALCON-21.05-Progress/examples/images/barcode/25interleaved/25interleaved_exposure_04.png')
threshold(Image, Region, 49, 255)
connection(Region, ConnectedRegions)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 77900.9, 235228)
shape_trans(SelectedRegions, RegionTrans, 'rectangle2')
area_center(RegionTrans, Area, Row, Column)
reduce_domain(Image, RegionTrans, ImageReduced)
orientation_region(RegionTrans, Phi)
hom_mat2d_identity(HomMat2DIdentity)
hom_mat2d_rotate(HomMat2DIdentity, -Phi, Column, Row, HomMat2DRotate)
affine_trans_image(ImageReduced, ImageAffineTrans, HomMat2DRotate, 'constant', 'false')
透射变换
dev_set_draw('margin')
read_image(Image, 'C:/Users/DELL/AppData/Roaming/MVTec/HALCON-21.05-Progress/examples/images/datacode/ecc200/ecc200_to_preprocess_001.png')
* 获取二维码区域
threshold(Image, Region, 0, 90)
* 将区域形状变换为convex
shape_trans(Region, RegionTrans, 'convex')
* 从区域生成 XLD 轮廓
gen_contour_region_xld(RegionTrans, Contours, 'border')
* 分割轮廓为线段
segment_contours_xld(Contours, ContoursSplit, 'lines', 5, 10, 1)
XCoordCorners := []
YCoordCorners := []
* 对段进行排序
sort_contours_xld(ContoursSplit, SortedContours, 'upper_left', 'true', 'row')
* 求段数量
count_obj(SortedContours, Number)
for Index := 1 to Number by 1
select_obj(SortedContours, ObjectSelected, Index)
* 找到起始点
fit_line_contour_xld(ObjectSelected, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
* 连接X值
tuple_concat(XCoordCorners, RowBegin, XCoordCorners)
* 连接Y值
tuple_concat(YCoordCorners, ColBegin, YCoordCorners)
endfor
* 为每个输入点输出一个十字形的轮廓
gen_cross_contour_xld(Cross, XCoordCorners, YCoordCorners, 6, 0.785398)
px1 := 70
px2 := 270
py1 := 100
py2 := 300
* 创建投影变换矩阵
vector_to_proj_hom_mat2d(XCoordCorners, YCoordCorners, [px2,px1,px2,px1 ], [py2,py2,py1,py1], 'normalized_dlt',[],[],[],[],[],[],HomMat2D1, Covariance)
* 将投影变换应用于图像
projective_trans_image(Image, TransImage1, HomMat2D1, 'bilinear', 'false', 'false')
习题
- 器件旋转至水平
* 旋转至水平
read_image(Image, 'C:/Users/Public/Documents/MVTec/HALCON-20.11-Progress/examples/images/metal-parts/bracket_tilted_02.png')
threshold(Image, Region, 70, 255)
fill_up(Region, RegionFillUp)
shape_trans(RegionFillUp, RegionTrans, 'rectangle2')
area_center(RegionTrans, Area, Row, Column)
reduce_domain(Image, RegionFillUp, ImageReduced)
orientation_region(RegionFillUp, Phi)
hom_mat2d_identity(HomMat2DIdentity)
hom_mat2d_rotate(HomMat2DIdentity, -Phi, Row, Column, HomMat2DRotate)
affine_trans_image(ImageReduced, ImageAffineTrans, HomMat2DRotate, 'constant', 'false')