目录

一、前言

二、识别圆,并进行圆拟合的方法

三、程序代码

四、结果显示


一、前言

在边缘检查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相关推荐

  1. MIL边缘检查实战1.0 20220303

    目录 一.边缘检查常用方法 二.MIL自带Tools Matrox Edge Finder操作 三.程序逻辑 四.程序代码 一.边缘检查常用方法 MgraAllocList 分配一个图像列表 Medg ...

  2. python实战1.0——爬取知乎某问题下的回复

    python实战1.0--爬取知乎某问题下的回复 确定问题 爬取 进行简单筛选 保存数据 # 获取问题下的回复总数 def get_number():url = 'https://www.zhihu. ...

  3. R语言ggplot2可视化左对齐两个可视化图像的画图区域(边缘)实战

    R语言ggplot2可视化左对齐两个可视化图像的画图区域(边缘)实战 目录 R语言ggplot2可视化左对齐两个可视化图像的画图区域(边缘)实战

  4. VTK:颜色边缘用法实战

    VTK:颜色边缘用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkCamera.h> #include <vtkDataSetAttribute ...

  5. Meteor项目实战 -- Next 0.0.2

    接上一篇:Meteor项目实战 -- Next 0.0.1 Get things done , and do Next Next 0.0.2版的目标是账户系统,并把任务与用户关联起来. 首先增加登录所 ...

  6. 大数据内功修炼到企业实战2.0

    <大数据内功修炼到企业实战2.0>全新完整版!!!  无加密,免费送!!!   还有送:项目实战视频.机器学习等持续更新课程 牢记接头暗号:     大数据培训哪家强?老司机推荐十八掌! ...

  7. 《大数据内功修炼到企业实战2.0》全新完整版!!! 无加密,免费送!!!

    <大数据内功修炼到企业实战2.0>全新完整版!!!  无加密,免费送!!! 还有送:项目实战视频.机器学习等持续更新课程 牢记接头暗号: 大数据培训哪家强?老司机推荐十八掌! 神回复:老子 ...

  8. 《IT十八掌大数据内功修炼到企业实战2.0》全套视频2

    <IT十八掌大数据内功修炼到企业实战2.0课程>免费自学马拉松计划   1.关于十八掌 学了大数据,还是不敢找工作?  内功不够!跟随十八掌掌门徐培成炼内功! 十八掌教育努力打造一套地表最 ...

  9. UFIDA KSOA实施检查工具V1.0

    平时维护KSOA时需要频繁进行后台打开各种方案,才能得到设置的SQL语句,操作很是繁琐,故尝试做了这么一个工具. 说明: 1.第一次运行请对KSOA库执行一下sp_helptext2中的SQL存储过程 ...

最新文章

  1. python复数_python复数比较
  2. 入门linux经典书籍--linux从入门到精通
  3. C++ 11 笔记 (四) : std::bind
  4. oracle 正则表达式拆分字符串,oracle中通过正则表达式函数处理逗号分隔的字段...
  5. 计算机核心配件是什么,计算机的核心是什么
  6. jQuery选择器之层级选择器
  7. 在Google Cloud Platform的K8上运行Fn函数
  8. 如何将SQL Server 2017主数据服务模型迁移到另一台服务器
  9. 键盘按钮keyCode大全
  10. 创建私有CA及其签署和吊销证书
  11. C++ 遍历 iterator has no member named
  12. IMCASH:2019年区块链不会风平浪静,至少还有10件事值得期待
  13. Qt下载(多种下载通道+所有版本)(付在线教程)
  14. [Maven]讲讲它的构建生命周期和拉取 jar 包流程
  15. 大话主流分布式文件系统!
  16. 机器学习项目汇总,值得收藏!
  17. Android之——常用手机号码功能
  18. java continu语句
  19. 一个虚拟服务器装多个网站,教你怎样用一台虚拟主机放多个网站
  20. Xmanager要停用时,也可以手动卸载哦!

热门文章

  1. java如何关闭一个浏览器网页代码_使用java代码打开关闭浏览器(指定的浏览器或者计算机默认的浏览器)...
  2. Cisco anyconnect secure mobility client
  3. 【定量分析、量化金融与统计学】统计推断基础(3)---点估计、区间估计
  4. Rational Purify使用
  5. STM32CubeMX驱动MPU6050模块
  6. stream流处理List
  7. 用小鸟云云服务器,想设置自动续费,在后台怎么开?
  8. 基于Java的学生综合素质评估系统的设计与实现
  9. win10msmpeng占内存_微软win10吃内存,CPU占用高,没有优化好?做好这3点系统快如飞...
  10. 四步WordPress快速建站步骤