当前位置: 首页 > news >正文

免费搭建个人网站的3种实用方法做网站好的网站建设公司

免费搭建个人网站的3种实用方法,做网站好的网站建设公司,支持wordpress,学校资源网站 建设一、介绍本文主要介绍基于halcon的双目视觉的 相机标定 及 三维重建 。二、相机标定系统搭建如下: 标定程序参考了halcon中的双目标定示例binocular_calibration.hdev,标定步骤为:  1)程序的初始化设置;  2)创建标定数据模型…

一、介绍
本文主要介绍基于halcon的双目视觉的 相机标定 及 三维重建 。


二、相机标定
系统搭建如下:87037360c7a6f95b8f6e316ae26db912.png
 标定程序参考了halcon中的双目标定示例binocular_calibration.hdev,标定步骤为:
  1)程序的初始化设置;
  2)创建标定数据模型(也可以不用标定数据模型,下面的代码就没有使用),为相机内参设置初始值;
  3)描述标定对象;
  4)循环读取多幅图像,提取标定板上的标记点及标定板位姿。
  5)执行标定;
  *6)进行图像对校正。
 代码如下:

** 该程序演示了如何使用 find_caltab, find_marks_and_pose和binocular_calibration 算子进行双目立体视觉系统的标定* 共50幅(左右两相机分别25幅)。标定完成后,利用对极几何对图像对进行校正。** ---------------------------------------------------------* 设置图片路径ImgPath := 'C:/BinocualrCalibration/calibrationImgs/'* 读取第一幅图像,并获取图像尺寸Index := 1read_image (ImageL, ImgPath + 'L' + Index$'02d')read_image (ImageR, ImgPath + 'R' + Index$'02d')* 打开合适尺寸大小的窗口dev_close_window ()dev_update_off ()get_image_size (ImageL, WidthL, HeightL)dev_open_window (0, 0, 0.4*WidthL,0.4* HeightL, 'black', WindowHandle1)dev_set_draw ('margin')dev_set_color ('green')set_display_font (WindowHandle1, 14, 'mono', 'true', 'false')get_image_size (ImageR, WidthR, HeightR)dev_open_window (0, 0.4*WidthL + 12, 0.4*WidthL, 0.4*HeightL, 'black', WindowHandle2)dev_set_draw ('margin')dev_set_color ('green')* 读取标定板模型.CaltabFile := 'caltab_30mm.descr'caltab_points (CaltabFile, X, Y, Z)* 为相机内参设置初始值StartCamParL := [0.016,0,3.75e-6,3.75e-6,WidthL / 2.0,HeightL / 2.0,WidthL,HeightL]StartCamParR := StartCamParL* find_caltab 和 find_marks_and_pose参数设置SizeGauss := 3MarkThresh := 120MinDiamMarks := 5StartThresh := 128DeltaThresh := 10MinThresh := 18Alpha := 0.9MinContLength := 15MaxDiamMarks := 100* 创建数组,用于存放图像坐标系下的标定点坐标和标定板的初始位姿RowsL := []ColsL := []StartPosesL := []RowsR := []ColsR := []StartPosesR := []*循环读取标定图像for Index := 1 to 25 by 1    * 读取标定图像    read_image (ImageL, ImgPath + 'L' + Index$'02d')    read_image (ImageR, ImgPath + 'R' + Index$'02d')    * 寻找标定板    find_caltab (ImageL, CaltabL, CaltabFile, SizeGauss, MarkThresh, MinDiamMarks)    find_caltab (ImageR, CaltabR, CaltabFile, SizeGauss, MarkThresh, MinDiamMarks)    * 显示标定板区域    dev_set_window (WindowHandle1)    dev_display (ImageL)    dev_display (CaltabL)    dev_set_window (WindowHandle2)    dev_display (ImageR)    dev_display (CaltabR)    * (左相机)提取标记点和标定板位姿,并显示位姿坐标    find_marks_and_pose (ImageL, CaltabL, CaltabFile, StartCamParL, StartThresh, DeltaThresh, MinThresh, Alpha, MinContLength, MaxDiamMarks, RCoordL, CCoordL, StartPoseL)    disp_caltab (WindowHandle1, CaltabFile, StartCamParL, StartPoseL, 1)    *(右相机)提取标记点和标定板位姿,并显示位姿坐标    find_marks_and_pose (ImageR, CaltabR, CaltabFile, StartCamParR, StartThresh, DeltaThresh, MinThresh, Alpha, MinContLength, MaxDiamMarks, RCoordR, CCoordR, StartPoseR)    disp_caltab (WindowHandle2, CaltabFile, StartCamParR, StartPoseR, 1)    * 计算标记点在图像坐标系下的位姿,并估算所有图像对间的相对位姿    RowsL := [RowsL,RCoordL]    ColsL := [ColsL,CCoordL]    StartPosesL := [StartPosesL,StartPoseL]    RowsR := [RowsR,RCoordR]    ColsR := [ColsR,CCoordR]    StartPosesR := [StartPosesR,StartPoseR]endfor** 执行标定*binocular_calibration (X, Y, Z, RowsL, ColsL, RowsR, ColsR, StartCamParL, StartCamParR, StartPosesL, StartPosesR, 'all', CamParamL, CamParamR, NFinalPoseL, NFinalPoseR, cLPcR, Errors)* 可以将标定结果存入文件中:* write_cam_par (CamParamL, 'cam_left-125.dat')* write_cam_par (CamParamR, 'cam_right-125.dat')* write_pose (cLPcR, 'pos_right2left.dat')* 生成校正的映射图gen_binocular_rectification_map (MapL, MapR, CamParamL, CamParamR, cLPcR, 1, 'geometric', 'bilinear', RectCamParL, RectCamParR, CamPoseRectL, CamPoseRectR, RectLPosRectR)* 读取已标定系统的一个图像对read_image (ImageL, ImgPath + 'L01')read_image (ImageR, ImgPath + 'R01')* 校正图像对并显示map_image (ImageL, MapL, ImageRectifiedL)map_image (ImageR, MapR, ImageRectifiedR)* 检查校正图像的对极约束并显示结果(包含一些对应的极线)check_epipolar_constraint (ImageRectifiedL, ImageRectifiedR, RectCamParL, RectCamParR, WindowHandle1, WindowHandle2, CaltabFile, EpipolarError)

f38ae4efd003ba07e7ac120df5f063b6.png

f5c8078b3befa263dd022a7491e530c4.png三、三维重建
用采集的一对图像对来说明三维立体重建的过程。4e707071363c9abefef44376c4651abc.png
   三维重建步骤如下:
     1)读取图像对
     2)输入相机参数
     3)校正图像对
     4)计算视差
     5)对视差图进行处理
     6)将视差图转换为X、Y、Z分量图
     7)3D点的可视化
  代码如下:

* 该程序演示了如何使用'disparity_image_to_xyz'算子。* 首先进行图像对的校正,然后计算所有视差图中所有点的 x,y,z 坐标,最后将将3D点可视化。** 初始化设置dev_close_window ()dev_update_off ()dev_set_preferences ('graphics_window_context_menu', 'false')dev_set_preferences ('suppress_handled_exceptions_dlg', 'true')** 定义要选择的左右图像对ImagePath := 'C:/BinocualrCalibration/TestObject/'Image1 := ImagePath + '/LT08'Image2 := ImagePath + '/RT08'** 定义相机参数CamParamL := [0.0162229,-21.9492,3.7503e-006,3.75e-006,622.487,523.778,1280,960]CamParamR := [0.0160868,-161.835,3.7492e-006,3.75e-006,615.622,514.203,1280,960]RelPose := [0.13018,-0.000356889,0.0248832,0.434254,343.51,359.836,0]** 生成视差图* ******************************************** 生成校正映射图像对gen_binocular_rectification_map (MapL, MapR, CamParamL, CamParamR, RelPose, 1, 'geometric', 'bilinear', RectCamParL, RectCamParR, CamPoseRectL, CamPoseRectR, RectLPosRectR)** 读取原图像对并进行校正,得到校正后的图像对read_image (ImageL, Image1)read_image (ImageR, Image2)map_image (ImageL, MapL, ImageRectifiedL)map_image (ImageR, MapR, ImageRectifiedR)** 显示校正后的左侧图像get_image_size (ImageRectifiedL, WidthL, HeightL)dev_open_window (0, 0, 0.4*WidthL,0.4* HeightL, 'black', WindowHandle1)set_display_font (WindowHandle1, 11, 'mono', 'true', 'false')dev_display (ImageRectifiedL)disp_message (WindowHandle1, 'Left rectified image', 'window', 10, 10, 'black', 'true')** 显示校正后的右侧图像dev_open_window (0, 0.4*WidthL + 10, 0.4*WidthL, 0.4*HeightL, 'black', WindowHandle2)set_display_font (WindowHandle2, 11, 'mono', 'true', 'false')dev_display (ImageRectifiedL)disp_message (WindowHandle2, 'Right rectified image', 'window', 10, 10, 'black', 'true')disp_continue_message (WindowHandle2, 'black', 'true')stop ()** 计算视差binocular_disparity (ImageRectifiedL, ImageRectifiedR, DisparityImage, Score, 'ncc', 33, 33, 0, -36, 20, 1, 0.3, 'left_right_check', 'interpolation')** 填充视差图中的缺陷get_domain (DisparityImage, RegionInpainting)complement (RegionInpainting, RegionInpainting)full_domain (DisparityImage, DisparityImage)harmonic_interpolation (DisparityImage, RegionInpainting, DisparityImage, 0.001)** 显示视差图dev_set_window (WindowHandle1)dev_set_lut ('temperature')dev_display (DisparityImage)disp_message (WindowHandle1, 'Disparity image', 'window', 10, 10, 'black', 'true')** 计算点的3D坐标* ********************************************* 将视差图转换成X,Y,Z分量图,分量图中的灰度值表示各分量的坐标disparity_image_to_xyz (DisparityImage, X, Y, Z, RectCamParL, RectCamParR, RectLPosRectR)** 3D点的可视化* ********************************************* 将点云的中心移至原点附近,并进行z方向上的尺度缩放min_max_gray (X, X, 5, MinX, MaxX, RangeX)min_max_gray (Y, Y, 5, MinY, MaxY, RangeY)min_max_gray (Z, Z, 5, MinZ, MaxZ, RangeZ)scale_image (X, X, 1.0, -MinX - 0.5 * RangeX)scale_image (Y, Y, 1.0, -MinY - 0.5 * RangeY)scale_image (Z, Z, 4.0, -4.0 * MinZ - 2.0 * RangeZ)** 显示校正后的右图像dev_set_window (WindowHandle2)dev_display (ImageRectifiedR)disp_message (WindowHandle2, 'Computed 3D points in 3D space', 'window', 10, 10, 'black', 'true')disp_message (WindowHandle2, 'Left button:  rotate', 'window', 205, 10, 'white', 'false')disp_message (WindowHandle2, 'Right button: exit', 'window', 220, 10, 'white', 'false')** 对3D点云循环旋转操作的设置RelQuaternion := [0,0,0,1]NumAddIn := 0Cx := WidthL * 0.5Cy := HeightL * 0.5** 旋转循环visualize_3D_space (DisparityImage, X, Y, Z, ImageRectifiedL, WindowHandle2, Cx, Cy, HeightL, WidthL, RelQuaternion, NumAddIn, MinX, MinY, MinZ, RangeX, RangeY, RangeZ, RectCamParL)

得到的视差图如图3所示,可以看到,目标物体的孔径周围有基础缺陷(白色部分),这是由于在输入的图像对中,目标物的孔径周围反光,显示为白色,而在计算视差图时,应尽量避免这种整块出现的单一颜色区域。  e539fe14a79529ac46a1c6af65d78fa0.pngcc39a842b97e25052ac2c3e8d760d15e.png
此外,还可以通过创建3D对象模型的方式将结果可视化。用到的算子为:xyz_to_object_model_3d(),create_pose(),visualize_object_model_3d()。       fd5470f7d736ec1f5bc53125bca2d248.png
注:3D重建的显示效果和相机标定的精度、拍摄环境、视差图的算法等因素相关,其中计算视差图用到的算子为binocular_disparity( ),包含的参数较多,需要选择合适的参数才得到较好的视差图。
原文链接:https://blog.csdn.net/Ketal_N/article/details/83933617

4280f5de719387c70f05263a78a50754.gif End 4280f5de719387c70f05263a78a50754.gif

声明:部分内容来源于网络,仅供读者学习、交流之目的。文章版权归原作者所有。如有不妥,请联系删除。

http://www.lbrq.cn/news/2407609.html

相关文章:

  • 如何用七牛云做视频网站怎么做市场推广
  • 单位网站建设存在问题情况汇报如何搜索关键词
  • 常平哪里有招计算机网站开发的网站首页制作网站
  • 山东省城乡建设厅网站互联网运营推广公司
  • 做网站怎么招广告网络软文营销案例
  • 网站关键词几个好公司seo是什么意思
  • 5G网站建设要多少个广告网址
  • PC端网站开发以及设计费用搜索引擎推广
  • 阿里做外贸的网站关键词优化seo费用
  • 做网站赌博代理没有盈利违法吗可以投放广告的网站
  • 自己建网站免费今天的新闻
  • 苏州工业园区规划建设委员会网站友情链接模板
  • 最佳建站模板关键字查找
  • sns社交网站 建设网上有免费的网站吗
  • 中国做网站推广哪家好网络营销的常用工具
  • 沈阳公司网站制作seo百科
  • 网站互动推广google seo实战教程
  • 全球新冠最新数据报告seo外链推广员
  • 注入漏洞网站源码百度2020新版下载
  • 在家做网站或ps挣钱接活整合营销传播的概念
  • wordpress雪人主题宁波企业seo推广
  • 网站总体规划设计说明重庆seo代理计费
  • 石家庄最新大事百度seo官方网站
  • 云虚拟主机搭建网站谷歌搜索引擎首页
  • 代帮企业做网站上海全网营销推广
  • 做网站什么空间比较好深圳整站seo
  • 凯里网站制作域名排名查询
  • 网页设计案例教程杨松答案app优化方案
  • 做网站一般做几个尺寸点击进入官方网站
  • 深圳网站建设引流获客工具
  • 深度学习图像分类数据集—八种贝类海鲜食物分类
  • 050_Set接口(HashSet / TreeSet / LinkedHashSet)
  • imx6ull-系统移植篇11——U-Boot 移植(下)
  • PAT 1049 Counting Ones
  • 黑马点评系列问题之p70postman报错“服务器异常”
  • 【取消分仓-分布式锁】