*本项目演示了用光度立体技术检查地板孔洞缺陷。
*输入的4张图片来自地板面板,光线来自不同的方向
*
*

    • 初始化
     dev_close_window ()
     dev_update_off ()
     dev_open_window (0, 0, 640, 512, ‘black’, WindowHandle)
     *打开图形窗口,定义参考点与大小
     set_display_font (WindowHandle, 14, ‘mono’, ‘true’, ‘false’)
     *定义窗口显示文字格式
     Message := ‘Inspect the label of flooring panels’
     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 ()
     for Index := 1 to 2 by 1
     * 
      • 以不同的光照显示输入图像
     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)
     *将带有索引(从1开始)的图标对象从图标输入对象元组对象复制到输出对象。
     *输入的元组(Images)复制后的对象(ObjectSelected)要选择的对象的索引(I)
     dev_display (ObjectSelected)
     *显示复制后的图片
     disp_message (WindowHandle, Message, ‘window’, 12, 12, ‘black’, ‘true’)
     wait_seconds (0.5)
     *每更换一个图片等待0.5s
     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’, [], []) 
      • 光度立体技术重建一个表面。具有至少三个不同光照方向的输入图像数组(Images)重建的高度(HeightField)
     *表面的梯度图像(Gradient)表面的反照率图像(Albedo)参上 参上 参上 重构方法的类型(泊松分布)
     *泛型参数的类型与值(默认为空)• 
    
    •  *显示反照率图像
     dev_display (Albedo)
     *显示反照率图像
     disp_message (WindowHandle, ‘Albedo image’, ‘window’, 12, 12, ‘black’, ‘true’)
     *定义显示如图信息对话框
     disp_continue_message (WindowHandle, ‘black’, ‘true’)
     *定义提示继续运行的文本框,内容为默认
     stop ()
     *
     *
     *计算曲面的高斯曲率。
     *在曲率图像中缺陷通常很容易检测到。
     derivate_vector_field (Gradient, MeanCurvature, 1.0, ‘mean_curvature’)
     *用高斯函数的导数卷积向量场。
     *输入向量场(Gradient)过滤后的结果图像( MeanCurvature)高斯函数的变量(1)待计算分量(平均曲率)
     *
     *缺陷检测 
      • 在曲率图像中分割平板区域
     threshold (MeanCurvature, Region, 0.02, 1000)
     *利用全局阈值算子分割图像。输入的图片(MeanCurvature)分割后(Region)阈值(0.02,1000)
     *分割后图像灰度范围:MinGray <= RegionDynThresh <= MaxGray
     connection (Region, Defects)
     *计算区域的连通分量。参数:输入的图片(Region)连接组件(Defects)
     area_center (Defects, Area, Row, Column)
     *得到缺陷区域中心。待检查区域(Defects)选择区域的大小(Area)中心坐标(Row, Column)
     gen_circle (Circle, Row, Column, sqrt(Area) + 10)
     *创建一个圆。生成的圆(Circle)圆心坐标索引(Row, Column)实心圆的半径(缺陷区域加10)• 在曲率图像中显示缺陷
     dev_set_draw (‘margin’)
     *定义圆区域填充模式(边缘)
     dev_set_color (‘red’)
     *圆为红色
     dev_set_line_width (2)
     *圆宽2
     dev_display (MeanCurvature)
     *显示曲率图像
     dev_display (Circle)
     *显示定义的圆
     Message := ‘The defects can easily be detected’
     Message[1] := ‘in the surface curvature image’
     disp_message (WindowHandle, Message, ‘window’, 12, 12, ‘black’, ‘true’)
     *显示文本框,内容如上
     stop ()• 在反照像中显示缺陷
     dev_set_draw (‘margin’)
     **定义圆区域填充模式(边缘)
     dev_set_color (‘red’)
     *圆为红色
     dev_display (Albedo)
     *显示反照图
     dev_display (Circle)
     disp_message (WindowHandle, ‘Defects in albedo image’, ‘window’, 12, 12, ‘black’, ‘true’)
     *显示文本框。
     if (Index < 2)
     disp_continue_message (WindowHandle, ‘black’, ‘true’)
     *当图片没有显示完时,显示提醒文本框
     stop ()
     endif
     endfor