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

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’)

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

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

相关文章:

Halcon光度立体法

1、光度立体法,可用于将对象的三维形状与其二维纹理(例如打印图像)分离。需要用不同方向而且已知照明方向的多个光源,拍摄同一物体的至少三张图像。请注意,所有图像的相机视角必须相同。 物体的三维形状主要被计算为三…...

cocos3.X的oops框架oops-plugin-excel-to-json改进兼容多表单导出功能

在使用oops框架的过程中,它的导出数据并生成数据结构的插件oops-plugin-excel-to-json有些小的坑点,为满足我个人习惯,对此部分进行了一个小的修改,有需要的拿去用,记录下供大家参考; 一、配置:…...

Spring Boot + OpenAI 构建基于RAG的智能问答系统

一、技术架构设计 1.1 系统架构图 [前端]│▼ (HTTP/REST) [Spring Boot Controller]│▼ (Service Call) [问答处理服务层]├─▶ [知识库检索模块] ──▶ [向量数据库]└─▶ [OpenAI集成模块] ──▶ [OpenAI API]│▼ [结果组装与返回] 1.2 技术选型 组件技术栈版本要求…...

开源量子模拟引擎:Quantum ESPRESSO本地部署教程,第一性原理计算轻松入门!

一、介绍 Quantum ESPRESSO 是一个用于电子结构计算和纳米尺度材料建模的开源计算机代码集成套件,专门用于进行第一性原理(第一性原理)计算,涵盖了电子结构、晶体学和材料性能的模拟。 Quantum ESPRESSO GPU 版本支持GPU加速&am…...

算法blog合集

https://zhuanlan.zhihu.com/p/600245782 https://zhuanlan.zhihu.com/p/696212679 https://zhuanlan.zhihu.com/p/291406172 【推荐系统】DSSM双塔召回2_pair-wise训练和推理-CSDN博客 精通推荐算法1:为什么需要推荐系统(系列文章,建议收…...

每日八股文6.3

每日八股-6.3 Mysql1.COUNT 作用于主键列和非主键列时,结果会有不同吗?2.MySQL 中的内连接(INNER JOIN)和外连接(OUTER JOIN)有什么主要的区别?3.能详细描述一下 MySQL 执行一条查询 SQL 语句的…...

Kubernetes (k8s)版本发布情况

Kubernetes (k8s)版本发布情况 代码放在 GitHub - kubernetes/kubernetes: Production-Grade Container Scheduling and Management https://github.com/kubernetes/kubernetes/releases 文档放在 kubernetes.io各个版本变更等: https://github.com/kubernetes/kubernet…...

QT 5.9.2+VTK8.0实现等高线绘制

项目下载链接:QT5.9.2VTK8.0实现等高线绘制资源-CSDN文库 示例如下: 主要代码如下: #include "vtkRenderer.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkPo…...

CppCon 2015 学习:3D Face Tracking and Reconstruction using Modern C++

1. 3D面部追踪和重建是什么? 3D面部追踪(3D Face Tracking): 实时检测并追踪人脸在三维空间中的位置和姿态(如转头、点头、表情变化等),通常基于摄像头捕获的视频帧。3D面部重建(3D…...

Three.js进阶之音频处理与展示

引擎在对音频处理提供了丰富的接口,本文展示两个音频处理示例。 一、声音可视化 Three.js中的声音可视化是以视觉为核心,以音乐为载体,为音乐提供直观的视觉呈现。通过对音乐数据的分析并结合开发需求,能实现酷炫的视觉效果。在…...

4.2 HarmonyOS NEXT分布式AI应用实践:联邦学习、跨设备协作与个性化推荐实战

HarmonyOS NEXT分布式AI应用实践:联邦学习、跨设备协作与个性化推荐实战 在HarmonyOS NEXT的全场景分布式架构下,AI能力突破设备边界,通过联邦学习保护数据隐私、跨设备任务协作释放算力潜能、个性化推荐实现服务主动化。本文结合华为分布式…...

兼容老设备!EtherNet/IP转DeviceNet网关解决储能产线通讯难题

在新能源行业飞速发展的当下,工业自动化水平的高低直接影响着企业的生产效率与产品质量。JH-EIP-DVN疆鸿智能ETHERNET/IP和DEVICENET作为工业领域常用的通信协议,它们之间的转换应用在新能源生产线上发挥着关键作用。本文重点探讨ETHERNETIP从站转DEVICE…...

健康检查:在 .NET 微服务模板中优雅配置 Health Checks

🚀 健康检查:在 .NET 微服务模板中优雅配置 Health Checks 📚 目录 🚀 健康检查:在 .NET 微服务模板中优雅配置 Health Checks一、背景与意义 🔍二、核心配置 🔧2.1 引入必要的 NuGet 依赖 &…...

【Pytorch学习笔记】模型模块08——AlexNet模型详解

AlexNet模型详解:结构、算法与PyTorch实现 一、AlexNet模型结构 AlexNet是2012年ImageNet竞赛冠军模型,由Alex Krizhevsky等人提出,标志着深度学习在计算机视觉领域的突破。 网络结构(5卷积层 3全连接层)&#xff…...

LabVIEW自感现象远程实验平台

LabVIEW开发自感现象远程实验平台,通过整合 NI数据采集设备、菲尼克斯(Phoenix Contact)继电器模块及罗技(Logitech)高清摄像头,实现远程数据采集、仪器控制与实时监控三大核心功能。平台突破传统实验装置局…...

AppTrace 视角下 App 一键拉起:提升应用转化率的高效方案​

官网地址:AppTrace - 专业的移动应用推广追踪平台 在大规模开展 App 推广、用户召回、广告投放、邀请传播等活动时,高效的深度链接方案至关重要。它不仅能缩短用户路径,带来无缝、流畅的跳转体验,更核心的是通过参数传递打通 web…...

梯度下降:机器学习优化的核心算法

梯度下降算法原理及其在机器学习中的实践应用 引言 在机器学习领域,优化算法扮演着核心角色。其中梯度下降法作为最基础的优化方法,为神经网络、支持向量机等模型提供了参数优化解决方案。本文将深入解析梯度下降的数学原理,探讨其多种变体实现,并通过Python代码演示具体…...

Vue-6-前端框架Vue之基于Plotly.js绘制曲线

文章目录 1 安装Plotly.js2 折线图2.1 创建一个Vue组件来绘制图表2.1.1 Vue模板部分template2.1.2 Vue脚本部分script2.1.3 Vue样式部分style2.2 使用这个组件APP.vue3 动态更新图表3.1 创建一个Vue组件来绘制图表3.1.1 Vue模板部分template3.1.2 Vue脚本部分script3.1.3 Vue样…...

Python----目标检测(《YOLOv3:AnIncrementalImprovement》和YOLO-V3的原理与网络结构)

一、《YOLOv3:AnIncrementalImprovement》 1.1、基本信息 标题:YOLOv3: An Incremental Improvement 作者:Joseph Redmon, Ali Farhadi 机构:华盛顿大学(University of Washington) 发表时间:2018年 代…...

Redux:不可变数据与纯函数的艺术

Redux:不可变数据与纯函数的艺术 状态管理的困境 随着现代 Web 应用功能的不断扩展,前端开发者面临着日益复杂的状态管理挑战。当应用从简单的表单交互发展到复杂的单页应用时,组件间共享状态的问题变得尤为突出。想象一个电商平台&#xf…...

算法篇 八大排序(冒泡 插入 选择 堆 希尔 快排 归并 计数)

目录 引言 1.冒泡排序 思路 代码实现 2.选择排序 思路 代码实现(存在易错点) 3.插入排序 思路 代码实现 4.希尔排序 思路 代码实现 5.堆排序 思路 代码实现 6.快速排序(快排) 一.三路划分 思路 代码实现 二.自…...

技术文档写作全攻略

一、引言 在快速迭代的软件开发中,技术文档早已不只是附属品,而是与代码同等重要的交付物: 帮助新成员 T0 → T1 学习曲线指数下降;降低支持成本,将重复性问答前移到自助文档;为合规审计、知识传承及商业…...

网络安全全景解析

引言 在数字化时代,网络已深度融入社会生产生活的各个领域,成为推动经济发展和社会进步的关键力量。然而,随着网络应用的日益复杂,网络安全问题也呈现出多样化、复杂化的趋势。从个人隐私泄露到企业核心数据被盗,从基础…...

音视频之视频压缩编码的基本原理

系列文章: 1、音视频之视频压缩技术及数字视频综述 2、音视频之视频压缩编码的基本原理 一、预测编码: 1、预测编码的基本概念: 预测法是最简单、实用的视频压缩编码方法,经过压缩编码后传输的并不是像素本身的取样值&#xff0…...

IDEA 包分层显示设置

方法一(用的IntelliJ IDEA 2024.1.4版本): 找到项目视图设置入口:在左侧Project(项目)面板的顶部,有个三个点...的按钮 ,点击它。 进入树形外观配置:在弹出的菜单中&…...

书籍将正方形矩阵顺时针转动90°(8)0605

题目 给定一个N x N的矩阵matrix,把这个矩阵调整成顺时针转动90后的形式。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 顺时针转动90后为: 13 9 5 1 14 …...

【docker】容器技术如何改变软件开发与部署格局

在当今数字化时代,软件开发与部署的效率和灵活性至关重要。就像古人云:“工欲善其事,必先利其器。”Docker 作为一款强大的容器技术,正如同软件开发领域的一把利器,极大地改变了应用的开发、交付和运行方式。本文将深入…...

C#抽象类深度解析 _ 核心特性与实战指南

—— 面向对象设计的基石 🔍抽象类核心定义 abstract class AbClass { ... } // abstract修饰符声明 不可实例化:new AbClass() 将触发编译错误继承专用:仅能作为其他类的基类存在混合成员组合:可同时包含抽象方法和已实现方法…...

时序数据库IoTDB的UDF Sample算法在数据监控、故障预防的应用

一、数据监控在工业物联网中的重要性 设备数据监控是工业物联网(IoT)中最为广泛应用的领域之一。通过实时监控工厂机械设备的运行状态,企业能够提前发现设备的潜在故障,从而实现预防性维护与可预测性维护。这一做法不仅能有效提升…...

Flask-SQLAlchemy使用小结

链表查询 join方法允许你指定两个或多个表之间的连接条件,并返回一个新的查询对象,该对象包含了连接后的结果。 内连接 from sqlalchemy import join # 使用join函数 query db.session.query(User, Order).join(Order, User.id Order.user_id) res…...