透视畸变的问题解决

公众号:机器视觉那些事儿
透视畸变的问题解决_第1张图片

不管你以后想做什么,都必须从现在开始!”

基于小孔成像原理的普通工业镜头,在成像过程中都会带来一定的透视畸变,即近大远小的现象,当相机与产品拍摄片不垂直时尤为明显,如下图所示。

透视畸变属于三维畸变的范畴,我们采用投影变换解决此问题,投影变换就是将三维图像转换为为图像的过程,其中应用最广泛的仿射变换(二维图像到二维图像)可以看做为投影变换的特殊形式。采用投影变换后图像会校正如下图所示。

附halcon完整代码以及截图

代码如下,可直接复制粘贴:

公众号:机器视觉那些事儿*

  1. 算法功能:透视畸变校正

  2. 算法思路:

(1)生成投影变换矩阵

(2)应用投影变换矩阵

*采集图像
read_image (Image_slanted, ‘datacode’)

*计算图片大小,并以原图尺寸显示
get_image_size (Image_slanted, Width, Height)
dev_close_window ()
dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
dev_display (Image_slanted)
stop ()

*为每个输入生成十字形状的XLD轮廓,6代表组成十字横线的长度,0.78代表角度
XCoordCorners := [130,225,290,63]
YCoordCorners := [101,96,289,269]
gen_cross_contour_xld (Cross, XCoordCorners, YCoordCorners, 6, 0.78)
dev_display (Image_slanted)
dev_display (Cross)
stop ()

投影畸变校正
*生成投影变换需要的变换矩阵,这里是齐次变换矩阵
hom_vector_to_proj_hom_mat2d (XCoordCorners, YCoordCorners, [1,1,1,1], [70,270,270,70], [100,100,300,300], [1,1,1,1], ‘normalized_dlt’, HomMat2D)
*待处理的图像上应用投影变换矩阵,并将结果输出到Image_rectified
projective_trans_image (Image_slanted, Image_rectified, HomMat2D, ‘bilinear’, ‘false’, ‘false’)
stop ()

*结果显示
dev_display (Image_slanted)
dev_display (Image_rectified)

原图及完整源代码见百度网盘:

链接:https://pan.baidu.com/s/1IIvSsmnT_QT78G0ypgYI8w 密码:pn1f

你可能感兴趣的:(halcon实例)