MIL边缘检查实战2.0 20220307
目录
一、前言
二、识别圆,并进行圆拟合的方法
三、程序代码
四、结果显示
一、前言
在边缘检查1.0中使用了MIL中自动边缘检查,将没有形成闭环和圆环内的边缘剔除,只剩下圆环外完整的边缘。
二、识别圆,并进行圆拟合的方法
目标是获取该圆的特征,并使用圆拟合,最终使得图像显示该圆拟合结果。
想要实现拟合结果,首先需要使用Edge Finder 将相关参数进行添加,添加完成后进行计算,计算完成后找到需要显示的圆拟合后的圆,并将它与其他圆拟合出的圆的参数进行对比,找出不同。通过找出相关的不同参数,最后使得程序运行后只显示需要显示的圆拟合后的圆。
本次使用的是M_CIRCLE_FIT_RADIUS,这个是圆拟合后圆的半径像素,通过在Edge Finder中找到需要显示的圆拟合后的圆的半径像素在170至180之间,并且在次区间并没有其他圆拟合后的圆符合,于是使用M_CIRCLE_FIT_RADIUS进行判断。
与边缘检测1.0不同的是本次 MedgeControl() 的第二个参数设置为了M_CIRCLE_FIT,这个参数是圆拟合设置,通过设置圆拟合后,在计算时才会使用圆拟合计算。
MIL.MedgeControl(MilEdgeContext, MIL.M_CIRCLE_FIT, MIL.M_ENABLE);
圆拟合设置后,需要设置M_CIRCLE_FIT_RADIUS,通过设置MedgeControl() 的第二个参数设置为了M_CIRCLE_FIT_RADIUS,在最后才能剔除不需要的圆拟合后的圆。
MIL.MedgeControl(MilEdgeContext, MIL.M_CIRCLE_FIT_RADIUS, MIL.M_ENABLE);
将图像上所有的特征都进行圆拟合计算后,使用 MedgeSelect() 剔除不需要的圆。
M_EXCLUDE是排除满足指定条件的边
M_CIRCLE_FIT_RADIUS是选择对应的参数
M_LESS是小于
M_GREATER是大于
最后两个参数就是设置对应参数的值
MIL.MedgeSelect(MilEdgeResult, MIL.M_EXCLUDE, MIL.M_CIRCLE_FIT_RADIUS, MIL.M_LESS, 170,MIL.M_NULL);MIL.MedgeSelect(MilEdgeResult, MIL.M_EXCLUDE, MIL.M_CIRCLE_FIT_RADIUS, MIL.M_GREATER, 180, MIL.M_NULL);
将圆拟合后的结果显示在图像上使用 MedgeDraw() 将显示的边缘设置为M_DRAW_CIRCLE_FIT
MIL.MedgeDraw(MIL.M_DEFAULT, MilEdgeResult, GraphicList, MIL.M_DRAW_CIRCLE_FIT, MIL.M_DEFAULT, MIL.M_DEFAULT);
三、程序代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;using Matrox.MatroxImagingLibrary;namespace EdgeFindEasyNew
{public partial class Form1 : Form{private const string CONTOUR_IMAGE = "D:/Pic/EdgeFind/Easy.bmp";private static readonly int CONTOUR_DRAW_COLOR = MIL.M_COLOR_GREEN;private static readonly int CONTOUR_LABEL_COLOR = MIL.M_COLOR_RED;MIL_ID MilApplication = MIL.M_NULL; //程序标识符MIL_ID MilSystem = MIL.M_NULL; //系统标识符MIL_ID MilDisplay = MIL.M_NULL; //显示标识符MIL_ID MilImage = MIL.M_NULL; //图像缓存区标识符MIL_ID GraphicList = MIL.M_NULL; //图形列表标识符MIL_ID MilEdgeContext = MIL.M_NULL; //上下文标识符MIL_ID MilEdgeResult = MIL.M_NULL; //边缘缓冲区标识符double EdgeDrawColor = CONTOUR_DRAW_COLOR; //边缘颜色标识符double LabelDrawColor = CONTOUR_LABEL_COLOR; //标签颜色标识符double MeanFeretDiameter ;//平均直径数组double CircleC;int ox = 760;int oy = 385;int x = 400;int y = 375;public Form1(){InitializeComponent();MIL.MappAllocDefault(MIL.M_DEFAULT, ref MilApplication, ref MilSystem, ref MilDisplay, MIL.M_NULL, MIL.M_NULL);}public void EdgeFind(){MIL.MbufRestore(CONTOUR_IMAGE, MilSystem, ref MilImage);MIL.MdispSelectWindow(MilDisplay, MilImage, this.panel1.Handle);MIL.MdispControl(MilDisplay, MIL.M_SCALE_DISPLAY, MIL.M_ENABLE);MIL.MgraAllocList(MilSystem, MIL.M_DEFAULT, ref GraphicList);MIL.MdispControl(MilDisplay, MIL.M_ASSOCIATED_GRAPHIC_LIST_ID, GraphicList);MIL.MedgeAlloc(MilSystem, MIL.M_CONTOUR, MIL.M_DEFAULT, ref MilEdgeContext);MIL.MedgeAllocResult(MilSystem, MIL.M_DEFAULT, ref MilEdgeResult);MIL.MedgeControl(MilEdgeContext, MIL.M_CIRCLE_FIT, MIL.M_ENABLE);MIL.MedgeControl(MilEdgeContext, MIL.M_CIRCLE_FIT_RADIUS, MIL.M_ENABLE);MIL.MedgeControl(MilEdgeContext, MIL.M_FERET_MEAN_DIAMETER + MIL.M_SORT1_DOWN, MIL.M_ENABLE);MIL.MedgeCalculate(MilEdgeContext, MilImage, MIL.M_NULL, MIL.M_NULL, MIL.M_NULL, MilEdgeResult, MIL.M_DEFAULT);//删除不需要的圆拟合MIL.MedgeSelect(MilEdgeResult, MIL.M_EXCLUDE, MIL.M_CIRCLE_FIT_RADIUS, MIL.M_LESS, 170,MIL.M_NULL);MIL.MedgeSelect(MilEdgeResult, MIL.M_EXCLUDE, MIL.M_CIRCLE_FIT_RADIUS, MIL.M_GREATER, 180, MIL.M_NULL);MIL.MgraColor(MIL.M_DEFAULT, EdgeDrawColor);MIL.MedgeDraw(MIL.M_DEFAULT, MilEdgeResult, GraphicList, MIL.M_DRAW_CIRCLE_FIT, MIL.M_DEFAULT, MIL.M_DEFAULT);MIL.MedgeGetResult(MilEdgeResult, MIL.M_DEFAULT, MIL.M_FERET_MEAN_DIAMETER, ref MeanFeretDiameter);MIL.MedgeGetResult(MilEdgeResult, MIL.M_DEFAULT, MIL.M_CIRCLE_FIT_RADIUS, ref CircleC);textBox1.AppendText(" FeretD:" + MeanFeretDiameter + "\r\n");textBox1.AppendText(" CircleD:" + CircleC * 2 + "\r\n");}public void ClearBuffer(){//释放资源MIL.MgraFree(GraphicList);MIL.MedgeFree(MilEdgeContext);MIL.MedgeFree(MilEdgeResult);MIL.MbufFree(MilImage);MIL.MappFreeDefault(MilApplication, MilSystem, MilDisplay, MIL.M_NULL, MIL.M_NULL);}public void Form_Close(object sender, EventArgs e){ClearBuffer();}private void button1_Click(object sender, EventArgs e){EdgeFind();button1.Enabled = false;}}
}
四、结果显示
参考MIL Help
MIL边缘检查实战2.0 20220307相关推荐
- MIL边缘检查实战1.0 20220303
目录 一.边缘检查常用方法 二.MIL自带Tools Matrox Edge Finder操作 三.程序逻辑 四.程序代码 一.边缘检查常用方法 MgraAllocList 分配一个图像列表 Medg ...
- python实战1.0——爬取知乎某问题下的回复
python实战1.0--爬取知乎某问题下的回复 确定问题 爬取 进行简单筛选 保存数据 # 获取问题下的回复总数 def get_number():url = 'https://www.zhihu. ...
- R语言ggplot2可视化左对齐两个可视化图像的画图区域(边缘)实战
R语言ggplot2可视化左对齐两个可视化图像的画图区域(边缘)实战 目录 R语言ggplot2可视化左对齐两个可视化图像的画图区域(边缘)实战
- VTK:颜色边缘用法实战
VTK:颜色边缘用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkCamera.h> #include <vtkDataSetAttribute ...
- Meteor项目实战 -- Next 0.0.2
接上一篇:Meteor项目实战 -- Next 0.0.1 Get things done , and do Next Next 0.0.2版的目标是账户系统,并把任务与用户关联起来. 首先增加登录所 ...
- 大数据内功修炼到企业实战2.0
<大数据内功修炼到企业实战2.0>全新完整版!!! 无加密,免费送!!! 还有送:项目实战视频.机器学习等持续更新课程 牢记接头暗号: 大数据培训哪家强?老司机推荐十八掌! ...
- 《大数据内功修炼到企业实战2.0》全新完整版!!! 无加密,免费送!!!
<大数据内功修炼到企业实战2.0>全新完整版!!! 无加密,免费送!!! 还有送:项目实战视频.机器学习等持续更新课程 牢记接头暗号: 大数据培训哪家强?老司机推荐十八掌! 神回复:老子 ...
- 《IT十八掌大数据内功修炼到企业实战2.0》全套视频2
<IT十八掌大数据内功修炼到企业实战2.0课程>免费自学马拉松计划 1.关于十八掌 学了大数据,还是不敢找工作? 内功不够!跟随十八掌掌门徐培成炼内功! 十八掌教育努力打造一套地表最 ...
- UFIDA KSOA实施检查工具V1.0
平时维护KSOA时需要频繁进行后台打开各种方案,才能得到设置的SQL语句,操作很是繁琐,故尝试做了这么一个工具. 说明: 1.第一次运行请对KSOA库执行一下sp_helptext2中的SQL存储过程 ...
最新文章
- python复数_python复数比较
- 入门linux经典书籍--linux从入门到精通
- C++ 11 笔记 (四) : std::bind
- oracle 正则表达式拆分字符串,oracle中通过正则表达式函数处理逗号分隔的字段...
- 计算机核心配件是什么,计算机的核心是什么
- jQuery选择器之层级选择器
- 在Google Cloud Platform的K8上运行Fn函数
- 如何将SQL Server 2017主数据服务模型迁移到另一台服务器
- 键盘按钮keyCode大全
- 创建私有CA及其签署和吊销证书
- C++ 遍历 iterator has no member named
- IMCASH:2019年区块链不会风平浪静,至少还有10件事值得期待
- Qt下载(多种下载通道+所有版本)(付在线教程)
- [Maven]讲讲它的构建生命周期和拉取 jar 包流程
- 大话主流分布式文件系统!
- 机器学习项目汇总,值得收藏!
- Android之——常用手机号码功能
- java continu语句
- 一个虚拟服务器装多个网站,教你怎样用一台虚拟主机放多个网站
- Xmanager要停用时,也可以手动卸载哦!
热门文章
- java如何关闭一个浏览器网页代码_使用java代码打开关闭浏览器(指定的浏览器或者计算机默认的浏览器)...
- Cisco anyconnect secure mobility client
- 【定量分析、量化金融与统计学】统计推断基础(3)---点估计、区间估计
- Rational Purify使用
- STM32CubeMX驱动MPU6050模块
- stream流处理List
- 用小鸟云云服务器,想设置自动续费,在后台怎么开?
- 基于Java的学生综合素质评估系统的设计与实现
- win10msmpeng占内存_微软win10吃内存,CPU占用高,没有优化好?做好这3点系统快如飞...
- 四步WordPress快速建站步骤