当前位置:网站首页>项目实战 五 拟合直线 获得中线
项目实战 五 拟合直线 获得中线
2022-07-07 02:03:00 【Σίσυφος1900】
一、简介
项目中常见的最常见的拟合一般多是拟合直线和拟合圆,但是我个人最初在自学halcon 的时候总是一看到类似直线的东西就直接拟合,一看到类似圆的东西就直接拟合圆,但是我们在做项目的时候要有很多的禁忌,要考虑到很多的东西,所以要让算法有更强的兼容性,下面我们来一起看一这个拟合直线如何拟合:
1、传入一张图片,和一个ROI
2、使用二维卡尺找出拟合直线的点(这一步很重要)
3、从第二步的点来拟合圆,但是我们会设点一个点到直线的最小距离,用这个距离来判断直线的拟合优越性,删除掉一些到跳点,防止一些个别点导致拟合直线不理想的问题
4、输出
从上面我们可以得到一条 或者多条直线,那如果是求出两条直线的中线,如何来求呢?
1 、首先传入两条中线
2、判断这两天直线的角度以及这两天直线是不是相交
3、如果相交,求直线上(线段的端点)在另外一条直线上的投影点,直接取中点,同理求另外一个端点的投影,求中点,连起来就是中线
4、如果有相交,那么这个就比较复杂点,首先我们要计算两个端点(直线出入的端点)到2 中计算得出的点到点的距离d1 d2
5、然后以2中的交点(假设r,c)r,c,d1 以及r,c,d2画圆,然后计算另外一条直线与这两个圆之间的交点
6、上图中的两个端点就是我们最想要的两个点
7、最后输出
二、拟合直线
核心代码:
* 使用二维测量来找点
create_metrology_model (MetrologyHandle)
*设置句柄模型的大小
set_metrology_model_image_size (MetrologyHandle, Width, Height)
add_metrology_object_generic (MetrologyHandle, 'line', [Row1,Col1,Row2,Col2], Len2[Len2Index], RectWidth[RectWidthIndex], Sigma[SigmaIndex], Threshold[ThresholdIndex], [], [], temp)
* 设置参数
set_metrology_object_param (MetrologyHandle, 'all', ['measure_transition','num_measures','measure_select'], [Transtion[TransitionIndex], Count[CountIndex], Select[SelectIndex]])
* set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', Select[SelectIndex])
*使用参数
apply_metrology_model (Image, MetrologyHandle)
* 得到结果
get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Rows, Columns)
gen_cross_contour_xld (Cross1, Rows, Columns, 6, 0.78)
clear_metrology_model (MetrologyHandle)
*拟合直线
fit_line_contour_xld (Contour, 'drop', -1, 0, 5, 2, TempRowBegin, TempColBegin, TempRowEnd, TempColEnd, TempNr, TempNc, TempDist)
* 计算拟合的直线和点之间的距离
distance_pl (Rows, Columns, TempRowBegin, TempColBegin, TempRowEnd, TempColEnd, Distance)
tuple_max (Distance, Max)
* 在联系的删除点中是不是有足够的点来拟合
* 删除max/2的点
if(Max < MinDist[MinDistIndex])
break
endif
* 删除不符合点到直线距离的点
tuple_less_elem (Distance, Max/2, Less)
tuple_find (Less, 0, Indices)
tuple_remove (Rows, Indices, ValidRows)
tuple_remove (Columns, Indices, ValidCols)
三、获得中线
核心代码:
*求直线和圆的交叉点
gen_circle_contour_xld (ContCircle, Row, Column, Distance1, 0, 6.28318, 'positive', 1)
gen_circle_contour_xld (ContCircle2, Row, Column, Distance2, 0, 6.28318, 'positive', 1)
intersection_line_circle (line2[0], line2[1], line2[2], line2[3], Row, Column, Distance1, 0, 6.28318, 'positive', Row1, Column1)
intersection_line_circle (line2[0], line2[1], line2[2], line2[3], Row, Column, Distance2, 0, 6.28318, 'positive', Row2, Column2)
* 显示交点
边栏推荐
猜你喜欢
测试开发基础,教你做一个完整功能的Web平台之环境准备
693. Travel sequencing
Redis (I) -- getting to know redis for the first time
【GNN】图解GNN: A gentle introduction(含视频)
Developers don't miss it! Oar hacker marathon phase III chain oar track registration opens
Doctoral application | Professor Hong Liang, Academy of natural sciences, Shanghai Jiaotong University, enrolls doctoral students in deep learning
雷特智能家居龙海祁:从专业调光到全宅智能,20年专注成就专业
Go straight to the 2022ecdc fluorite cloud Developer Conference: work with thousands of industries to accelerate intelligent upgrading
Rk3399 platform development series explanation (WiFi) 5.53, hostapd (WiFi AP mode) configuration file description
How to use wechat cloud hosting or cloud functions for cloud development of unapp development applet
随机推荐
C interview 24 (pointer) define a double array with 20 elements a
Ideas of high concurrency and high traffic seckill scheme
请问如何查一篇外文文献的DOI号?
[Shell]常用shell命令及测试判断语句总结
693. 行程排序
[FPGA] EEPROM based on I2C
程序员的日常 | 每日趣闻
Knight defeats demon king (Backpack & DP)
Calculation model FPS
3531. 哈夫曼树
牛客小白月赛52 E.分组求对数和(二分&容斥)
力扣62 不同路径(从矩阵左上到右下的所有路径数量) (动态规划)
Change the original style of UI components
What are the classic database questions in the interview?
屏幕程序用串口无法调试情况
UIC(组态UI工程)公版文件库新增7款行业素材
Symmetric binary tree [tree traversal]
Jstack of JVM command: print thread snapshots in JVM
Experience sharing of contribution of "management world"
基于FPGA的VGA协议实现