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

Halcon光度立体法

1、光度立体法,可用于将对象的三维形状与其二维纹理(例如打印图像)分离。需要用不同方向而且已知照明方向的多个光源,拍摄同一物体的至少三张图像。请注意,所有图像的相机视角必须相同。
物体的三维形状主要被计算为三维表面的局部梯度。这些梯度可以进一步积分以获得高度场,即像素值对应于相对高度的图像。二维纹理称为反照率,对应于表面的局部光吸收和反射特性,不包括任何阴影效果。
2、光度立体的典型应用
光度立体的典型应用是检测表面中的高度不一致的特征,例如凹坑,凸点等缺陷,或者从所使用的图像中排除光方向的影响,例如用于非平面字符的印刷检查。请注意,光度立体不适合重建绝对高度,也就是说,它不能替代典型的3D重建算法,如焦点深度或光片。
3、光度立体的局限性
PhotometricStereo基于Woodham的算法,因此一方面假设相机执行正视投影。也就是说,你必须使用远心镜头或长焦距镜头。另一方面,它假设每个光源都发出平行且均匀的光束。也就是说,您必须使用强度均匀的远心照明源,或者作为替代方案,使用远点光源。此外,物体必须具有朗伯反射特性,即它必须以漫反射的方式反射入射光。具有镜面反射特性(即镜像或光滑表面)的对象或对象区域无法正确处理,从而导致错误的结果。
4、场景设置
具有远心镜头的相机必须垂直与产品放置,即垂直于应重建的场景。在图像采集过程中,相机相对于场景的方向不得改变。相比之下,对于至少三个灰度值图像,照明相对于相机的方向必须改变。
指定照明方向
对于每张图像,照明方向必须指定为参数“倾斜”和“倾斜”中的角度,这些参数描述了照明相对于场景的方向。要理解参数“倾斜”和“倾斜”的含义,请记住,假设照明源产生平行光线,相机有一个远心透镜,相机与场景正交放置以重建:
4.1下图是光源与相机竖直方向夹角Slants
在这里插入图片描述
4.2下图是光源之间各自夹角Tilts
在这里插入图片描述
5.算子详解
5.1 photometric_stereo (根据光度立体技术重建曲面)
photometric_stereo (Images ,HeightField, Gradient, Albedo : Slant, Tilt, ResultType, ReconstructionMethod, GenParamName, GenParamValue )
参数列表:
Images:包含多个输入图像的图像元组。这些图像对应于不同光照条件下采集的物体表面图像。
HeightField:输出的高度图像。将包含根据输入图像计算得到的物体表面的高度信息。
Gradient:输出的梯度图像。将包含根据输入图像计算得到的物体表面的梯度信息。
Albedo:输出的反照率图像。将包含根据输入图像计算得到的物体表面的反照率信息。
Slant:光源倾斜角度。用于指定光源相对于物体表面的倾斜角度。
Tilt:光源倾斜角度。用于指定光源相对于物体表面的倾斜角度。
ResultType:请求结果类型。用于指定输出的结果类型,可以是高度图像、梯度图像或反照率图像。
ReconstructionMethod:重建方法。指定用于三维重建的方法,例如 “shape”(形状重建)或"normals"(法线重建)。
GenParamName:通用参数名称。用于指定其他的通用参数名称,例如标定参数、光源参数等。
GenParamValue:通用参数值。用于指定与通用参数名称对应的参数值。
5.2 derivate_vector_field (将向量场的分量与高斯函数的导数进行卷积,并计算由此得到的各种特征。在光度立体项目中,专门用于处理photometric_stereo 函数输出的重建后的梯度、反射率、以及高度场图像。)
derivate_vector_field(VectorField ,Result , Sigma, Component )
参数列表:
VectorField(in)// 梯度场图像
Result(out) // 返回平均曲率场图像
Sigma(in) // 高斯系数
Component(in) //组件计算
1.Sigma参数:
如果在Sigma中传递一个值,那么在列和行方向上的平滑量是相同的。
如果在Sigma中传递两个值,第一个值指定列方向的平滑量,第二个值指定行方向的平滑量。
2.Component参数:(有四个值可选,后两个值专用于光度立体)
curl,向量场的旋度。旋度的一个应用是分析光流场。旋度是如果向量场是流体,小船会旋转多少。
divergence,向量场的散度。“divergence”的一个应用是分析光流场。打个比方,如果向量场是流体,散度就是源和汇的位置。
mean_curvature,当输入向量场 VectorField为梯度场时,下垫面的平均曲率H。用于处理photometric_stereo返回的向量场。
gauss_curvature,当输入向量场 VectorField 为梯度场时,下垫面的高斯曲率K。用于处理photometric_stereo返回的向量场。
6、应用案例源码
dev_close_window ()
dev_update_off ()
dev_open_window (0, 0, 512, 512, ‘black’, WindowHandle)
set_display_font (WindowHandle, 14, ‘mono’, ‘true’, ‘false’)
Message := ‘Inspect the backside of a blister’
Message[1] := ‘using photometric stereo. In this case four’
Message[2] := ‘different light orientations were used.’
disp_message (WindowHandle, Message, ‘window’, 12, 12, ‘black’, ‘true’)
disp_continue_message (WindowHandle, ‘black’, ‘true’)
stop ()
*

  • 读取输入图像
    read_image (Images, ‘photometric_stereo/blister_back_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
  • 设置光度立体参数并运行算子

Tilts := [6.1,95.0,-176.1,-86.8]
Slants := [41.4,42.6,41.7,40.9]
ResultType := [‘gradient’,‘albedo’]
photometric_stereo (Images, HeightField, Gradient, Albedo, Slants, Tilts, ResultType, ‘poisson’, [], [])
*

  • 显示反照率图像
    dev_display (Albedo)
    disp_message (WindowHandle, ‘Albedo image’, ‘window’, 12, 12, ‘black’, ‘true’)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()

*计算曲面的高斯曲率
*使用梯度场作为操作员的输入
*导数向量场。
*缺陷通常很容易在曲率图像中检测到。
derivate_vector_field (Gradient, GaussCurvature, 1, ‘gauss_curvature’)
*
*检测缺陷
*
*在曲率图像中分割区域
regiongrowing (GaussCurvature, Regions, 1, 1, 0.001, 250)
select_shape (Regions, TabletRegions, [‘width’,‘height’], ‘and’, [150,150], [200,200])
shape_trans (TabletRegions, TabletRegions, ‘convex’)
union1 (TabletRegions, TabletRegions)
erosion_circle (TabletRegions, TabletRegions, 3.5)

  • Search for defects inside the tablet areas
    reduce_domain (GaussCurvature, TabletRegions, ImageReduced)
    abs_image (ImageReduced, ImageAbs)
    threshold (ImageAbs, Region, 0.03, 255)
    closing_circle (Region, RegionClosing, 10.5)
    connection (RegionClosing, ConnectedRegions)
    select_shape (ConnectedRegions, Defects, ‘area’, ‘and’, 10, 99999)
    area_center (Defects, Area, Row, Column)
    gen_circle (Circle, Row, Column, gen_tuple_const(|Row|,20.5))
  • Display the defects in curvature image
    dev_set_draw (‘margin’)
    dev_set_color (‘red’)
    dev_set_line_width (2)
    dev_display (GaussCurvature)
    dev_display (Circle)
    Message := ‘The defect can easily be detected’
    Message[1] := ‘in the surface curvature image’
    disp_message (WindowHandle, Message, ‘window’, 12, 12, ‘black’, ‘true’)
    stop ()
  • Display the defects in the albedo image
    dev_set_draw (‘margin’)
    dev_set_color (‘red’)
    dev_display (Albedo)
    dev_display (Circle)
    disp_message (WindowHandle, ‘Defect in albedo image’, ‘window’, 12, 12, ‘black’, ‘true’)

输入图像如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

输出结果图
在这里插入图片描述
在这里插入图片描述

相关文章:

  • Python训练第四十三天
  • DHCP 动态主机配置协议(Dynamic host configuration protocol)逐层封装过程: DHCP --> UDP --> IP
  • 相机Camera日志分析之二十四:高通相机Camx 基于预览1帧的process_capture_request三级日志分析详解
  • KITTI数据集(计算机视觉和自动驾驶领域)
  • Java编程之建造者模式
  • 项目课题——基于ESP32的智能插座
  • 24.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--认证微服务
  • 英福康INFICON VGC501, VGC502, VGC503 单通道、双通道和三通道测量装置
  • AspectJ 在项目中的集成应用代码案例
  • VR教育:开启教育新时代的钥匙
  • Rhino插件大全下载指南:解锁犀牛潜能,提升设计效率
  • 基于大模型的慢性硬脑膜下血肿预测与诊疗系统技术方案
  • LabVIEW基于 DataSocket从 OPC 服务器读取数据
  • 【机器学习及深度学习】机器学习模型的误差:偏差、方差及噪声
  • HDFS 写入和读取流程
  • 40、响应处理-【源码分析】-基于请求参数的内容协商原理
  • Flink 失败重试策略 :restart-strategy.type
  • 学习threejs,交互式神经网络可视化
  • 三、kafka消费的全流程
  • 论文分类打榜赛Baseline:ms-swift微调InternLM实践
  • 椒江建设网站/西安企业seo
  • 手机ppt在哪个网站做/公司网站seo公司
  • 揭阳市榕城区建设局网站/seo优化实训总结
  • 定西企业网站制作/全网seo优化电话
  • 东阿县住房和城乡建设局网站/国内新闻最新
  • 山东政府网站集约化建设/推广平台 赚佣金