Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换

        1、骨架的原理

        图像的骨架特征,可以简单地理解为图像的中轴。骨架虽然从原来的物体图像中去掉了一些点,但仍然保持了原来物体的结构信息。骨架提取技术可以用于压缩图像,用在图像识别中可以降低计算量。

        2、骨架获取的两种方法

        ①火烧模型。即图像的四周被相同火势点燃,燃烧速度一致,火势由图像四周向内部燃烧时,火焰相与处即为骨架。

        ②最大圆盘法。最大圆盘为完全包含在物体内部并且与物体边界至少有两个切点的圆,而骨架就是由目标内所有内切圆盘的圆心组成的。

        3、骨架的相关算子

        Regions / Transformations

        计算区域的骨架。

skeleton(Region : Skeleton : : )

        Region:输入参数,输入的区域。

        Skeleton:输出参数,生成的骨架,Skeleton == Region。

        4、区域的距离变换

        距离变换是一种通常只应用于二值图像的算子。变换的结果是一个与输入图像相似的灰度图像,除了改变前景区域内点的灰度强度以显示从每个点到最近边界的距离。

Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换_第1张图片

        Regions / Transformations

        计算区域每个点到区域边缘的距离变换,并将距离信息赋值到图像中。

distance_transform(Region : DistanceImage : Metric, Foreground, Width, Height : )

        Region:输入参数,目标区域。

        DistanceImage:输出参数,距离图像。

        Metric:输入参数,用于测量距离的方法。默认 'city-block'

'chamfer-3-4',沿每个点到边缘的平行和垂直移动的权重为3,对角线移动的权重为4的方向计算最近距离。

'chamfer-3-4-unnormalized',同上,抑制归一化,可以减少运算量。

'chessboard',沿每个点到边缘的垂直、平行和对角的方向计算最近距离。

'city-block',沿每个点到边缘的垂直和平行的方向计算最近距离。

'euclidean',沿每个点到边缘的欧几里得距离。

'octagonal',沿每个点到边缘的垂直、平行和对角线(权值更高)的方向计算最近距离。

        Foreground:输入参数,计算方式设置。默认 'true' 【'false'在区域外所有的点到区域的边缘, 'true'计算区域内所有的点到区域边缘的距离】

        Width:输入参数,输入的计算距离的范围宽度。1 ≤ Width

        Height:输入参数,输入的计算距离的范围高度。1 ≤ Height

        这里的Width,Height一般情况是等于图片的分辨率大小,但是范围值也可以设定为:要计算的区域包含在设定的分辨率内。

***distance_transform算子的用法错误
read_image(Image,'D:/Documents/Desktop/Snowcity.png')
rgb1_to_gray(Image, GrayImage)
threshold (GrayImage, Regions, 0, 225)
*错误的分辨率参数输入
distance_transform(Regions, DistanceImage1, 'city-block', 'true', 640, 480)
*正确的分辨率参数输入
distance_transform(Regions, DistanceImage2, 'city-block', 'true', 750, 564)
Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换_第2张图片 Snowcity原图,此图像分辨率为750*564 Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换_第3张图片 如果算子按照默认参数,则只能输出 640, 480此分辨率以内的
距离变换灰度图DistanceImage

Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换_第4张图片 正确的输出,DistanceImage2

        5、distance_transform算子与skeleton算子的结合应用

        在正常情况下,物体上的点到物体的中轴(骨架)的距离应该在一定范围之内,如果存在偏差超过一定范围,则可以判断为存在缺陷。因此,可以先通过distance_transform算子,获得目标区域点到边缘的距离分布图像,再通过skeleton算子得到目标区域的骨架。

        因为距离变换的图像是一个灰度图像,有差异的地方对应的骨架灰度值周围没有差异的骨架的灰度值不一样,这样就可以利用threshold算子将这些不同的地方区分开。

*筛选出缺陷点
read_image(Image,'D:/Documents/Desktop/Snowcity.png')
rgb1_to_gray(Image, GrayImage)
*区域阈值分割
threshold (GrayImage, Regions, 0, 225)
*计算一个区域Regions的距离变换,输出一个图像
distance_transform(Regions, DistanceImage1, 'city-block', 'true', 637, 347)
*提取Regions的骨架
skeleton(Regions, Skeleton1)
*将距离变换后的灰度图像缩小至Skeleton1骨架大小(基于区域)
reduce_domain(DistanceImage1, Skeleton1, ImageReduced)
*灰度阈值分割,最亮和最暗的地方都是有缺陷的地方
threshold(ImageReduced, Region1, 0, 19)
threshold(ImageReduced, Region2, 23, 127)
*将提取出的两个区域合并为一个区域
union2(Region1,Region2, RegionUnion)
*连通独立的区域
connection(RegionUnion, ConnectedRegions)
*输出每个独立区域的中心点和面积
area_center(ConnectedRegions, Area, Row, Column)
*以这些坐标将这些位置以十字标定出来
dev_display(GrayImage)
dev_set_color('yellow')
*这里的200000根据自己窗口的句柄去更改
disp_cross(200000,Row, Column, 20, 0)
Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换_第5张图片 原图Snowcity Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换_第6张图片 距离变换的灰度图-DistanceImage1 Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换_第7张图片 骨架-Skeleton1(红色部分) Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换_第8张图片 图像缩减-ImageReduced Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换_第9张图片 Region1(红色部分) Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换_第10张图片 Region2(红色部分) Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换_第11张图片 union2联合后的区域RegionUnion Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换_第12张图片 区域连通-ConnectedRegions Halcon 第四章『图像特征和提取』◆第6节:图像的骨架特征和距离变换_第13张图片 最后根据area_center输出的坐标去在原图像中标定

参考文献:

杜斌—《机器视觉 使用HALCON描述与实现》

【halcon】 distance_transform 边缘距离转换 (by shany shang)https://blog.csdn.net/szx123_/article/details/104405332

你可能感兴趣的:(Halcon初级_学习笔记,视觉检测)