首页 > 其他分享 >Halcon双目立体视觉

Halcon双目立体视觉

时间:2024-10-24 12:50:22浏览次数:10  
标签:set 双目 image dev Halcon 立体 图像 视觉

             

        双目立体视觉机器视觉的一种重要形式,基于视差原理并由多幅图像获取物体三维几何信息,一般由双摄像机从不同角度同时获得被测物的两幅数字图像,或由单摄像机在不同时刻从不同角度获得被测物的两幅数字图像,并基于视差原理恢复物体的三维几何信息,重建物体三维轮廓及位置。双目立体视觉在机器视觉领域有着广泛的应用前景。

       双目立体视觉融合两只眼睛获得的图像并观察它们之间的差别,使我们可以获得明显的深度感,建立特征间的对应关系,将同一空间物理点在不同图像中的映像点对应起来,这个差别,我们称作视差(Disparity)图像。

        双目立体视觉测量方法具有效率高、精度合适、系统结构简单、成本低等优点,非常适合于制造现场的在线、非接触产品检测和质量控制。对运动物体(包括动物和人体形体)测量中,由于图像获取是在瞬间完成的,因此立体视觉方法是一种更有效的测量方法。双目立体视觉系统是计算机视觉的关键技术之一,获取空间三维场景的距离信息也是计算机视觉研究中最基础的内容

        双目立体视觉测距算法是找相机拍摄的图片中任意一个像素点,在另外一个相机拍摄的图像中找到和它对应的像素点,这个过程需要特征提取,特征匹配等一系列复杂的算法。

        双目视觉的实现可分为以下步骤:图像获取、摄像机标定、特征提取、图像匹配和三维重建

案例分析:

采用devision畸变模型并设置相机模型的初始参数

gen_cam_par_area_scan_division (0.0131207, -622.291, 7.40051e-006, 7.4e-006, 313.212, 257.118, 640, 480, CamParamL)
gen_cam_par_area_scan_division (0.0131949, -622.579, 7.41561e-006, 7.4e-006, 319.161, 229.867, 640, 480, CamParamR)

创建3D位姿,即右相机相当于左相机的位姿

create_pose (0.153128, -0.00389049, 0.0453321, 0.640628, 319.764, 0.141582, 'Rp+T', 'gba', 'point', RelPose)

生成校正立体图像对需要的映射图

gen_binocular_rectification_map (MapL, MapR, CamParamL, CamParamR, RelPose, 1, 'viewing_direction', 'bilinear', RectCamParL, RectCamParR, CamPoseRectL, CamPoseRectR, RectLPosRectR)

    * 激活图形窗口1
    dev_set_window (WindowHandle1)
    dev_clear_window ()
    dev_set_part (0, 0, HeightL - 1, WidthL - 1)
    *读取左相机图像
    read_image (ImageL, ImagePath + ImageFiles[I])
    *增强对比度
    emphasize (ImageL, ImageL, 7, 7, 1)
    *校正图像
    map_image (ImageL, MapL, ImageRectifiedL)

    * 激活图形窗口2
    dev_set_window (WindowHandle2)
    dev_clear_window ()
    dev_set_part (0, 0, HeightR - 1, WidthR - 1)
    *读取右相机图像
    read_image (ImageR, ImagePath + ImageFiles[I + 1])
    *增强对比度
    emphasize (ImageR, ImageR, 7, 7, 1)
    *校正图像
    map_image (ImageR, MapR, ImageRectifiedR)

    * 校正前显示两个图像
    dev_set_window (WindowHandle1)
    dev_display (ImageL)

    dev_set_window (WindowHandle2)
    dev_display (ImageR)

 分别定义 binocular_disparity 和 binocular_distance 的参数值。

    MaskWidth := 21
    MaskHeight := 21
    TextureThresh := 5
    MinDisparity := 35
    MaxDisparity := 75
    NumLevels := 1
    ScoreThresh := 0.1
  
    *确定视差图和匹配分值图
    binocular_disparity (ImageRectifiedL, ImageRectifiedR, DisparityImage, ScoreImageDisparity, 'ncc', MaskWidth, MaskHeight, TextureThresh, MinDisparity, MaxDisparity, NumLevels, ScoreThresh, 'left_right_check', 'interpolation')
    *确定视差图和匹配分值图
    binocular_disparity (ImageRectifiedL, ImageRectifiedR, DisparityImage, ScoreImageDisparity, 'ncc', MaskWidth, MaskHeight, TextureThresh, MinDisparity, MaxDisparity, NumLevels, ScoreThresh, 'left_right_check', 'interpolation')

拟合平面区域

        dev_set_color ('green')
        gen_circle (Circle, [65,145,455], [50,590,210], [15,15,15])
        union1 (Circle, RegionDefiningReferencePlane)
        dev_set_color ('red')

消除相机坐标系对物体表面倾斜的影响

    * 缩小给定区域,该区域将参考平面定义为距离图像的域
    get_domain (DistanceImage, Domain)
    intersection (RegionDefiningReferencePlane, Domain, RegionDefiningReferencePlane)
    * 确定参考平面的参数
    moments_gray_plane (RegionDefiningReferencePlane, DistanceImage, MRow, MCol, Alpha, Beta, Mean)
    * 生成参考平面的距离图像
    get_image_pointer1 (DistanceImage, Pointer, Type, Width, Height)
    area_center (RegionDefiningReferencePlane, Area, Row, Column)
    gen_image_surface_first_order (ReferencePlaneDistance, Type, Alpha, Beta, Mean, Row, Column, Width, Height)
    * 减去参考平面的距离图像从对象的 distance 图像
    sub_image (DistanceImage, ReferencePlaneDistance, DistanceImageWithoutTilt, 1, 0)
    * 确定减少距离值的比例因子
    CosGamma := 1.0 / sqrt(Alpha * Alpha + Beta * Beta + 1)
    * 减少距离值
    scale_image (DistanceImageWithoutTilt, DistanceImageCorrected, CosGamma, 0)

 获得最小最大高度
    MinHeight := -0.0005
    MaxHeight := 0.05

将深度图转为参考平面以上的高度 ,如果参考平面是对象的地平面,则此过程可能很有用。然后,反转的校正距离值对应于地平面以上的高度。

    invert_image (DistanceImageCorrected, HeightAboveReferencePlane)
    * 将高度图像的域缩小到给定的高度范围。
    threshold (HeightAboveReferencePlane, Region, MinHeight, MaxHeight)
    reduce_domain (HeightAboveReferencePlane, Region, HeightAboveReferencePlaneReduced)

dev_display (ImageRectifiedL)
dev_set_color ('blue')
threshold (HeightAboveReferencePlaneReduced, Range1,0.0004, 0.0015)
dev_display (Range1)
dev_set_color ('green')
threshold (HeightAboveReferencePlaneReduced, Range2, 0.0015, 0.0025)
dev_display (Range2)
dev_set_color ('red')
threshold (HeightAboveReferencePlaneReduced, Range3, 0.0025, 0.004)
dev_display (Range3)

标签:set,双目,image,dev,Halcon,立体,图像,视觉
From: https://blog.csdn.net/2202_75557553/article/details/143198745

相关文章

  • Halcon图像拼接
    read_image(Image13,'E:/vs//13.png')get_image_size(Image13,Width,Height)gen_rectangle1(Rectangle,0,0,Height,Width/2)reduce_domain(Image13,Rectangle,ImageReduced)crop_domain(ImageReduced,Image1)gen_rectangle1(Rectangle,0,W......
  • Halcon缺陷检测之光度立体法
      通过在案例中应用摸索算子的特性,对光度立体法有了进一步认识。基于此重新理解文档,希望能够帮助有疑惑的同志,同时也期望看到博客的同志如果有更深的理解以及应用技巧,共享与大家共同交流进步。photometric_stereoImages(input_object):输入图像输入图像(一个至少包含3......
  • Halcon 创建变异模型
    *create_variation_model(::Width,Height,Type,Mode:ModelID)说明:创建一个ID为ModelID,宽为Width,高为Height,类型为Type的VariationModel,参数Mode决定了创建标准图像和相应的variation图像的方法。'standard'表示标准的训练方法,标准图像的位置是各训练图像位置的平均......
  • 3D立体(案例)
     一定要想明白是怎么绕XYZ轴旋转,脑子里要有画面,要得到下面图片效果,要知道每一个面是垂直于哪个轴,怎么倾斜移动,旋转,有一个清晰的思路才能做出来。自己先做一下一点一点给出框架,先给出6个盒子再去摆放位置。效果图: 整体代码:<!DOCTYPEhtml><htmllang="en"><head>......
  • 【Stable Diffusion案例教程】如何制作3D立体字场景效果
    StableDiffusion是2022年发布的深度学习文本到图像生成模型,它主要用于根据文本的描述产生详细图像,以及在提示词指导下进行图生图的绘图模式。基于开源的优势,SD有着庞大的用户社群,其中又包含着大量的优秀创作者和优质模型。这份完整版的AI绘画全套学习资料已经上传CSDN,......
  • Halcon九点标定与旋转标定
    9点标定是通过9个点计算出相机坐标系到机械手坐标系的一个仿射变换,(实际上空间中的二维平面的仿射变换最低只需要3个点就可以,但是为了保证矩阵的准确性,数据点一般采用9-12点)。在实际应用过程中,需要获取像素下特征点的坐标和对应机械手的坐标。联立方程组求解即可得到对应仿射变......
  • HALCON数据结构之矩阵
    1.1矩阵的创建、设置和访问*1、矩阵的创建*创建单位矩阵create_matrix(3,3,'identity',MatrixID1)*创建一个全是常数的矩阵create_matrix(3,3,7,MatrixID2)*为主对角线上的所有元素都被设置为参数Value的值create_matrix(3,3,[3,7,1],MatrixID3)*为矩......
  • HALCON数据结构之字符串
    1.1String字符串的基本操作*将数字转换为字符串或修改字符串*tuple_string(T,Format,String)//HALCON语句*String:=T$Format//赋值操作*Formatstring由以下四个部分组成:*<flags><fieldwidth>.<precision><conversion字符>*1.flags标志*1.1字符'-'*......
  • 地平线双目深度估计参考算法 StereoNetPlus优化 思路解读
    【参考算法】地平线双目深度估计参考算法StereoNetPlus-v1.2.11.引言本文将介绍地平线基于公版的双目深度估计算法StereoNet做的优化设计。首先介绍了双目深度估计的原理以及双目点云和Lidar点云的对比,然后由公版StereoNet的介绍切入到地平线参考算法的针对性优化,最后对......
  • HALCON数据结构之数组
    1.1Tuple数组的基本操作*1、Tuple数组元素的创建*1.1、创建一个空数组assign([],empty_tuple)//采用赋值操作empty_tuple:=[]//采用赋值操作*1.2、创建一个整型数组assign([1,2,3,4,5,6,7,8,9,10],tupleInt1)//采用赋值操作tupleInt1:=[1,0,3,4,5,6,7,8,9]/......