首页 > 其他分享 >Halcon缺陷检测之光度立体法

Halcon缺陷检测之光度立体法

时间:2024-10-24 12:47:59浏览次数:9  
标签:gradient dev Halcon 立体 field Albedo 图像 display 光度

   通过在案例中应用摸索算子的特性,对光度立体法有了进一步认识。基于此重新理解文档,希望能够帮助有疑惑的同志,同时也期望看到博客的同志如果有更深的理解以及应用技巧,共享与大家共同交流进步。

photometric_stereo


Images (input_object) :输入图像

输入图像(一个至少包含3张图像(每张图像光照角度不同)的图像数组)


HeightField (output_object) :重建的高度

根据多个图像重构的高度信息图


Gradient (output_object) :表面的渐变场

根据多个图像重构的梯度信息图,表面的渐变场。


Albedo (output_object) :表面的反照率

表面的反照率。  根据多个图像重构的反射率信息图 Albedo 图像描述的是物体的反射率,其值介于0(黑色)-1(白色)之间。因此,Albedo反应了物体表面特性。比如对于印刷表面表面,Albedo反应的是表面明暗程度的特性。HeightField 图像中每个像素值以某种关系与其高度一一对应。默认情况下,ResultType设置成“all”。假如在应用中仅仅需要部分结果,可以通过数组的形式在‘gradient’,‘albedo’, and ‘height_field’中选择设置ResultType参数,例如ResultType := [‘gradient’,‘albedo’]。对于特定的表面检测应用,如果只需要‘gradient’, ‘albedo’,那么将ResultType设置成‘gradient’, 'albedo’不进行三维重构(‘height_field’),处理速度将会有效提升。

Slants (input_control) :相机与被测物方向之间的角度

对于每个图像,照明方向必须指定为角度 在参数倾斜,它们描述了 照明相对于场景的方向。要了解 参数的含义倾斜,请记住 假设照明源产生平行光线,相机 具有远心镜头,并且摄像机与场景正交放置,以便 重建:这angle 是光学 相机的轴和照明方向。

典型值范围:0.0 ≤ 倾斜 ≤ 180.0(以度为单位)
   


Tilts (input_control) :光源方向在与被测物平面角度

倾斜角度是在对象平面或任何平面内测量的 即与它平行,例如,图像平面。特别是,它 描述从中心指向的方向之间的角度 图像右侧和投影的光线方向 进入飞机。也就是说,当查看图像(或 对应的场景),倾斜角度为 0 表示光线来自 右侧,倾斜角度为 90 表示光线来自 top,倾斜角度为 180 表示光线来自左侧 等。值范围:0.0 ≤ 倾斜 ≤ 360.0(以度为单位)


ResultType (input_control) :请求结果的类型。

值列表:[], 'albedo', 'all', 'gradient', 'height_field', 'normalized_gradient'


ReconstructionMethod (input_control) :重建方法的类型。

默认值: 'poisson'值列表:'fft_cyclic', 'poisson', 'rft_cyclic'
GenParamName (input_control) :
GenParamValue (input_control) :

光度立体至少需要三个图像 不同的照明方向。然而,三维几何 的对象通常会导致阴影投射。在阴影区域中, 有效可用的照明方向数量减少,这 导致歧义。尽管如此,为了获得稳健的结果,redundancy 是 需要。因此,通常三个以上的光源具有不同的 应使用说明。但请注意,越来越多的照明 directions 还会导致需要处理的图像数量增加,并且 因此处理时间更长。在大多数应用程序中,许多 四到六个光源是合理的。根据经验,倾斜角度 应在 30° 和 60° 之间进行选择。倾斜角度通常应为 均匀分布在待测物体周围。请注意, 必须选择照明方向,使其不位于 同一平面(即照明方向必须独立),否则 计算失败并引发异常。

 使用梯度场作为算子derivate_vector_field的输入来计算表面的高斯曲率。在曲率图像中通常很容易检测到缺陷。

案例1  photometric_stereo+derivate_vector_field


    *  显示具有不同照明度的输入图像

    read_image (Images, 'photometric_stereo/flooring_' + Index + '_0' + [1:4])
    for I := 1 to 4 by 1
        Message := 'Acquire image ' + I + ' of 4'
        select_obj (Images, ObjectSelected, I)
        dev_display (ObjectSelected)
        disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
        wait_seconds (0.5)
    endfor
    

* 应用光度立体来确定反照率和表面渐变。

    Slants := [39.4,40.5,39.5,38.4]
    Tilts := [-6.0,83.7,172.9,-98.2]
    ResultType := ['gradient','albedo']


    photometric_stereo (Images, HeightField, Gradient, Albedo, Slants, Tilts, ResultType, 'poisson', [], [])
    dev_display (Albedo)

  dev_display (Gradient)

    derivate_vector_field (Gradient, MeanCurvature, 1.0, 'mean_curvature')
    

    * 检测缺陷

    * 分割曲率图像中的绘图板区域
    threshold (MeanCurvature, Region, 0.02, 1000)
    connection (Region, Defects)
    area_center (Defects, Area, Row, Column)
    gen_circle (Circle, Row, Column, sqrt(Area) + 10)
    * 在曲率图像中显示缺陷
    dev_set_draw ('margin')
    dev_set_color ('red')
    dev_set_line_width (2)
    dev_display (MeanCurvature)
    dev_display (Circle)
   
   

 * 在反照率图像中显示缺陷
    dev_set_draw ('margin')
    dev_set_color ('red')
    dev_display (Albedo)
    dev_display (Circle)

 uncalibrated_photometric_stereo

 应用未校准的光度学立体以检索每个像素的局部方向。


Images(输入)

具有不同照明度的输入图像。


NormalField(输出)

表面的法线场。


Gradient(输出)

曲面的梯度场 


Albedo(输出)

表面的反照率。


ResultType(输出)结果类型。

默认值: 'all' 值列表:[], 'albedo', '全部'、 'gradient'、'normal_field'、'normalized_gradient'

案例2   uncalibrated_photometric_stereo+derivate_vector_field

  *  显示具有不同照明度的输入图像

    read_image (Images, 'photometric_stereo/flooring_' + Index + '_0' + [1:4])
    for I := 1 to 4 by 1
        Message := 'Acquire image ' + I + ' of 4'
        select_obj (Images, ObjectSelected, I)
        dev_display (ObjectSelected)
        disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
        wait_seconds (0.5)
    endfor
    

uncalibrated_photometric_stereo (Images, NormalField, Gradient, Albedo, 'all')
dev_display (NormalField)

dev_display (Gradient)

 dev_display (Albedo)

derivate_vector_field (Gradient, MeanCurvature, 1.1, 'mean_curvature')

    mean_image (MeanCurvature, ImageMean, 9, 9)
    threshold (ImageMean, Region, -0.1, -0.024)
    connection (Region, Defects)
    area_center (Defects, Area, Row, Column)
    gen_circle (Circle, Row, Column, sqrt(Area) + 10)
    dev_set_draw ('margin')
    dev_set_color ('red')
    dev_set_line_width (2)
    dev_display (MeanCurvature)
    dev_display (Circle)

标签:gradient,dev,Halcon,立体,field,Albedo,图像,display,光度
From: https://blog.csdn.net/2202_75557553/article/details/143173715

相关文章

  • 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字符'-'*......
  • 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]/......
  • Halcon Tuple数组的增删查改
    read_image(Image33,'E:/Halcon数据/资源图片/33.png')dev_get_window(WindowHandle)dev_set_draw('margin')get_image_size(Image33,Width,Height)query_font(WindowHandle,Font)FontWithSize:=Font[0]+'-30'set_font(WindowHandl......
  • DiLiGenT光度立体数据集
    简介”DiLiGenT“光度立体数据集,全称为calibratedDirectionalLightings,objectsofGeneralreflectance,and‘groundTruth’shapes(normals),即使用标定过的定向光源,对一些具有常见反射率特性的物体进行光度立体拍摄,并获取到精确的物体表面法向信息作为真值的这样数据......
  • Halcom与C#窗口应用联合问题一:DLL“halcon”:找不到指定的模块。
     问题如下:原因是:        如果你在解决方案资源管理器中的引用下添加了halcondotnet.dll文件,有可能在工具箱下没有自动添加。在工具箱项里面没有HWindowControl工具。解决方法如下:                1.在工具箱中右击任何一个工具,然后点击......