精华内容
下载资源
问答
  • HALCON示例程序circles.hdev圆形拟合圆形 fast_threshold、clip_region_rel 、dilation_circle、edges_sub_pix 、segment_contours_xld 、count_obj 、get_contour_global_attrib_xld 、fit_circle_contour_xld ...

    HALCON示例程序circles.hdev边界轮廓的圆形拟合

    小哥哥小姐姐觉得有用点个赞呗!
    在这里插入图片描述

    示例程序源码(加注释)

    • 读入图片
      read_image (Image, ‘double_circle’)
    • 窗口初始化
      dev_close_window ()
      get_image_size (Image, Width, Height)
      dev_open_window (0, 0, Width, Height, ‘black’, WindowHandle)
    • 将区域分割出来并且去除边界
    • 快速阈值分割
      fast_threshold (Image, Region, 0, 120, 7)
    • 使用形态学运算来计算区域的边界,这里就是将图片边界提取出来
      boundary (Region, RegionBorder, ‘inner’)
    • 剪切最小外接矩形内缩的区域
      函数原型clip_region_rel(Region : RegionClipped : Top, Bottom, Left, Right : )
      Region :输入区域;RegionClipped :输出区域缩小的区域;Top, Bottom, Left, Right:内缩量
      外接矩形内缩后与原有外接矩形形成一个矩形环,就是将区域减去这个矩形环生成的区域。

      clip_region_rel (RegionBorder, RegionClipped, 5, 5, 5, 5)
    • 使用半径为2.5的圆形元素对区域进行膨胀
      dilation_circle (RegionClipped, RegionDilation, 2.5)
    • 减少图像定义域
      reduce_domain (Image, RegionDilation, ImageReduced)

    提取边缘

    • edges_sub_pix - 使用Deriche,Lanser,Shen或Canny过滤器提取亚像素精确边缘
      函数原型:edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )
      Image :输入图像;Edges :输出的边缘;Alpha:滤波器宽度;
      Low:滞后阈值操作的阈值下限;High: 滞后阈值操作的阈值上限

      edges_sub_pix (ImageReduced, Edges, ‘canny’, 2, 20, 60)
    • segment_contours_xld - 分割XLD轮廓为线段和圆弧或椭圆弧
      函数原型;segment_contours_xld(Contours : ContoursSplit :
      Mode, SmoothCont, MaxLineDist1, MaxLineDist2 : )
      Contours :输入轮廓;ContoursSplit:分割后的轮廓;Mode:轮廓分割模式;
      SmoothCont:用于平滑轮廓的点数;MaxLineDist1:轮廓与近似线之间的最大距离(第一次迭代);
      MaxLineDist2 :轮廓与近似线之间的最大距离(第二次迭代)

      segment_contours_xld (Edges, 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’)
      for I := 1 to Number by 1
      • 通过索引号选取数组内的指定元素
        select_obj (ContoursSplit, ObjectSelected, I)
      • 返回XLD轮廓的全局属性值’cont_approx’表示:对于’cont_approx’=-1,轮廓近似线段;
      • ‘cont_approx’=0,曲线近似椭圆;‘cont_approx’=1,曲线近似圆弧。
        get_contour_global_attrib_xld (ObjectSelected, ‘cont_approx’, Attrib)
      • 圆弧线段进行圆形拟合
        if (Attrib > 0)
        • fit_circle_contour_xld 对XLD轮廓进行圆弧拟合。
          fit_circle_contour_xld (ObjectSelected, ‘ahuber’, -1, 2, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
        • 绘制拟合出来的圆
          gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, rad(360), ‘positive’, 1.0)
          dev_display (ContCircle)
          endif
          endfor
    • 显示设置与显示
      dev_set_colored (12)
      dev_set_line_width (3)
      dev_display (ContoursSplit)

    处理思路

    这个例子是集边界提取、边界分割、边界拟合于一个程序,进行了实际的讲解。这个例子当中的关于xld操作的算子以后我们做边界提取、测量时会用到很多。

    后记

    大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。

    展开全文
  • read_image (Image, '截图20201226094342972.bmp') * Matching 01: BEGIN of generated code for model initialization set_system ('border_shape_models', 'false') * Matching 01: Obtain the model image ...
    read_image (Image, '截图20201226094342972.bmp')
    * Matching 01: BEGIN of generated code for model initialization
    set_system ('border_shape_models', 'false')
    * Matching 01: Obtain the model image
    * Matching 01: The image is assumed to be made available in the
    * Matching 01: variable last displayed in the graphics window
    copy_obj (Image, Image, 1, 1)
    * Matching 01: build the ROI from basic regions
    gen_rectangle1 (ModelRegion, 28.468, 280.863, 93.22, 334.675)
    * Matching 01: reduce the model template
    reduce_domain (Image, ModelRegion, TemplateImage)
    * Matching 01: create the shape model
    create_shape_model (TemplateImage, 3, rad(0), rad(0), rad(4.1992), ['none','no_pregeneration'], 'use_polarity', [10,11,4], 7, ModelId)
    * Matching 01: get the model contour for transforming it later into the image
    get_shape_model_contours (ModelContours, ModelId, 1)
    * Matching 01: END of generated code for model initialization
    * Matching 01: BEGIN of generated code for model application
    * Matching 01: the following operations are usually moved into
    * Matching 01: that loop where the aquired images are processed
    * Matching 01: Find the model
    find_shape_model (Image, ModelId, rad(0), rad(0), 0.5, 0, 0.5, 'least_squares', [3,1], 0.75, ModelRow, ModelColumn, ModelAngle, ModelScore)
    * Matching 01: transform the model contours into the detected positions
    for MatchingObjIdx := 0 to |ModelScore| - 1 by 1
        hom_mat2d_identity (HomMat)
        hom_mat2d_rotate (HomMat, ModelAngle[MatchingObjIdx], 0, 0, HomMat)
        hom_mat2d_translate (HomMat, ModelRow[MatchingObjIdx], ModelColumn[MatchingObjIdx], HomMat)
        affine_trans_contour_xld (ModelContours, TransContours, HomMat)
        dev_display (TransContours)
    endfor
    
    
    
    gen_contour_polygon_xld (Contour, ModelRow, ModelColumn)
    
    
    fit_circle_contour_xld (Contour, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
    
    gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, 6.28318, 'positive', 1)
    
    * Matching 01: Clear model when done
    clear_shape_model (ModelId)
    * Matching 01: END of generated code for model application
    

    在这里插入图片描述

    展开全文
  • 该函数使用最小二乘准则对给定的一组点(x,y)进行椭圆的最佳拟合。 This function uses the Least-Squares criterion for estimation of the best fit to an ellipse from a given set of points (x,y). LS估计是...

    在这里插入图片描述
    该函数使用最小二乘准则对给定的一组点(x,y)进行椭圆的最佳拟合。

    This function uses the Least-Squares criterion for estimation of the best fit to an ellipse from a given set of points (x,y).

    LS估计是对椭圆(可能倾斜)的二次曲线进行的。

    The LS estimation is done for the conic representation of an ellipse (with a possible tilt).

    其表达式 = ax2+b*x*y+c*y2+dx+ey+f=0。(当xy项存在(即b~=0)时,椭圆的倾斜/方向发生变化)

    Conic Ellipse representation = ax2+b*x*y+c*y2+dx+e*y+f=0

    (Tilt/orientation for the ellipse occurs when the term x*y exists (i.e. b ~= 0))

    随后,在估计过程后,从椭圆中去除倾斜(使用旋转矩阵),然后从表达式中提取描述椭圆的其余参数。

    Later, after the estimation, the tilt is removed from the ellipse (using a rotation matrix) and then, the rest of the parameters which describes an ellipse are extracted from the conic representation.

    出于调试的目的,可以在给定轴句柄的顶部绘制出估计结果。

    For debug purposes, the estimation can be drawn on top of a given axis handle.

    注意:

    Note:

    1)该函数不适用于三维轴系统。(仅适用于2D)

    1. This function does not work on a three-dimensional axis system. (only 2D)

    2)为了估计椭圆的5个参数,至少需要5个点。

    1. At least 5 points are needed in order to estimate the 5 parameters of the ellipse.

    3)如果数据表现为双曲线或抛物线,该函数返回空字段和状态指示。

    1. If the data is a hyperbola or parabula, the function return empty fields and a status indication

    完整源码下载地址:

    http://page2.dfpan.com/fs/4ldcfj32f2011219163/

    更多精彩文章请关注微信号:在这里插入图片描述

    展开全文
  • 针对叶片基元叶型建模时对前缘的椭圆形转接需求,采用最小二乘法获得椭圆初始参数值,基于此参数引入改进粒子群算法进一步求解,以点到椭圆垂直距离作为目标函数,建立椭圆参数优化数学模型,从而提高拟合精度。...
  • 三个点拟合圆形三个点怎么拟合圆形如何通过三个点求圆形

    三个点拟合圆形的函数

    函数说明

    public void FitCircleFromThreePoints(double1X, double1Y, double2X, double2Y, double3X, double3Y, out double 圆心X坐标, out double 圆心Y坐标, out double 圆形半径大小)
    
     public void FitCircleFromThreePoints(double Points1X, double Points1Y, double Points2X, double Points2Y, double Points3X, double Points3Y, out double Col, out double Row, out double Rad)
            {
                try
                {
                //先判断一下这三个点是否共线,如果共线就不求了。
                    if ((Points1X - Points2X) / (Points1Y - Points2Y) == (Points2X - Points3X) / (Points2Y - Points3Y))
                    {
                    Col = 0;
                    Row = 0;
                    Rad = 0;
                        return ;
                    }
                    //求圆形
                    double x1, y1, x2, y2, x3, y3;
                    double a, b, c, g, h, f;
                    x1 = Points1X;
                    y1 = Points1Y;
                    x2 = Points2X;
                    y2 = Points2Y;
                    x3 = Points3X;
                    y3 = Points3Y;
                    h = 2 * (x2 - x1);
                    f = 2 * (y2 - y1);
                    g = x2 * x2 - x1 * x1 + y2 * y2 - y1 * y1;
                    a = 2 * (x3 - x2);
                    b = 2 * (y3 - y2);
                    c = x3 * x3 - x2 * x2 + y3 * y3 - y2 * y2;
                    Col = (g * b - c * f) / (h * b - a * f);
                    Row = (a * g - c * h) / (a * f - b * h);
                    Rad = Math.Sqrt((Col - x1) * (Col - x1) + (Row - y1) * (Row - y1));
                }
                catch
                {
                    Col = 0;
                    Row = 0;
                    Rad = 0;
                }
            }
    

    不懂可以问我哈,底下评论留言,看到第一时间回复。觉得有用点赞哦。

    PS

    我的博客不定时分享日常工作中觉得有价值的内容,包括C#、C++、halcon、运动控制等等内容,喜欢的点赞,关注我。

    展开全文
  • 针对矢量型线要素图幅接边中常常出现的由于边界要素间距离计算量大导致程序效率低的问题,提出了一种基于距离匹配和趋势增强的圆形区域拟合匹配接边算法。该算法利用边界线缓冲区来获取候选匹配要素集,然后通过为...
  • public bool FitCircle(double[] X, double[] Y, out double RcX, out double RcY, out double R) { try { HTuple hTuple = new HTuple(); HTuple hTuple2 = new HTuple(); int num = 0;...
  • 在地铁隧道洞口测量中,经常要对空间圆形...小博参考李英硕等人在文献《空间圆形拟合检测新方法》提出的一种实用的空间圆形拟合检测新方法: “根据空间圆中任意两条弦所对应的中垂面与空间圆所处 的平面必然相交且...
  • 面向PCB圆形基准点的权重式椭圆拟合定位方法.pdf
  • 原图 源码 read_image (Image, '0.bmp') dev_clear_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image) binary_threshold (Image, Region, 'max_separability', '...
  • Contours(in):输入轮廓Algorithm(in):拟合圆的算法MaxNumPoints(in):用于计算的最大轮廓点个数MaxClosureDist(in):一个轮廓的末尾点最大间距被认为是闭合ClippingEndPoints(in):在逼近过程中被忽略的开始及末尾...
  • 椭圆拟合

    千次阅读 2020-12-04 12:09:32
    使用线性最小二乘法将椭球/球面/抛物面/双曲面拟合到数据。 将椭圆形或其他圆锥形曲面拟合到逼近该曲面的3D点集中,允许一些约束,如方向约束和相等半径约束。例如,您可以使用它来装橄榄球或球体。 椭圆的...
  • 利用多个点拟合

    2021-01-29 21:00:19
    给定多个点,根据最小二乘原理,可以拟合出一个圆形拟合的精度很高, 给定多个点,根据最小二乘原理,可以拟合出一个圆形拟合的精度很高,
  • OpenCV根据轮廓查找精准定位圆形

    千次阅读 热门讨论 2019-12-20 08:40:21
    经过多次试验,发现利用OpenCV的霍夫圆变换查找出来的圆,其圆心位置并不准确,而且参数调节较为麻烦。于是想到利用轮廓查找的方式来进行圆检测,我们可以通过判断轮廓的外接...圆形拟合。代码如下,仅供参考。 ...
  • OpenCV曲线拟合与圆拟合

    千次阅读 2020-08-10 17:12:36
    使用OpenCV做图像处理与分析的时候,经常会遇到需要进行曲线拟合与圆拟合的场景,很多OpenCV开发者对此却是一筹莫展,其实OpenCV中是有现成的函数来实现圆拟合与直线拟合的,而且还会告诉你拟合的圆的半径是多少,...
  • 圆形标记法代码matlab 图像处理 从ANDOR Zyla和Basler检测器读取帧。 计算质心,二维高斯拟合参数,FFT,PSD和散点统计 先决条件 需要Matlab和Matlab曲线拟合工具箱。 对于本机ANDOR文件(.sifx,.sif),需要MATLAB...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,041
精华内容 2,416
关键字:

圆形拟合