二维测量:找线,带角度跟随(add_metrology_object_line_measure)

今天有个网友问到这个add_metrology_object_line_measure算子没有角度参数,怎么做roi跟随。

勇哥网站上搜索了一下,还真没有写过这样的贴子,因此制作了一个小例子,给有需要的朋友参考。


image.png

image.png


代码比较简单。

用了形态模板匹配来定位roi位置。第一张图用来定义了模板。

中间那几个变量 a,b,c,d,e,f,g,h是roi四个边的顶点。

那一部分代码实际上的作用是:

已知rectangle2的中心坐标与length1,length2,求出rectangle2的四个顶点坐标位置,这里用了三角函数来计算。

这部分知识请参考勇哥写的贴子《halcon中求rectangle2矩形的四个顶点坐标


dev_close_window()
file:=['F:/1112233.bmp','F:/2222.bmp']
mRow:=3050
mCol:=1856
mAng:=0



for Index1 := 0 to 1 by 1
    read_image(Image, file[Index1])
    dev_open_window_fit_image(Image, 0, 0, -1, -1, WindowHandle)
    get_image_size(Image, Width, Height)
    disp_obj(Image, WindowHandle)
    if(Index1=0)
        disp_rectangle2(WindowHandle, mRow,mCol, mAng, 700,1720)
        gen_rectangle2(Rectangle, mRow,mCol, mAng, 700, 1720)
        reduce_domain(Image, Rectangle, ImageReduced)
        create_shape_model(ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
        write_shape_model(ModelID, 'shape1.shm')
    endif
    read_shape_model('shape1.shm', ModelID1)
    
    find_shape_model(Image, ModelID1, -0.39, 0.79, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row1, Column1, Angle, Score)
    get_shape_model_contours(ModelContours, ModelID1, 1)
    vector_angle_to_rigid(0, 0, 0, Row1, Column1, Angle, HomMat2D)
    hom_mat2d_scale(HomMat2D,1,1, Column1, Row1, HomMat2DScale)
    affine_trans_contour_xld(ModelContours, ContoursAffineTrans, HomMat2DScale)
    disp_obj(ContoursAffineTrans, WindowHandle)
    ang:=deg(Angle)
    disp_circle(WindowHandle, Row1, Column1, 64)
    dev_set_color('blue')
      dev_set_draw('margin')
    len1:=500
    len2:=1120
    gen_rectangle2(Rectangle1, Row1, Column1, Angle, len1, len2)
    disp_obj(Rectangle1, WindowHandle)
    
    newRow:=Row1
    newCol:= Column1
    newAngle:= Angle
    
    hom_mat2d_identity(homMat2D)
    hom_mat2d_rotate(homMat2D,newAngle, Row1, Column1, homMat2D)
    hom_mat2d_translate(homMat2D, newRow, newCol, homMat2D)
    
  
    create_metrology_model(MetrologyHandle)
    set_metrology_model_image_size(MetrologyHandle, Width, Height)
   
    tuple_cos (newAngle, Cos)
    tuple_sin (newAngle, Sin)
    dev_set_color('red')
    a:= -len1*Cos - len2*Sin
    b := -len1*Sin + len2*Cos
    gen_cross_contour_xld(Cross1, newRow-b,  newCol+a, 56, newAngle)
    c := len1*Cos - len2*Sin
    d := len1*Sin + len2*Cos
    gen_cross_contour_xld(Cross2, newRow-d, newCol+c, 56, newAngle)
    e:= len1*Cos + len2*Sin
    f := len1*Sin - len2*Cos
    gen_cross_contour_xld(Cross3, newRow-f, newCol+e, 56, newAngle)
    g := -len1*Cos + len2*Sin
    h := -len1*Sin - len2*Cos
    disp_line(WindowHandle, newRow-h, newCol+g, newRow-b, newCol+a)
    
    beginx:=newRow-h
    beginy:= newCol+g
    endx:= newRow-b
    endy:=newCol+a

    add_metrology_object_line_measure(MetrologyHandle, beginx,beginy ,endx , endy, 20, 5, 1, 30, [], [], Index)
    set_metrology_object_param(MetrologyHandle,'all','measure_transition','all')
    set_metrology_object_param(MetrologyHandle,'all','measure_select','all')
    set_metrology_object_param(MetrologyHandle,'all','measure_threshold',30)
    set_metrology_object_param(MetrologyHandle,'all','measure_sigma',1)
    set_metrology_object_param(MetrologyHandle,'all','measure_length1',30)
    set_metrology_object_param(MetrologyHandle,'all','measure_length1',435)
    set_metrology_object_param(MetrologyHandle,'all','num_measures',50)
    set_metrology_object_param(MetrologyHandle,'all','min_score',0.4)
    apply_metrology_model(Image,MetrologyHandle)
    get_metrology_object_measures(Contours, MetrologyHandle, 'all', 'all', Row, Column)
    dev_set_color('green')
    dev_display(Contours)
    dev_set_color('red')
    radiusAry:=[]
    for i := 0 to |Row|-1 by 1
       radiusAry[i]:=14.0
    endfor
    disp_circle(WindowHandle,Row, Column, radiusAry)
    clear_metrology_object(MetrologyHandle, 'all')
    clear_metrology_model(MetrologyHandle)
    stop()
endfor


勇哥另外一篇找线的贴子:

http://47.98.154.65/?id=120



勇哥收罗了一下halcon的边缘检测和线条检测算子如下,供各位参考:


sobel_amp ( Image : EdgeAmplitude : FilterType, Size : ) 根据图像的一次导数计算图像的边缘

close_edges ( Edges, EdgeImage : RegionResult : MinAmplitude : )

close_edges_length ( Edges, Gradient : ClosedEdges : MinAmplitude, MaxGapLength : ) 使用边缘高度图像关闭边缘间隙。输出的区域包含杯关闭的区域。(感觉是对边缘的扩充)

derivate_gauss ( Image : DerivGauss : Sigma, Component : )

watersheds ( Image : Basins, Watersheds : : ) 从图像中提取风水岭。

zero_crossing ( Image : RegionCrossing : : ) 零交点(二次导数)

diff_of_gauss ( Image : DiffOfGauss : Sigma, SigFactor : ) 近似日志算子( 拉普拉斯高斯) 。

laplace_of_gauss ( Image : ImageLaplace : Sigma : ) 拉普拉斯高斯

edges_color_sub_pix ( Image : Edges : Filter, Alpha, Low, High : ) 精确的亚像素边缘提取(彩色图像)

edges_sub_pix ( Image : Edges : Filter, Alpha, Low, High : ) 精确边缘提取的亚像素(灰度图像)

edges_color ( Image : ImaAmp, ImaDir : Filter, Alpha, NMS, Low, High : ) 根据颜色进行边缘提取

edges_image ( Image : ImaAmp, ImaDir : Filter, Alpha, NMS, Low, High : ) 边缘提取

skeleton ( Region : Skeleton : : ) 计算区域的框架 Skeleton == Region

frei_amp ( Image : ImageEdgeAmp : : ) Frei-chen 模板进行边缘检测(振幅)

frei_dir ( Image : ImageEdgeAmp, ImageEdgeDir : : ) Frei-chen 模板进行边缘检测(振幅和方向)

nonmax_suppression_dir ( ImgAmp, ImgDir : ImageResult : Mode : ) 使用方向图像 抑制所有的超过给定最大值的图像灰度值的点

gen_contours_skeleton_xld ( Skeleton : Contours : Length, Mode : ) 将系统框架转换成 XLD 轮廓

laplace ( Image : ImageLaplace : ResultType, MaskSize, FilterMask : ) 使用有限差分计算拉普拉斯变换

info_edges ( : : Filter, Mode, Alpha : Size, Coeffs ) 估计滤波器的宽度

kirsch_dir ( Image : ImageEdgeAmp, ImageEdgeDir : : ) 使用 Kirsch 算子计算出边缘(振幅和方向)

prewitt_amp ( Image : ImageEdgeAmp : : ) 使用 Prewitt 算子计算出边缘(振幅)

kirsch_amp ( Image : ImageEdgeAmp : : ) 使用 Kirsch 算子计算出边缘(振幅)

highpass_image ( Image : Highpass : Width, Height : ) 从高频成分提取的图像。

sobel_amp ( Image : EdgeAmplitude : FilterType, Size : ) 使用 Sobel 算子计算出边缘(振幅)

robinson_amp ( Image : ImageEdgeAmp : : ) 使用 Robinson 算子计算出边缘(振幅)

roberts ( Image : ImageRoberts : FilterType : ) 使用 Robert 算子计算边缘


--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
  • 评论列表:
  •  访客
     发布于 2020-07-01 14:57:03  回复该评论
  • 你好,这个示例中用到的原图可以哪里下载呢,网站上挂的是压缩并且格式变换过的jpg文件且被上了水印了

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864