透视畸变的问题解决

公众号:机器视觉那些事儿
这里写图片描述

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

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

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

附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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值