【halcon】轮廓拟合相关算子

news2024/11/27 4:17:15

涉及函数

edges_sub_pix

寻找边缘

edges_sub_pix (Image, Edges, 'canny', 1, 10, 20)

后面三个参数,越小,找到的细节越多。这个是对应录波器为'canny'时。

'canny'滤波器用的最多。

segment_contours_xld

将连续的轮廓进行分段,按圆弧或者执行分段
segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 3)

经过这个函数之后,就不会存在直线和圆弧的其他种类的线条。比如折线就不存在了!

折线会被打断成两条直线。

select_contours_xld

对轮廓的某个特征进行筛选:

select_contours_xld (ContoursSplit, SelectedContours, 'contour_length', 120, 300000, -0.5, 0.5)

union_adjacent_contours_xld

将相近的轮廓合并成一个轮廓。
union_adjacent_contours_xld (SelectedContours, UnionContours, 100, 1, 'attr_keep')

参数中的100表示只要距离相近100以内就连起来。

fit_circle_contour_xld

将轮廓拟合成圆弧
fit_circle_contour_xld (ObjectSelected, 'ahuber', -1, 2, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)

前面的参数基本都使用默认即可,后面的: Row, Column, Radius, StartPhi, EndPhi, PointOrder,均为输出参数。

利用输出的 Row, Column, Radius,可以根据圆弧生成完整的圆轮廓:

gen_circle_contour_xld (ContCircle, row, column, radius, 0, rad(360), 'positive', 1.0)

circularity_xld

可获取轮廓的圆度:

circularity_xld(ObjectSelected, Circularity)

length_xld

可获取轮廓的长度
length_xld (ObjectSelected, Length)

get_contour_global_attrib_xld

get_contour_global_attrib_xld (ObjectSelected, 'cont_approx', Attrib)
但是这个函数使用时要注意,所有的轮廓必须先 使用 segment_contours_xld 进行分段。

比如如果有个折线,调用 get_contour_global_attrib_xld 就会报错!Contour attribute not defined

这是因为折线不属于圆弧椭圆弧以及直线。

特别是使用了 union_adjacent_contours_xld  之后注意一定要 使用 segment_contours_xld  进行打断,然后才能使用 get_contour_global_attrib_xld。

结果展示

使用以上函数就能将圆识别到 

原始图
标题

圆形拟合

思路

先通过edges_sub_pix 找到边缘轮廓,过滤掉一些直线以及短的。将剩下的圆弧轮廓进行联合(更长的圆形轮廓有助于拟合出更准确的圆)从联合后的轮廓中选出最长的,进行拟合圆:

dev_close_window()
dev_update_off ()
read_image (Image, 'D:/视觉图片资料/13.jpg')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
edges_sub_pix (Image, Edges, 'canny', 1, 10, 20)
*将连续的轮廓进行分段,按圆弧或者执行分段
segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 3)
select_contours_xld (ContoursSplit, SelectedContours, 'contour_length', 120, 300000, -0.5, 0.5)


*合并较近的轮廓
union_adjacent_contours_xld (SelectedContours, UnionContours, 100, 1, 'attr_keep')
segment_contours_xld (UnionContours, ContoursSplit, 'lines_circles', 5, 4, 3)
count_obj (ContoursSplit, Number)
dev_display (Image)
dev_set_draw ('margin')
dev_set_color ('white')
dev_update_window ('off')

length := 0
select := 0
row:= 0 
column:= 0 
radius:= 0
gen_empty_obj (EmptyObject)
for I := 1 to Number by 1
    select_obj (ContoursSplit, ObjectSelected, I)
    get_contour_global_attrib_xld (ObjectSelected, 'cont_approx', Attrib)
    * 该值如果大于0,说明为圆弧。
    if (Attrib > 0) 
        concat_obj (ObjectSelected,EmptyObject , EmptyObject)
        fit_circle_contour_xld (ObjectSelected, 'ahuber', -1, 2, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
        *circularity_xld(ObjectSelected, Circularity)
        length_xld (ObjectSelected, Length)
        if(Length > length)
             length := Length   
             row:=Row
             column:=Column
             radius:=Radius
             select := I
        endif
        
    endif
    
endfor




select_obj (ContoursSplit, ObjectSelected, select)
gen_circle_contour_xld (ContCircle, row, column, radius, 0, rad(360), 'positive', 1.0)
dev_display (ContCircle)

dev_set_colored (12)
dev_set_line_width (3)
dev_display (SelectedContours)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/402780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JUC(七)

1.线程安全集合类 1>.线程安全集合类可以分为三大类: ①.遗留的(/旧的)线程安全集合,如:Hashtable,Vector; ②.使用Collections装饰的线程安全集合,如: Collections.synchronizedCollectionCollections.synchronizedListCollections.synchronizedMapCollections.synchroniz…

window通过wsl启动appsmith源码

window通过wsl启动appsmith前端后端前言appsmith前端本地启动WSL安装下载ubuntu升级wsl到wsl2ubuntu安装环境环境要求Ubuntu环境配置node下载解压运行[源码](https://www.appsmith.com/)本地访问后端appsmith后台本地启动启动mongo、rediswsl ubuntu中启动后台试试流程总结最后…

缓存双写一致性之更新策略探讨

问题由来 数据redis和MySQL都要有一份,如何保证两边的一致性。 如果redis中有数据:需要和数据库中的值相同如果redis中没有数据:数据库中的值是最新值,且准备会写redis 缓存操作分类 自读缓存读写缓存: &#xff0…

关于vuex的使用

1.首先安装vuex npm install vuex --save 这时如果直接安装vuex,不指定版本的话,就会直接安装最新的vuex的版本。所以会出现报错。 报错就安装这个 npm install --save vuex3 2.创建文件夹, 有的时候安装好会自动创建vuex的文件夹 &#xf…

Python解题 - CSDN周赛第35期 - 不算题解的题解

本期四道题还是全考过,题解在网上也都搜得到。。。只好继续水一份不算题解的题解。 第一题:交换后的or 给定两组长度为n的二进制串,请问有多少种方法在第一个串中交换两个不同位置上的数字,使得这两个二进制串“或”的结果发生改…

案例01-修改数据redis没有同步更新

目录 一:背景介绍 二:思路&方案 三:过程 1.修改数据没有删除缓存 2.修改数据删除了缓存 四:总结 五:升华 一:背景介绍 redis中存储了关于一个课程下多个班级的信息。但是难免会在一个课程下添加新…

pandas 数据预处理+数据概览 处理技巧整理(持续更新版)

这篇文章主要是整理下使用pandas的一些技巧,因为经常不用它,这些指令忘得真的很快。前段时间在数模美赛中已经栽过跟头了,不希望以后遇到相关问题的时候还去网上查(主要是太杂了)。可能读者跟我有一样的问题&#xff0…

程序员养发神器:拒绝加班熬夜,告别秃头!

身为一个程序员,每天的工作就是写代码和吹牛逼,但是代码写多了,都没有多少让自己吹的时间了。摸鱼时间少是我们太菜了吗?可不要小瞧自己,可能是你没掌握方法。 我自己本身就是一个十分疯狂的工具收集者,收…

实在智能RPA数字员工竞技“宝罗杯”机器人创新总决赛,斩获佳绩!

近日,由中国钢铁工业协会和中国自动化学会指导,中国宝武钢铁集团有限公司主办、宝信软件承办的机器人行业领域的“宝罗杯”机器人创新大赛总决赛在中国宝武上海总部圆满收官。 此次大赛旨在充分凝聚社会智力,聚焦工业机器人的应用场景&#x…

es深度分页原因概念及处理方法

概述 当使用es分页查询的时候,如果查询的数据太靠后了,就会产生深度分页问题。 假设es有3个节点,node1,node2,node3 查询 limti 50000,50 假设请求的是node1,此时会在每个节点上抓出 50050条数据,然后在node1汇总排序&#xff0…

【设计模式】装饰器模式

装饰器模式 以生活中的场景来举例,一个蛋糕胚,给它涂上奶油就变成了奶油蛋糕,再加上巧克力和草莓,它就变成了巧克力草莓蛋糕。 像这样在不改变原有对象的基础之上,将功能附加到原始对象上的设计模式就称为装饰模式(D…

如何查看磁盘空间并挂载磁盘

df -h内容参数含义Filesystem文件系统Size分区大小1k-blocks单位是1KB(使用df查看)Used已用容量Avail还可用的容量Use%已用百分比Mounted on挂载点du -h查看某目录下占用空间最多的文件或目录。取前10个。需要先进入该目录下。du -cks * | sort -rn | head -n 10参数含义-s对每…

腾讯游戏,“迷失”自己

【潮汐商业评论/原创】“那个号我忘记密码了,你等我换个新号跟你玩”。这是Lynn《王者荣耀》双排队友常说的话。因为未成年,账号只有周末能玩,而且只有两小时。所以Lynn的这位网友,经常用家长的手机号注册游戏账号,但是…

Yarn调度器和调度算法

目录 1 先进先出调度器(FIFO) 2 容量调度器(Capacity Scheduler) 3 公平调度器(Fair Scheduler) 缺额: 公平调度器队列资源分配方式 公平调度器资源分配算法 Hadoop作业调度器主要有三种&…

分库分表原理

一、数据库瓶颈 会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。 IO瓶颈-分库和垂直分表…

探索测试的一些总结

1)探索性测试与脚本化测试的主要区别:1)探索性测试将更多更高的认知水平的工作放在测试执行,而脚本化测试则更关注测试设计;2)前者更强调测试活动的并行和相互反馈(学习、设计、执行与结果分析等),而后者的测试活动是相对串行的。 2)脚本化测…

Grafana系统的备份、恢复、迁移

Grafana系统的备份、恢复、迁移 1. 备份Grafana相关数据 首先先关闭Grafana服务(systemctl stop grafana-server),到目录下备份以下文件或者目录: 备份grafana目录中的grafana.db(一般情况下路径:/var/l…

电子技术——数字IC技术,逻辑电路和设计方法

电子技术——数字IC技术,逻辑电路和设计方法 在我们之前的学习中,我们学习了CMOS技术,然而CMOS技术并不是唯一的数字逻辑技术,因此,本节系统的介绍当今使用的数字技术和逻辑电路族。 数字IC技术和逻辑电路族 逻辑电…

k8s--services(微服务)

文章目录一、k8s网络通信service和iptables的关系二、services1.简介2.默认3.IPVS模式的service4.clusterip5.headless6.从外部访问service的三种方式(1)nodeport(2)loadbalancer7.metallb一、k8s网络通信 k8s通过CNI接口接入其他…

tf_nndistancen 安装

为了评估MMD,断断续续装了4天,踩了几乎所有的坑,终于装上了QAQ 1. 库链接:pointnet-autoencoder/tf_ops/nn_distance at master charlesq34/pointnet-autoencoder GitHub 2. 安装TensorFlow,我的环境是cuda 11.5 ,…