Halcon:光度立体

摘要

  基本原理

  功能

  应用场景

 代码

 代码下载

 更多详情了解

摘要

  基本原理

光度立体通过分析物体表面对光照的反应,利用不同角度和方向的光源照射,获取物体表面的亮度信息。通过以下步骤实现三维重建:

  1. 光源设置:使用多个方向的光源照射同一物体。
  2. 图像捕捉:捕捉不同光照条件下的物体图像。
  3. 亮度计算:根据反射模型(如朗伯反射模型),计算各个点的亮度与法向量的关系。
  4. 法向量估计:通过分析亮度信息,估计物体表面的法向量。
  5. 三维重建:利用法向量信息重建物体的三维形状。
平台搭建示意图

  功能

  • 三维重建:生成物体的高精度三维模型。
  • 表面特征提取:提取物体表面的细节特征,如纹理和形状。
  • 光照分析:分析物体表面对不同光照条件的反应,获取表面材质信息。

  应用场景

  1. 计算机视觉:用于物体识别和追踪。
  2. 虚拟现实与增强现实:创建真实感强的三维模型。
  3. 工业检测:用于产品表面缺陷检测和质量控制。
  4. 医学成像:重建器官或组织的三维结构,用于手术规划。

  基本步骤如下

1.加载图像
2.预处理
3.分割提取
4.识别
5.显示

代码


*1 加载图像
ImageFiles := []
ImageFiles[0] :='光度立体0.jpg'
ImageFiles[1] :='光度立体90.jpg'
ImageFiles[2] := '光度立体180.jpg'
ImageFiles[3] := '光度立体360.jpg'

dev_clear_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
* zoom_image_size (Image, ImageZoom, 512, 512, 'constant')
read_image (Image, ImageFiles)
rgb1_to_gray (Image, Image)

*2 设置参数
*光线投影和水平向右的夹角
* Tilts := [0,90,180,270]
*光线和光轴的夹角
* Slants := [45,45,45,45]

Tilts := [-80,10,95,-170]
Slants := [45,45,45,45]
*ResultType := ['gradient','albedo']
*梯度是提边
ResultType := ['gradient']
*3 光度立体重建
photometric_stereo (Image, HeightField, Gradient, Albedo, Slants, Tilts, 'gradient', 'poisson', [], [])
*求向量场导数
derivate_vector_field (Gradient, Result, 5, 'mean_curvature')
* threshold (Result, Regions, 0.001165, 0.1)

*4 提取特征
threshold (Result, Regions, 0, 0.9)
erosion_circle (Regions, RegionErosion1,5)
dilation_rectangle1 (RegionErosion1, RegionDilation1, 2, 50)
connection (RegionDilation1, ConnectedRegions2)
select_shape (ConnectedRegions2, SelectedRegions, ['area','height'], 'and', [47554.3,621.6], [1.12092e+006,662.36])

shape_trans (SelectedRegions, RegionTrans1, 'rectangle2')

area_center (RegionTrans1, Area, Row, Column)
orientation_region (RegionTrans1, Phi)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(180), HomMat2D)
affine_trans_region (RegionTrans1, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
*最好要光度立体后的图片
affine_trans_image (Result, ImageAffinTrans, HomMat2D, 'constant', 'false')


reduce_domain (ImageAffinTrans, RegionAffineTrans, ImageReduced1)

invert_image (ImageReduced1, ImageInvert)
*强制转换成灰度图像
scale_image_max (ImageInvert, ImageScaleMax)
threshold (ImageInvert, Regions1, -0.007587, -0.000266)
connection (Regions1, ConnectedRegions3)

dev_display (ImageAffinTrans)
dev_set_draw ('margin')
dev_display (ConnectedRegions3)

在这里插入图片描述

 代码下载


 更多详情了解

https://blog.csdn.net/qq_32015315/article/details/141663063

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值