矫正畸变

  • 1. 什么是畸变
  • 2. 算法矫正镜头畸变的步骤
  • 3. Halcon代码

1. 什么是畸变

  • 畸变是指镜头的畸变,分为径向畸变和切向畸变。
  • 需要注意的是,我们在这里讨论的是对镜头径向畸变的矫正。

2. 算法矫正镜头畸变的步骤

  1. 先标定相机内外参:
    使用标定助手圆点标定板标定相机的内外参,保存不同角度的标定板图像大约12张。需要注意的是,这里的标定板图像是有畸变的。
  2. 求理想内参:
    Halcon给我们提供了一个算子change_radial_distortion_cam_par ,它可以帮助我们获得一个没有畸变的内参。
    根据指定的径向畸变确定新的摄像机参数。
 * 参数1:自适应 * 参数2:填入第1步中得到的内参 * 参数3:径向畸变写0* 参数4:返回径向畸变为0的内参change_radial_distortion_cam_par ('adaptive', CameraParameters, 0, CamParamOut)
  1. 用理想内参矫正图像
  • 先求一个Map映射
 * 参数1:返回Map映射* 参数2:有畸变的内参* 参数3:径向畸变为0的内参* 参数4:插值算法gen_radial_distortion_map (Map, CameraParameters, CamParamOut, 'bilinear')
  • 然后使用Map映射来矫正有径向畸变的图像(第1步中保存的12张标定板图像),把矫正过的图像保存下来。
map_image (Image, Map, ImageMapped)
  1. 利用矫正后的图像重新求一次内外参
    用第3步中保存的图像重新求内参和外参。
  2. 利用新的内外参进行测量

3. Halcon代码

进行以下工作还是需要的工具有,相机+镜头+实验架+圆点标定板
以下代码作为参考,理解为主。

*1求出内参
CameraParameters := ['area_scan_division',0.00423375,-23259.8,3.75308e-006,3.75e-006,591.731,469.686,1280,960]
*2求理想内参
change_radial_distortion_cam_par ('adaptive', CameraParameters, 0, CamParamOut)
*3求map映射
list_files ('D:/1', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1read_image (Image, ImageFiles[Index])gen_radial_distortion_map (Map, CameraParameters, CamParamOut, 'bilinear')*矫正map_image (Image, Map, ImageMapped)write_image (ImageMapped, 'tiff', 0, 'D:/2/'+Index)endfor
write_cam_par (CamParamOut, 'D:/new.cal')****用矫正后的图进行测量
read_cam_par ('D:/newrec.cal', CameraParamnew)
read_pose ('D:/newrec.dat', Posenew)CameraParameters := ['area_scan_division',0.00423375,-23259.8,3.75308e-006,3.75e-006,591.731,469.686,1280,960]read_pose ('D:/wai1.dat', Pose)
CameraParameters := ['area_scan_division',0.00423375,-23259.8,3.75308e-006,3.75e-006,591.731,469.686,1280,960]
CameraPose := [0.000690838,0.0267898,0.171678,0.13436,2.32878,155.631,0]open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0]  camera1', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)grab_image_async (Image, AcqHandle, -1)
*          gen_radial_distortion_map (Map, CameraParameters, CamParamOut, 'bilinear')
*          map_image (Image, Map, ImageMapped)rgb1_to_gray (Image, GrayImage)threshold (GrayImage, Regions, 13, 72)connection (Regions, ConnectedRegions)select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 0, 16324.1)select_shape (SelectedRegions, SelectedRegions1, 'area', 'and', 3152.96, 3848.25)fill_up (SelectedRegions1, RegionFillUp)boundary (RegionFillUp, RegionBorder, 'inner')gen_region_line (ROI_0, 406.148, 611.412, 416.918, 843.709)intersection (RegionBorder, ROI_0, RegionIntersection)get_region_points (RegionIntersection, Rows, Columns)***转成世界坐标image_points_to_world_plane (CameraParameters, CameraPose, Rows, Columns, 'm', X, Y)distance_pp (X[0], Y[0], X[1], Y[1], Distance)scale_image (GrayImage, ImageScaled, 3.35526, -44)dev_display (ImageScaled)dev_get_window (WindowHandle)set_display_font (WindowHandle, 26, 'mono', 'true', 'false')disp_line (WindowHandle, Rows[0], Columns[0],Rows[1],Columns[1])disp_message (WindowHandle, '距离'+Distance*1000+'mm', 'image', 481, 657, 'black', 'true')
endwhile
close_framegrabber (AcqHandle)

Halcon算法矫正镜头畸变相关推荐

  1. 【openMV】算法矫正镜头+视频格式对应的分辨率

    img.lens_corr(1.6) 还是建议上无畸变镜头,矫正效果不理想.  格式: sensor.QQCIF: 88x72 sensor.QCIF: 176x144 sensor.CIF: 352 ...

  2. 镜头畸变矫正、鱼眼镜头(算法)

    首先这是 径向畸变+切向畸变,都需要矫正(图片保密) 径向畸变就是沿着透镜半径方向分布的畸变,产生原因是光线在原理透镜中心的地方比靠近中心的地方更加弯曲,这种畸变在短焦镜头中表现更加明显,径向畸变主要 ...

  3. halcon相机标定及畸变矫正

    1 halcon相机标定和图像矫正     对于相机采集的图片,会由于相机本身和透镜的影响产生形变,通常需要对相机进行标定,获取相机的内参或内外参,然后矫正其畸变.相机畸变主要分为径向畸变和切向畸变, ...

  4. 大广角镜头 镜头畸变 矫正_如何用广角镜头对焦

    大广角镜头 镜头畸变 矫正 Focusing is easy when you're using an aperture of f/8 or narrower: most things in the ...

  5. 摄像机标定以及镜头畸变

    摄像机标定其本质就是计算摄像机的内参和外参.关于标定板上的世界坐标对应到图像像素坐标的过程这里就不做推导,网上太多博客都有详细推导过程.本篇主要说明摄像机标定原理里的几个要点: 1. 外参矩阵所含旋转 ...

  6. halcon算法库中各坐标系,位姿的解释及原理

    halcon算法库中各坐标系,位姿的解释及原理 前言 在学习halcon和光学原理的过程中,经常会听到像素坐标系,窗口坐标系,世界坐标系等等,很多时候会一头雾水,这时候一定要仔细甄别,了解其原理,才能 ...

  7. 机器视觉——镜头畸变以及部分参数

    文章目录 畸变 其他一些镜头上会出现的参数 镜头选型案例 畸变 镜头畸变与镜片组有直接关系 但是与同一镜头不同焦距状态下无太大关系(也就是例如一个35mm镜头,在小范围变焦情况下,该镜头的畸变不会变化 ...

  8. 倾斜摄影 镜头畸变校准_什么是风景摄影的最佳镜头?

    倾斜摄影 镜头畸变校准 Landscapes are one of the most popular subjects to shoot. Look out any window, and there ...

  9. ISP—镜头畸变校正

    目录 1.径向畸变 2. 切向畸变 3. 畸变模型 透镜由于制造精度以及组装工艺的偏差会引入畸变,导致原始图像的失真.镜头的畸变分为径向畸变和切向畸变两类. 1.径向畸变 顾名思义,径向畸变就是沿着透 ...

最新文章

  1. Kimera实时重建的语义SLAM系统
  2. [IoC容器Unity]第四回:使用范例
  3. 人间真实!如果我有这套装备,我也能码到凌晨...... | 每日趣闻
  4. Gartner:2015年SIEM(安全信息与事件管理)市场分析
  5. STM32 基础系列教程 0 - CubeMX 下载与安装
  6. PHP面试题:请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
  7. 虚拟局域网VLAN简介
  8. 机器学习中的范数规则化之(二)核范数与规则项参数选择以及RPCA
  9. iOS 6 的5个新特性创建杀手级应用
  10. ios ipad适配_安卓和iOS的APP在开发时有哪些区别?
  11. 苹果如何将图片转换为文字手机
  12. NFC技术 (二) -硬件设计
  13. 网络安全知识竞赛选择题(91-120题)
  14. 标准偏差:评价数据的离散程度
  15. 朗迪碳酸钙D3颗粒告诉你,为什么补钙要从娃娃抓起
  16. Holt-Winters
  17. Win10 USB转串口连接Linux主机调试
  18. 超级光棍节,你想好怎么过了吗?来聆听大师的演讲吧
  19. 世界哲学语录100句(句句珠玑,细细品味)
  20. StackOverflowError与OutOfMemoryError区别

热门文章

  1. 对做“互联网产品”的一些想法
  2. 关于在项目中使用开源项目的疑惑,恳请大家给点意见!
  3. Ubuntu下Linux系统文件恢复
  4. Hp Dell服务器硬件监控
  5. Zabbix 通过 API 监控 k8s
  6. 华为交换机实操系列(资源)
  7. nginx反向代理/负载均衡MySQL
  8. Windows 文件一直被占用,无法删除(对应解决方法)
  9. 解决kaggle邮箱验证不能confirm的问题
  10. C++异常 调用abort()