直线、圆、椭圆的相关几何参数测量
文章来源于
https://cloud.tencent.com/developer/article/1474495
==========================================================
MeasureLength2=3时,
代码:
1 *公众号:机器视觉那些事儿 2 *1. 算法功能:测量钻石边缘的夹角 3 *2. 算法思路: 4 * (1)初始化* 5 *读图,提取ROI区域图像* 6 *创建测量线模型* 7 *设置测量ROI,设置计量模型参考坐标系 8 * (2)应用计量对象,得到测量结果 9 * *显示初始化 10 * *将当前测量对象与计量模型对齐 11 * *应用计量对象模型 12 * *得到计量结果 13 * *计算夹角 14 * (3)结果显示 15 * *可视化轮廓线 16 * *可视化线夹角圆弧 17 * *可视化测量区域 18 * --------------- (1)初始化----------------------- 19 *---------------显示初始化------------ 20 * 初始化显示参数 21 dev_update_off () 22 dev_close_window () 23 read_image (Image, 'diamond/diamond_01') 24 dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) 25 set_display_font (WindowHandle, 16, 'mono', 'true', 'false') 26 get_image_size (Image, Width, Height) 27 *---------------创建测量线模型------------ 28 * 创建计量模型数据结构 29 create_metrology_model (MetrologyHandle) 30 *图像大小是预先设置的,以加快第一次调用apply_metrology_modelset_metrology_model_image_size (MetrologyHandle, Width, Height) 31 * 确定计量线对象的参数 32 LineRow1 := [155,155] 33 LineColumn1 := [400,400] 34 LineRow2 := [290,290] 35 LineColumn2 := [230,570] 36 Tolerance := 20
37 * * 增加两个线模型,并设置参数 38 add_metrology_object_line_measure (MetrologyHandle, LineRow1, LineColumn1, LineRow2, LineColumn2, Tolerance, 10, 1, 20, [], [], Index1) 39 *---------------设置测量ROI,设置计量模型参考坐标系------------ 40 * 创建匹配感兴趣区域 41 gen_rectangle1 (Rectangle, LineRow1[0] - 40, LineColumn1[0] - 50, LineRow1[0] + 20, LineColumn1[0] + 50) 42 *更改计量模型的参考坐标系 43 reduce_domain (Image, Rectangle, ImageReduced) 44 threshold (ImageReduced, Region, 128, 255) 45 get_region_points (Region, Rows, Columns) 46 set_metrology_model_param (MetrologyHandle, 'reference_system', [Rows[0],Columns[0],0]) 47 * * 主循环* 48 for I := 1 to 5 by 1 49 *---------------(2)应用计量对象,得到测量结果------------ 50 *读图,提取ROI区域图像 51 read_image (Image, 'diamond/diamond_' + I$'02') 52 * 粗略地分割钻石顶部位置 53 reduce_domain (Image, Rectangle, ImageReduced) 54 threshold (ImageReduced, Region, 128, 255) 55 *将当前测量对象与计量模型对齐 56 *提取钻石顶部区域点坐标 57 get_region_points (Region, Rows, Columns) 58 *将当前测量对象对齐计量模型 59 *在应用apply_metrology_model之前需要调用此算子 60 align_metrology_model (MetrologyHandle, Rows[0], Columns[0], 0) 61 *应用计量对象模型 62 * 定位计量对象的边缘 63 apply_metrology_model (Image, MetrologyHandle) 64 *得到计量结果 65 *获取两条线的始终坐标 66 get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', LineParameter) 67 *计算夹角 68 *计算两条线之间的夹角 69 angle_ll (LineParameter[0], LineParameter[1], LineParameter[2], LineParameter[3], LineParameter[4], LineParameter[5], LineParameter[6], LineParameter[7], Angle) 70 Angle := deg(Angle) 71 * --------------- (3)结果显示----------------------- 72 *可视化轮廓线 73 * 得到结果线轮廓 74 get_metrology_object_result_contour (ResultContour, MetrologyHandle, 'all', 'all', 1.5) 75 *计算线交点 76 intersection_lines (LineParameter[0], LineParameter[1], LineParameter[2], LineParameter[3], LineParameter[4], LineParameter[5], LineParameter[6], LineParameter[7], Row, Column, IsOverlapping1) 77 * 计算两条线的方向 78 line_orientation (LineParameter[0], LineParameter[1], LineParameter[2], LineParameter[3], Orientation1) 79 if (Orientation1 > 0) 80 Orientation1 := Orientation1 - rad(180) 81 endif 82 line_orientation (LineParameter[4], LineParameter[5], LineParameter[6], LineParameter[7], Orientation2) 83 * *可视化线夹角 84 * 可视化两条线之间的角度 85 *生成线之间的夹角圆弧 86 gen_circle_contour_xld (ContCircle, Row, Column, 100, Orientation1, Orientation2, 'positive', 1) 87 *可视化测量区域 88 *获取到测量区域和测量点 89 get_metrology_object_measures (Contour, MetrologyHandle, 'all', 'all', MRow, MColumn) 90 gen_cross_contour_xld (Cross, MRow, MColumn, 6, rad(45)) 91 * 显示所有内容 92 dev_display (Image) 93 dev_set_line_width (1) 94 dev_set_color ('yellow') 95 dev_display (Contour) 96 dev_display (Cross) 97 dev_set_line_width (2) 98 dev_set_color ('green') 99 dev_display (ResultContour) 100 dev_set_color ('blue') 101 dev_display (ContCircle) 102 disp_message (WindowHandle, 'Angle = ' + Angle$'.5' + '°', 'window', 12, 12, 'black', 'true') 103 if (I < 5) 104 disp_continue_message (WindowHandle, 'black', 'true') 105 endif 106 stop () 107 endfor 108 * 释放内存 109 clear_metrology_model (MetrologyHandle)
算子学习:
增加直线对象到计量模型中
add_metrology_object_line_measure( : : MetrologyHandle, RowBegin, ColumnBegin, RowEnd, ColumnEnd, MeasureLength1, MeasureLength2, MeasureSigma, MeasureThreshold, GenParamName, GenParamValue : Index)
MetrologyHandle:计量模型,使用create_metrology_model创建。
RowBegin,ColumnBegin, RowEnd, ColumnEnd:直线的起始和终止坐标
MeasureLength1:垂直于绿色线的黄色辅助线的一般的长度
MeasureLength2:小于MeasureLength1,太小后续会呈现一个个单独的矩形框,见上图3
MeasureSigma:
MeasureThreshold:最小边缘阈值
未完待续
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具