*本程序演示使用光度立体技术检查洗发水瓶的标签褶皱缺陷。
*输入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 := ‘用光度立体检查洗发水瓶的标签,’
Message[1] := ‘在这个例子中是使用了4个不同方向的光线。’
disp_message (WindowHandle, Message, ‘window’, 12, 12, ‘black’, ‘true’)
*显示如上字体
disp_continue_message (WindowHandle, ‘black’, ‘true’)
stop ()
*应用光度立体视觉来确定反照率和表面梯度。
Slants := [41.4,42.6,41.7,40.9]
*偏锋。物体平面与光照方向之间的角度(单位为度)。
Tilts := [6.1,95.0,-176.1,-86.8]
*倾斜。物体平面内光照方向的角度(单位为度)。
ResultType := [‘gradient’,‘albedo’]
*输出结果的类型。[“梯度”、“反照率”].
photometric_stereo (Images, HeightField, Gradient, Albedo, Slants, Tilts, ResultType, ‘poisson’, [], [])
*使用求出的梯度图像来计算曲面的高斯曲率。
*在曲率图像中缺陷通常很容易检测到。
derivate_vector_field (Gradient, MeanCurvature, 1.0, ‘mean_curvature’)
*检测缺陷
*在曲率图像中分割平板区域
threshold (MeanCurvature, Region, -10, -0.07)
*利用全局阈值算子分割图像。输入的图片(MeanCurvature)分割后(Region)阈值( -10, -0.07)
*分割后图像灰度范围:MinGray <= RegionDynThresh <= MaxGray
opening_circle (Region, RegionOpening, 1)
*建立覆盖缺陷的圆圈(半径太小连成路线)。有缺陷区域()缺陷区域()线或圆圈半径(1)
connection (RegionOpening, ConnectedRegions)
select_shape (ConnectedRegions, Defects, ‘area’, ‘and’, 50, 99999)
*重新选择缺陷区域。输入的图片(ConnectedRegions)满足条件的区域(Defects)
*将要计算的形态特征(’area’)独立特征间的连接关系(’and’)特征的最小限制(50)特征的最大限制(99999)
shape_trans (Defects, Circle, ‘outer_circle’)
*建立覆盖缺陷的实心圆。缺陷区域()建立的圆()模式(外圆)
*在平均曲率图像中显示缺陷
dev_set_draw (‘margin’)
*改变建立的外圆模式,只显示边缘。
dev_set_color (‘red’)
dev_set_line_width (2)
dev_display (MeanCurvature)
dev_display (Circle)
Message := ‘这个缺陷很容易被发现’
Message[1] := ‘在曲面曲率图像中’
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, ‘反照率图像显示缺陷’, ‘window’, 12, 12, ‘black’, ‘true’)