关于Halcon基于特征点图像拼接的算子实现

关于Halcon基于特征点图像拼接的算⼦实现
dev_update_off ()
read_image (Image1, ‘C:/Users/HS/Desktop/test/building_01.png’)
rgb3_to_gray (Image1, Image1, Image1, ImageGray)
read_image (Image2, ‘C:/Users/HS/Desktop/test/building_02.png’)
rgb3_to_gray (Image2, Image2, Image2, ImageGray1)
get_image_size (ImageGray, Width, Height)
dev_open_window (0, 0, Width, Height, ‘white’, WindowHandle)
*获取两张图的特征点,可以使⽤获取交叉点的⽅式将所有点显⽰出来,这⾥不显⽰
points_foerstner (ImageGray, 1, 2, 3, 100, 0.3, ‘gauss’, ‘true’, Rows1, Columns1, CoRRJunctions, CoRCJunctions, CoCCJunctions, RowArea, ColumnArea, CoRRArea, CoRCArea, CoCCArea)
points_foerstner (ImageGray1, 1, 2, 3, 100, 0.3, ‘gauss’, ‘true’, Rows2, Columns2, CoRRJunctions, CoRCJunctions, CoCCJunctions, RowArea, ColumnArea, CoRRArea, CoRCArea, CoCCArea)
*匹配要拼接的两图边缘部分,可以设置匹配分数,旋转⾓度。即到可以拼接的地⽅
*得到投影矩阵HomMat2DUnrectified,还有两边图像边缘部分匹对到的像素索引 Points1Unrectified, Points2Unrectified,可以显⽰出来。
proj_match_points_ransac (ImageGray, ImageGray1, Rows1, Columns1, Rows2, Columns2, ‘ncc’, 10, 0, 0, Height, Width, 0, 0.5, ‘gold_standard’, 2, 42, HomMat2DUnrectified, Points1Unrectified, Points2Unrectified)
*串接两个图标元组,ImageGray, ImageGray1传⼊的是引⽤类型,因此要避免原图被修改。连接功能区别于union1算⼦(region)
*输出Images元组包含了两个输⼊元组的所有图标对象
concat_obj (ImageGray, ImageGray1, Images)
*将串接的所有图像,在指定的第⼀张图上(索引的⽅式)按照顺序堆叠(镶嵌)起来(使⽤索引的⽅式)
*输出合成图像和图像的投影矩阵(镶嵌边缘):MosaicMatrices2DUnrectified
gen_projective_mosaic (Images, MosaicImageUnrectified, 1, 1, 2, HomMat2DUnrectified, ‘default’, ‘false’, MosaicMatrices2DUnrectified)
*以上拼接完成
开放式基金预测get_image_size (MosaicImageUnrectified, Width1, Height1)
磨球
*输⼊投影矩阵和发⽣的投影区间(由最上到最下,既是两边图像的所有⾏都发⽣投影了所以⾏的区间是所有⾏[0,493],因为列⽅向没有投影,就设为0)
*得到投影后的坐标区间 :RowTrans, ColumnTrans
projective_trans_pixel (MosaicMatrices2DUnrectified[9:17], [0,493], [0,0], RowTrans, ColumnTrans)
*将多边形坐标⽣成XLD轮廓,显⽰出投影的边缘Contour,⽤于查看拼接边缘
gen_contour_polygon_xld (Contour, RowTrans, ColumnTrans)
set_line_style (WindowHandle, [1,5])
get_image_size (ImageGray, Width, Height)
*因为上述的拼接后可能存在连接处出现偏移(错位),proj_match_points_distortion_ransac算⼦再次匹配并计算出两边匹配后的径向畸变,输⼊从参数类似上⾯的proj_match_points_ransac算⼦,可调匹配分数,旋转。
*输出投影矩阵HomMat2D,径向畸变系数:Kappa,匹配均⽅差Error,两边匹配到的像素索引Points1, Points2。注意确保拼接的两图像尺⼨⼀致电暖手套
氯仿沸点proj_match_points_distortion_ransac (ImageGray, ImageGray1, Rows1, Columns1, Rows2, Columns2, ‘ncc’, 10, 0, 0, Height, Width, 0, 0.7, ‘gold_standard’, 1, 0, HomMat2D, Kappa, Error, Points1, Points2)
CamParDist := [0.0,Kappa,1.0,1.0,0.5 * (Width - 1),0.5 * (Height - 1),Width,Height]
*根据上述得到的径向畸变系数调整相机的内部参数,“fixed”表⽰只修改失真系数,其他内部摄像机参数保持不变,,期望的径向畸变是0。热压设备
change_radial_distortion_cam_par (‘fixed’, CamParDist, 0, CamPar)
*更改图像的径向变形,输⼊图像和要调整的区域,这⾥使⽤全图。输⼊改变图像径向失真的相机内部参数CamParDist和CamPar,将得到:修改径向变形后的图像:Image1Rect。
change_radial_distortion_image (ImageGray, ImageGray, Image1Rect, CamParDist, CamPar)
change_radial_distortion_image (ImageGray1, ImageGray1, Image2Rect, CamParDist, CamPar)
*重新拼接矫正畸变后的两张图像,同上拼接。
concat_obj (Image1Rect, Image2Rect, ImagesRect)纸制品加工
gen_projective_mosaic (ImagesRect, MosaicImage, 1, 1, 2, HomMat2D, ‘default’, ‘false’, MosaicMatrices2D)
get_image_size (MosaicImage, Width, Height)
dev_set_window_extents (-1, -1, Width, Height)
dev_clear_window ()
***完成

本文发布于:2024-09-21 23:29:59,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/259148.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:图像   拼接   径向   投影   匹配   边缘
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议