下文是对于halcon:光度立体法的一些浅薄理解。

主要用于测试产品表面的凹坑,深一点的划伤等等
光度立体法是通过二维图片提取三维模型,一般使用4张图。

下面先看一下测试原图和测试结果
原图:



结果图如下:

四张原始图片都是光源在不同的角度下拍摄的
从主视图看,光源角度几乎都在45°左右
Slants := [41.4,42.6,41.7,40.9]
从俯视图看,均匀分布在每个上下左右四个位置
Tilts := [6.1,95.0,-176.1,-86.8]
下面是对于参数Slants和Titls的示意图和解释
Slants

Titls

代码如下:

在这里插入代码片
*用于检查药物泡罩背面。
*输入4张从药泡背面拍摄的图像
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 1Message := '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参数是俯视图看光源的角度
Tilts := [6.1,95.0,-176.1,-86.8]
*Slants参数是主视图看光源的角度
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。
*缺陷通常很容易在曲率图像中检测出来。
derivate_vector_field (Gradient, GaussCurvature, 1, 'gauss_curvature')
*使用区域分割的图像。
regiongrowing (GaussCurvature, Regions, 1, 1, 0.001, 250)
*选择宽度和高度都在150-200之间的图像
select_shape (Regions, TabletRegions, ['width','height'], 'and', [150,150], [200,200])
*形成一个凸形区域
shape_trans (TabletRegions, TabletRegions, 'convex')
*区域进行联合
union1 (TabletRegions, TabletRegions)
*以3.5的圆形进行腐蚀区域(减小region)
erosion_circle (TabletRegions, TabletRegions, 3.5)
*减少图像区域
reduce_domain (GaussCurvature, TabletRegions, ImageReduced)
*计算图像的绝对值(模数)。
abs_image (ImageReduced, ImageAbs)
*阈值分割
threshold (ImageAbs, Region, 0.03, 255)
*圆的闭运算
closing_circle (Region, RegionClosing, 10.5)
*将检测区域进行分离
connection (RegionClosing, ConnectedRegions)
*选择其中像素大小在10-99999之间的区域,就是error区域
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))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例子:
inspect_blister_photometric_stereo.hdev

halcon:光度立体法相关推荐

  1. 如何获取物体表面的法向量?好好谈谈光度立体法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 这种逼真的效果,一个很重要的原因是获 ...

  2. Halcon 光度立体法应用(二)——皮革表面缺陷检测

    Halcon 光度立体法应用--皮革表面缺陷检测 如果想深刻.系列的了解光度立体法,建议根据博客顺序观看.在这个例程中将会介绍通过光度立体法生成的图像适用场景. 总体代码注释说明 * 此例程介绍的是利 ...

  3. 光度立体法检测原理讲解

    光度立体法检测 图像辐照度 决定场景表面片辐射的因素有两个: 1.在场景表面片的照明 投在某一特定表面片上的照明量取决于该表面片在场景中相对于光源的分布位置 2.表面片反射的入射照明部分 在某一特定方 ...

  4. Halcon缺陷检测——光度立体

    光度立体法 1. 了解一些概念 2. 认识两个算子 3. 初试光度立体法 4. 药片外包装破损的检测(halcon案例) 5. 银行卡字符识别图片下载 1. 了解一些概念 适用场景:光度立体法可以看作 ...

  5. 光度立体(一)- 基于先验信息的快速表面法向量求解

    基于先验信息的快速表面法向量求解 一.光度立体法简介 二.经典光度立体法求解法向量 三.基于先验信息快速求解法向量 一.光度立体法简介 光度立体法(Photometric Stereo)是一种使用多个 ...

  6. Photometric Stereo 光度立体三维重建(三)——由法向量恢复深度

    本文分为三部分,第一部分是使用最小二乘法求解物体表面法向量,第二部分是利用求解得到的法向量求出物体表面的深度(物体表面的高度场),第三部分是将求出的高度场写成obj文件后使用MeshLab显示 1. ...

  7. Photometric Stereo 光度立体三维重建(一)——介绍

    在计算机视觉的三维重建中,基于几何的方法有: SFM立体视觉 结构光 我们在这篇文章中介绍的是基于光度立体视觉的三维重建方法: 基于几何的三维重建方法中可以恢复粗略的三维形状,而光度法的特点是可以对物 ...

  8. Photometric Stereo光度立体三维重建(五)——基于深度学习的PS方法

    本文将会介绍几种具有代表性的将深度学习与Photometric Stereo进行结合来进行三维重建的方法 一.开山之作 DPSN 论文:Deep Photometric Stereo Network ...

  9. 3D视觉检测的未来:光度立体技术

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 利用3D表面定向,特别是它对反射光的影响,工业应用的光度立体产生对 ...

最新文章

  1. VTK:绘图之SurfacePlot
  2. Linux版本划分——基于打包方式
  3. 《Go语言圣经》学习笔记 第二章 程序结构
  4. 使用ABAP绘制可伸缩矢量图
  5. window.btoa()方法;使字符编码成base64的形式
  6. oracle 12c grid db 安装的的checklist
  7. SQL Server 2005 无法连接服务器(error:10061)
  8. java数据结构银行叫号_数据结构C语言版利用队列结构实现银行叫号系统要..._结构工程师_帮考网...
  9. ADS2017破解后重启显示license失效,需要把EESoft Flexnet Licence Server启动类型设置为自动
  10. 北京大学计算机辅助翻译招生计划,北京大学计算机辅助翻译硕士复习规划
  11. 前端上传组件Plupload
  12. 【Android Studio学习】第一篇、制作一个拥有登录和注册功能的简易APP
  13. pair类型 C++
  14. 区块链DAPP开发 以太坊智能合约框架有哪些
  15. 个人深度学习keras环境配置介绍
  16. Java分页导出Excel文件
  17. 使用js-xlsx handsontable 分批次导入Excel数据(兼容ie9)
  18. cif和cip的区别_贸易术语CIF和CIP的区别
  19. [附源码]计算机毕业设计springboot南通大学福利发放管理系统
  20. 制定销售和现金流量计划

热门文章

  1. glup3/glup4 git
  2. CAD常见问题解答!恭喜你,又学会了几个重要的CAD操作!
  3. 带内管理和带外管理的区别
  4. 攻防世界 Crypto Caesar
  5. python中glob模块怎么下_如何安装“glob”模块?
  6. FastDFS文件服务器
  7. 云-Azure-百科:Azure
  8. java dbhelper通用类,DbHelper数据库通用类使用方法
  9. java 调用关系_【Java基础】几种简单的调用关系与方法
  10. 计算机网络④-③/④:流媒体协议:编码/推流/拉流、 P2P协议:.torrent/DHT