read_image (Image13, 'E:/vs//13.png')
get_image_size (Image13, Width, Height)
gen_rectangle1 (Rectangle, 0, 0, Height, Width/2)
reduce_domain (Image13, Rectangle, ImageReduced)
crop_domain (ImageReduced, Image1)
gen_rectangle1 (Rectangle, 0, Width/4, Height, 3*Width/4)
reduce_domain (Image13, Rectangle, ImageReduced)
crop_domain (ImageReduced, Image2)
gen_rectangle1 (Rectangle, 0, Width/2, Height, Width)
reduce_domain (Image13, Rectangle, ImageReduced)
crop_domain (ImageReduced, Image3)
tile_images— 将多个图像对象平铺为一个大图像。常用于固定点位拍摄图像拼接
concat_obj (Image1, Image2, Images)
concat_obj (Images, Image3, Images)
count_obj (Images, Number)
tile_images_offset (Images, TiledImage, [0,0,0], [0, Width/4,Width/2], [-1,-1,-1], [-1,-1,-1], [-1,-1,-1], [-1,-1,-1], 1527, 623)
proj_match_points_ransac 是一个在Halcon中用于基于RANSAC算法进行点匹配的算子。这个算子能够通过灰度匹配方法计算点之间的相似度,然后使用RANSAC算法从中筛选出内点,并估计出最佳的变换矩阵。最后,输出匹配点对和变换矩阵,用于后续的图像处理任务。
From := [1,2]
To := [2,3]
Num := |From|
*需要变量来累加投影变换矩阵, 匹配点的坐标,以及匹配的个数每个图像对的点。
ProjMatrices := []
Rows1 := []
Cols1 := []
Rows2 := []
Cols2 := []
NumCorrespondences := []
for J := 0 to Num - 1 by 1
F := From[J]
T := To[J]
select_obj (Images, ImageF, F)
select_obj (Images, ImageT, T)
* 提取两幅图像中的点。
SigmaGrad := 1
SigmaSmooth := 3
Alpha := 0.04
Threshold := 0
points_harris (ImageF, SigmaGrad, SigmaSmooth, Alpha, Threshold, RowFAll, ColFAll)
points_harris (ImageT, SigmaGrad, SigmaSmooth, Alpha, Threshold, RowTAll, ColTAll)
* 为搜索窗口的位置定义初始值
FShiftR := 0
FShiftC := 0
TShiftR := 0
TShiftC := Width/4
RowMove := (FShiftR - TShiftR) / 1
ColMove := (FShiftC - TShiftC) / 1
* 执行匹配
MaskSize := 1
RowTolerance := 80
ColTolerance := 80
Rotation := 0
MatchThreshold := 50
DistanceThreshold := 0.4
RandSeed := 0
proj_match_points_ransac (ImageF, ImageT, RowFAll, ColFAll, RowTAll, ColTAll, 'sad', MaskSize, RowMove, ColMove, RowTolerance, ColTolerance, Rotation, MatchThreshold, 'gold_standard', DistanceThreshold, RandSeed, ProjMatrix, Points1, Points2)
*累加变换矩阵
ProjMatrices := [ProjMatrices,ProjMatrix]
* 匹配点。
Rows1 := [Rows1,subset(RowFAll,Points1)]
Cols1 := [Cols1,subset(ColFAll,Points1)]
Rows2 := [Rows2,subset(RowTAll,Points2)]
Cols2 := [Cols2,subset(ColTAll,Points2)]
NumCorrespondences := [NumCorrespondences,|Points1|]
* 生成十字,表示平铺图像中提取的点。必须取平铺图像中图像的行偏移量考虑在内。
gen_cross_contour_xld (PointsF, RowFAll + FShiftR, ColFAll + FShiftC, 6, rad(45))
gen_cross_contour_xld (PointsT, RowTAll + TShiftR, ColTAll + TShiftC, 6, rad(45))
* 生成匹配的点对作为线的表示。我们创建XLD轮廓线,使我们可以放大到图形窗口仔细观察一下比赛结果。
RowF := subset(RowFAll,Points1) + FShiftR
ColF := subset(ColFAll,Points1) + FShiftC
RowT := subset(RowTAll,Points2) + TShiftR
ColT := subset(ColTAll,Points2) + TShiftC
gen_empty_obj (Matches)
for K := 0 to |RowF| - 1 by 1
gen_contour_polygon_xld (Match, [RowF[K],RowT[K]], [ColF[K],ColT[K]])
concat_obj (Matches, Match, Matches)
endfor
* 现在显示提取的数据。
dev_set_color ('blue')
dev_display (Matches)
dev_set_color ('green')
dev_display (PointsF)
dev_display (PointsT)
endfor
bundle_adjust_mosaic
NumImages (input_control):用于校准的不同图像的数量。 限制:NumImages >= 2
ReferenceImage (input_control):参考图像的索引。
MappingSource (input_control):变换的源像的下标。
MappingDest (input_control):变换的目标像的下标。
HomMatrices2D (input_control):3×3射影变换矩阵的数组。
Rows1 (input_control):源图像中相应点的行坐标。
Cols1 (input_control):源图像中对应点的列坐标。
Rows2 (input_control):目标图像中相应点的行坐标。
Cols2 (input_control):目标图像中相应点的列坐标。
nummappings (input_control):对应图像对中的点对应数。
Transformation(input_control):要使用的转换类。 默认值:“射影” 值列表:'affine', 'projective', 'rigid', 'similarity'。
MosaicMatrices2D (output_control):3×3射影变换矩阵的数组,确定图像在马赛克中的位置。
Rows(output_control):通过束平差重建的点的行坐标。
Cols(output_control):通过束平差重建的点的列坐标。
Error (output_control):每个重构点的平均误差。
gen_bundle_adjusted_mosaic— 将多个图像合并为一个马赛克图像。
Images:输入图像
MosaicImage:输出的马赛克图像
HomMateices2D:3x3 投影数组 变换矩阵。
StackingOrder:马赛克中图像的堆叠顺序。
TransformDomain:转化域
TransMat2D:3x3 投影变换矩阵 ,将所有图像完全转换为输出图像。
*对图像进行行束调整
bundle_adjust_mosaic (3, StartImage, From, To, ProjMatrices, Rows1, Cols1, Rows2, Cols2, NumCorrespondences, Transformation, MosaicMatrices2D, Rows, Cols, Error)
*组合多张图片到一张拼接图片中。
gen_bundle_adjusted_mosaic (Images, MosaicImage, MosaicMatrices2D, 'default', TransformRegion, TransMat2D)
标签:control,Halcon,Width,拼接,图像,Images,input,gen
From: https://blog.csdn.net/2202_75557553/article/details/143104255