Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明

简介: Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明

一、边缘提取


1、设置ROI兴趣区域

2、快速二值化,并连接相邻区域。

这样做的目的是进一步减少目标区域,通过二值化将目标区域大概轮廓提取出来

3、提取最接近目标区域的轮廓

常用函数有boundary,gen_contour_region_xld


boundary(获取一个区域的边界)

Region (input_object)      Regions for which the boundary is to be computed.    区域

RegionBorder (output_object)    Resulting boundaries.    输出的边界

BoundaryType (input_control)    

Boundary type.边界类型

Default value: 'inner'

List of values: 'inner', 'inner_filled', 'outer'


linner    内边界。

inner_filled    内边界上的孔。

outer    外边界。


gen_contour_region_xld(生成区域的XLD轮廓)


4、根据自需求提取需要的初步轮廓

5、将初步提取的初步轮廓进行膨胀操作

6、将膨胀后的区域和原图进行减操作(在这步之前有可能需要对原图进行高斯滤波)。这样就能得到只有边缘的真实图像


7、用canny或其他算子(根据需要)提取亚像素轮廓,一般使用edges_sub_pix函数


8、处理和计算

得到真实的边缘XLD后你可能需要进一步处理得到你想要的线、弧等。

你可能用到的函数segment_contours_xld(分割)  union_collinear_contours_xld(联合相邻或相同

角度直线)select_contours_xld(提取想要的轮廓)smooth_contours_xld(平滑轮廓) union_cocircular_contours_xld(联合相同圆)

等等。得到轮廓后如果你不知道怎么处理后得到你想要的东西(线、弧、圆、角、矩形)你都可以将轮廓转化为点,然后用点集合来拟合任何你想要的东西。


二、BLOB分析检测

(1)应用ROI,可以使Blob分析加速。

(2)匹配ROI区域或图像,详将GUIDEIIB以形状为基础的匹配。

(3)校正图像<经常用来去除镜头畸变或把图像转换到参考点视角,如双目视觉时的图像校正>

(4)图像前处理

(5)引用分割参数

(6)分割图像

(7)区域处理

(8)特征提取

(9)把提取的结果转换到世界坐标中

(10)结果可视化。


相机的标定和矫正不在本篇的学习之中。直接讲提取BLOB


1、一般先使用均值滤波去噪


2、利用去噪图像与平滑图像的OFFSET提取区域边缘,常见函数dyn_threshold


3、提取连通域dyn_threshold


4、根据形状或是灰度等特征来提取你想要的blob。

另一种方法就是分水岭算法

watersheds (ImageGauss, Basins, Watersheds)/


还有的图形更简单直接二值化就可以啦

bin_threshold (Fin, Dark) //分割图像,输出Dark区域,Fin已经被处理为区域// 老版本算子


binary_threshold (Green, Region, 'max_separability', 'dark', UsedThreshold) 新版本算子

connection(Region, ConnectedRegions)

select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 50000, 999999)

fill_up (SelectedRegions, RegionFillUp)

difference (Fin, Dark, Background) //计算Fin与Dark两个区域的补集//

还有个函数应该说是让你高兴还是沮丧呢,以为一个函数就可以直接提取你想要的,但是参数很难调整

lines_gauss(Image, Lines, 6, 0.3, 0.5, 'light', 'true', 'gaussian', 'true')



三、赃物检测

1、得到两个不同高斯标准差的高斯积卷

2、对原始图像进行傅里叶变换'to_fre'

3、用之前的积卷对图像做积卷滤波

4、傅里叶反变换‘from_fre’



四、不规则图形的转换,shape_trans


region操作:

选择相应区域


select_shape(regions,output,'select type',..requirements)

计算相应区域的面积,中心坐标:


area_center(regions,area,row,column)

不规则区域的转换:


shape_trans(region,regiontrans,type)

image.png


convex hull凸包围(由外向内包围)


outer_circle 外圆(能够包括对象的半径最小的圆形)


inner_circle 内圆


rectangle1 正矩形


rectangle2 最小包围矩形


inner_rectangle1 最大内矩形



---


参考文献


https://blog.csdn.net/C_gyl/article/details/96326913


相关文章
|
2月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
528 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
算法 数据可视化
Halcon边缘检测和线条检测(1),文章含自适应/动态二值化等算子
Halcon边缘检测和线条检测(1),文章含自适应/动态二值化等算子
1635 0
|
2月前
|
Serverless 计算机视觉
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
这篇文章介绍了如何使用OpenCV库通过mask图像绘制分割对象的外接椭圆。首先,需要加载mask图像,然后使用`cv2.findContours()`寻找轮廓,接着用`cv2.fitEllipse()`拟合外接椭圆,最后用`cv2.ellipse()`绘制椭圆。文章提供了详细的代码示例,展示了从读取图像到显示结果的完整过程。
70 0
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
|
2月前
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
94 0
|
C++ Python
pcl/pcd/liblas点云强度intensity反射图像过滤显示
pcl/pcd/liblas点云强度intensity反射图像过滤显示
388 0
pcl/pcd/liblas点云强度intensity反射图像过滤显示
|
计算机视觉
OpenCV-扩充图像边界cv::copyMakeBorder
OpenCV-扩充图像边界cv::copyMakeBorder
185 0
|
文字识别 监控 算法
Baumer工业相机堡盟相机使用BGAPISDK联合Halcon直接进行彩色图像显示(Color)(C#)(将图像数据Buffer转为HObject)
Baumer工业相机堡盟相机使用BGAPISDK联合Halcon直接进行彩色图像显示(Color)(C#)(将图像数据Buffer转为HObject)
160 0
|
API 计算机视觉 索引
OpenCV_02 图像的基本操作:图像IO+绘制图形+像素点+属性+图像通道+色彩空间的改变
注意:在调用显示图像的API后,要调用cv.waitKey()给图像绘制留下时间,否则窗口会出现无响应情况,并且图像无法显示出来。
110 0
|
编解码 计算机视觉
CV13 图像分辨率操作(图像金字塔与resize()函数)
其中,高斯核卷积运算就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值(券种不同)经过加权平均后得到。常见的 33与 55 高斯核(CV9 2D卷积与图像滤波)
217 0
|
API 计算机视觉
OpenCV 像素重映射(cv::remap)
OpenCV 像素重映射(cv::remap)
638 0
OpenCV 像素重映射(cv::remap)
下一篇
DataWorks