halcon缺陷检测学习8褶皱inspect_shampoo_label_photometric_stereo

金阳华
2023-12-01

*本程序演示使用光度立体技术检查洗发水瓶的标签褶皱缺陷。
*输入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 ()

  • 以不同的光照显示输入图像
    read_image (Images, ‘photometric_stereo/shampoo_label_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

*应用光度立体视觉来确定反照率和表面梯度。
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’, [], [])

  • 光度立体技术重建一个表面,得到反照率图像与梯度图像。具有至少三个不同光照方向的输入图像数组(Images)重建的高度(HeightField)
    *表面的梯度图像(Gradient)表面的反照率图像(Albedo)参上 参上 参上 重构方法的类型(泊松分布)
    *泛型参数的类型与值(默认为空)
  • 显示反照率图像
    dev_display (Albedo)
    disp_message (WindowHandle, ‘反射率图像’, ‘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, -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’)

 类似资料: