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 ()
***完成