Halcon数据类型转换系列(2)遍历xld;Region、XLD、Polygon之间的互相转换

简介: Halcon数据类型转换系列(2)遍历xld;Region、XLD、Polygon之间的互相转换

一、Halcon遍历xld,halcon中统计数目归纳下:


图形元组变量计算数目 是使用 count_obj算子统计

控制元组变量计算数目 是通过|元组名称|进行的(对控制类型数组用||统计)

count_obj(DeformedContours, NumberContours)
area_center_xld (DeformedContours, Area1, Row1, Column1, PointOrder)
    for i := 1 to NumberContours by 1
        select_obj (DeformedContours, ObjectSelected, i)
        length_xld (ObjectSelected, Length) 
        get_contour_xld (ObjectSelected, row, col)
    endfor
gen_region_contour_xld (DeformedContours, Region, 'filled')
region_to_bin(Region, Binary, 0, 255, Width, Height)
overpaint_region (Binary, Region1, color8, 'fill')
write_image (Binary, 'bmp', 0, 'E:/Org.bmp')


二、Region、XLD、Polygon之间的互相转换


1、Region像素坐标值的存储方式

根据如下代码生成一个矩形区域,并获取该区域内所有像素的坐标值,根据结果可以看出,Region内像素坐标值是根据行程编码的规则存储的。


gen_rectangle1 (ROI_0, 100, 100, 300, 300)

get_region_points (ROI_0, Rows, Columns)



2、XLD像素坐标值的存储方式

根据如下代码,将上面的Region转换为XLD,并获取该XLD上所有像素的坐标值,根据结果可以看出,XLD上像素坐标值是按照顺时针的顺序依次存储的。


gen_contour_region_xld (ROI_0, Contours, 'border')

get_contour_xld (Contours, Row, Col)



3、Polygon像素坐标值的存储方式

根据如下代码,生成一个区域,先转换为XLD再转换为Polygon,并获取该Polygon上所有像素的坐标值,根据结果可以看出,Polygon上像素坐标值是按照顺时针的顺序依次存储的,并且是一些列离散的点集(只有在拐角处会存在点)


gen_region_runs (ROI_0, [140,141,142,143,143,144,145,146,147,148,149,150,151,151,152,152,153,153,154,154,155,155,156,156,157,157,158], [189,187,185,172,183,166,164,162,161,160,158,157,156,171,155,170,154,169,154,169,153,168,153,168,168,184,168], [189,189,189,180,189,189,189,189,189,189,189,189,166,189,163,189,161,189,159,189,157,189,155,189,175,189,168])

gen_contour_region_xld (ROI_0, Contours, 'border')

gen_polygons_xld (Contours, Polygons, 'ramer', 2)

get_polygon_xld (Polygons, Row, Col, Length, Phi)

gen_region_points (Region, Row, Col)



4、Region、XLD、Polygon之间的相关转换

当我们检测不连续的划痕缺陷时,通过边缘检测算子得到的xld也是不连续的。这时我们可以将不连续的xld合并为一个整体,但是我们将这个合并后的xld转换为region后,region已经不是一条线而是一个闭合的区域。


read_image (Image, 'C:/Users/SWD-AR05/Desktop/10.png')

lines_gauss (Image, Lines, 1.5, 3, 8, 'dark', 'true', 'bar-shaped', 'true')

union_adjacent_contours_xld (Lines, UnionContours, 100, 10, 'attr_keep')

gen_region_contour_xld (UnionContours, Region, 'filled')

                                   


针对上述问题,我们可以先将合并后的xld转换为polygon,然后将polygon转换为region,此时region就是一条连续的线。


read_image (Image, 'C:/Users/SWD-AR05/Desktop/10.png')

lines_gauss (Image, Lines, 1.5, 3, 8, 'dark', 'true', 'bar-shaped', 'true')

union_adjacent_contours_xld (Lines, UnionContours, 100, 10, 'attr_keep')

gen_polygons_xld (UnionContours, Polygons, 'ramer', 2)

get_polygon_xld (Polygons, Row, Col, Length, Phi)

gen_region_polygon (Region1, Row, Col)


三、region to image


HALCON提供了三种方法:region_to_bin、region_to_label、region_to_mean.


1. region_to_bin(Region,BinImage,ForegroundGray,BackgroundGray,Width,Height)它将一个区域转化成一个二进制字节图像。给区域内的所有像素赋给前景灰度值,如果输入区域大于生成的图像,则会在图像边界处截断;


threshold (Image1, Region, 128, 255)

region_to_bin(Region, Binary, 0, 255, Width, Height)

write_image (Binary, 'bmp', 0, 'E:/Org.bmp')

或者

binary_threshold (Image1, BrightRegion, 'max_separability', 'dark', UsedThreshold)

region_to_bin(BrightRegion, SaveBinary, 0, 255, Width, Height)

write_image (SaveBinary, 'jpeg 100', 0, 'd:/Org.jpg')

2. region_to_label(Region,ImageLabel,Type,Width,Height)它将区域转化为一个标签图像,通过索引值:第一个区域赋予灰度值1,第二个区域赋予灰度值2,依此类推……这里仅仅使用正的灰度值,直到256。区域大于生成图像则会被适当地截断。如果区域重叠,则较高值的图像会被输出。如果想重叠,可以调用expand_region进行处理。Type='int2'、'int4'、‘byte'


3. region_to_mean(Regions,Image,ImageMean)用它们的均值来填充图像区域,返回Image。这个操作符主要用来可视化分割结果。


相关文章
|
算法 数据可视化
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
2147 0
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
|
3月前
|
SQL 关系型数据库 数据库
PostgreSQL将边界geometry转换为坐标
【8月更文挑战第5天】PostgreSQL将边界geometry转换为坐标
183 10
|
3月前
|
C++
C++ PCL 计算多个RT矩阵变换后的变换矩阵
C++ PCL 计算多个RT矩阵变换后的变换矩阵
48 0
|
5月前
|
Python
如何查询RGB图像的三维numpy数组中有多少个不同的RGB点,并打印具体数值?
如何查询RGB图像的三维numpy数组中有多少个不同的RGB点,并打印具体数值?
|
算法 异构计算 Python
【Python】向量叉积和凸包 | 引射线法 | 判断点是否在多边形内部 | 葛立恒扫描法 | Cross Product and Convex Hul
这个系列似乎反响不错, 所以我继续水下去 (bushi)。本篇博客是关于经典的 Cross Product and Convex Hull (向量叉积和凸包)的,我们将介绍引射线法,葛立恒扫描法。在讲解之前我会对前置知识做一个简单的介绍,比如向量叉积,如何确定直线是在顺时针上还是逆时针上等。算法讲解部分是为后面练习题做准备的,比如如何判断内点是否在多边形内,如何计算多边形面积等,还将简单介绍一下葛立恒扫描法,在提供的练习题中就能碰到.
855 0
【Python】向量叉积和凸包 | 引射线法 | 判断点是否在多边形内部 | 葛立恒扫描法 | Cross Product and Convex Hul
halcon模板匹配实践(2)算子find_shape_model里的参数Row, Column, Angle含义是什么?
halcon模板匹配实践(2)算子find_shape_model里的参数Row, Column, Angle含义是什么?
765 0
halcon模板匹配实践(2)算子find_shape_model里的参数Row, Column, Angle含义是什么?
|
传感器 编解码 算法
Halcon XLD: eXtended Line Descriptions 亚像素轮廓
Halcon XLD: eXtended Line Descriptions 亚像素轮廓
826 0
Halcon XLD: eXtended Line Descriptions 亚像素轮廓
Halcon数据类型转换系列(1)图像image、区域region和轮廓xld的相互转换(★firecat推荐★)
Halcon数据类型转换系列(1)图像image、区域region和轮廓xld的相互转换(★firecat推荐★)
1343 0
|
Python
Halcon读取dxf文件生成xld,然后实现点坐标遍历/缩放/镜像/求最大面积等操作(★firecat推荐★)
Halcon读取dxf文件生成xld,然后实现点坐标遍历/缩放/镜像/求最大面积等操作(★firecat推荐★)
650 0
Halcon通过difference算子实现边界提取
Halcon通过difference算子实现边界提取
571 0