精华内容
下载资源
问答
  • halcon 边缘检测

    千次阅读 2018-09-05 16:23:22
    一般在做项目时,无论是边缘检测、瑕疵检测、Blob检测等应用,都有一定的通用套路,也可以说是通用处理框架,在此框架下根据具体应用具体分析,基本上所有项目都可完成。总结起来, 通用套路 + 灵活运用 对于初学...

    公众号:机器视觉那些事儿
    这里写图片描述

    知识点是鱼,套路是渔。授人以鱼不如授人以渔!”

    一般在做项目时,无论是边缘检测、瑕疵检测、Blob检测等应用,都有一定的通用套路,也可以说是通用处理框架,在此框架下根据具体应用具体分析,基本上所有项目都可完成。总结起来,

    通用套路 + 灵活运用

    对于初学者来说,只需掌握通用套路即可,灵活运用需要经过大量的练习才可达到,运用大学里学马克思哲学时的一句话概括,“量变引起质变”,当你达到这个程度之时,俨然成为集大成者了。

    边缘检测通用思路:

    1. 设置ROI感兴趣区域,此区域需包含待检测边缘;

    2. 二值化处理,并打散连接区域,进一步选取目标区域;

    3. 将目标区域进行膨胀处理;

    4. 将目标区域进行腐蚀处理;

    5. 将膨胀后的区域和腐蚀后的区域进行减操作,并进行抠图处理,目的为了得到有边缘的真实图像;

    6. 使用边缘检测算子提取亚像素轮廓;

    7. 根据得到的真实边缘,进步处理和计算所需的线、弧、圆等;

    现学现用:检测圆

    处理思路:1. 根据以上所讲套路,求得外边缘轮廓;
    
                      2. 根据所得轮廓,拟合圆;
    

    1

    检测外边缘轮廓

    外边缘处理后,如下图所示,会提取一些干扰轮廓,第2部分–拟合圆,会对此进行处理。

    附第一部分 halcon源代码

    *读入图片
    read_image (Image, ‘cicle.bmp’)

    *计算图片大小,并以原图尺寸显示
    get_image_size (Image, Width, Height)
    dev_close_window ()
    dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
    dev_display (Image)

    *01. 设置ROI感兴趣区域
    gen_rectangle1 (ROI, 50, 50, 550, 550)
    reduce_domain (Image, ROI, ImageReduced)

    *02. 二值化处理,并打散连接区域,选取目标区域
    threshold (ImageReduced, Regions, 23, 255)
    connection (Regions, ConnectedRegions)
    select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 57706.4, 86146.8)

    *03. 将目标区域进行膨胀处理
    dilation_circle (SelectedRegions, RegionDilation, 10)

    *04. 将目标区域进行腐蚀处理
    erosion_circle (SelectedRegions, RegionErosion, 4)
    *填充孔洞
    fill_up (RegionErosion, RegionFillUp)

    *05. 将膨胀后的区域和腐蚀后的区域进行减操作,并进行抠图处理,目的为了得到有边缘的真实图像
    difference (RegionDilation, RegionFillUp, RegionDifference)
    union1 (RegionDifference, RegionUnion)
    reduce_domain (ImageReduced, RegionUnion, ImageReduced1)

    *06. 使用canny算子提取亚像素轮廓
    edges_sub_pix (ImageReduced1, Edges, ‘canny’, 1, 20, 40)

    2

    拟合圆

    此时进行套路中的最后一步,根据得到的真实边缘,进步处理和计算所需的线、弧、圆等,在这一步我们常用分割函数 segment_contours_xld,联合相邻直线函数 union_collinear_contors_xld,选择轮廓函数select_contours_xld,联合相同圆函数 union_cocircular_contours_xld等函数,进一步对边缘轮廓处理,也可根据找到的轮廓边缘,得到点云数据,拟合成圆、直线、椭圆等;

    处理后如下图所示。

    附第二部分 halcon源代码

    *07. 根据得到的真实边缘,进步处理和计算所需的线、弧、圆等
    segment_contours_xld (Edges, ContoursSplit, ‘lines_circles’, 5, 4, 2)
    select_contours_xld (ContoursSplit, SelectedContours, ‘contour_length’, 8, 1000, -0.5, 0.5)
    union_adjacent_contours_xld (SelectedContours, UnionContours3, 10, 1, ‘attr_keep’)
    fit_circle_contour_xld (UnionContours3, ‘algebraic’, -1, 0, 0, 3, 2, Row1, Column1, Radius1, StartPhi, EndPhi, PointOrder)
    gen_circle (Circle, Row1, Column1, Radius1)

    *显示结果
    dev_set_line_width (2)
    dev_set_draw (‘margin’)
    dev_display (Image)
    dev_display (Circle)

    原图及完整源代码见百度网盘:

    链接:https://pan.baidu.com/s/1FLZGJ7abz7CoqoweuGv3uQ 密码:au2h

    展开全文
  • Halcon图像处理软件是工业视觉领域非常著名的软件,软件提供的封装好的算法模块可以提供给开发者很大的便利,有效减少开发周期,相比开源...本代码提供的主要是基于Halcon边缘检测的一些图形库,适用于刚上手的开发者。
  • Halcon边缘检测原理

    2016-07-26 10:41:08
    halcon边缘检测的定义和实现原理
  • sobel_amp( Image: EdgeAmplitude: FilterType, Size:)根据图像的一次导数计算图像的边缘 close_edges( Edges, EdgeImage: RegionResult: MinAmplitude:) close_edges_length( Edges, Gradient: ClosedEdges: ...

    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 算子计算边缘

     

    展开全文
  • 然后通过sobel_amp算子检测边缘明显变化的图像,得到原始图像边缘位置的图像数据 然后通过阈值获取目标边缘。 通过膨胀目标边缘获得感兴趣区域,再次通过阈值分割获得目标 * autobahn.hdev: Fast detection of ...

    基本思路:

    先获得主要感兴趣区域,去除车的干扰

    然后通过sobel_amp算子检测边缘明显变化的图像,得到原始图像边缘位置的图像数据

    然后通过阈值获取目标边缘。

    通过膨胀目标边缘获得感兴趣区域,再次通过阈值分割获得目标

    * autobahn.hdev: Fast detection of lane markers    * 车道线的快速检测

    dev_update_window ('off')
    dev_close_window ()
    dev_open_window (0, 0, 768, 575, 'black', WindowID)
    MinSize := 30
    get_system ('init_new_image', Information)
    set_system ('init_new_image', 'false')

    * 获得网格 MinSize 小网格大小,512-网格的大小
    gen_grid_region (Grid, MinSize, MinSize, 'lines', 512, 512)

    *对这个网格以矩形修剪
    clip_region (Grid, StreetGrid, 130, 10, 450, 502)
    dev_set_line_width (3)
    dev_set_color ('green')
    read_image (ActualImage, 'autobahn/scene_00')
    dev_display (ActualImage)
    stop ()
    dev_display (StreetGrid)
    stop ()
    for i := 0 to 28 by 1
        read_image (ActualImage, 'autobahn/scene_' + (i$'02'))

    *用修剪过的网格剪切图片
        reduce_domain (ActualImage, StreetGrid, Mask)

    *sobel算法
        sobel_amp (Mask, Gradient, 'sum_abs', 3)

    *阈值分割
        threshold (Gradient, Points, 20, 255)

    *膨胀操作
        dilation_rectangle1 (Points, RegionDilation, MinSize, MinSize)

    *用膨胀后的区域剪切原图像
        reduce_domain (ActualImage, RegionDilation, StripGray)

    *阈值分割
        threshold (StripGray, Strip, 190, 255)

    *填充
        fill_up (Strip, RegionFillUp)
        dev_display (ActualImage)
        dev_display (RegionFillUp)
    endfor
    dev_set_line_width (1)
    dev_update_window ('on')
    set_system ('init_new_image', Information)

    展开全文
  • halcon边缘检测-close_edges.hev

    千次阅读 2019-01-16 08:59:54
    close_edges关闭边缘检测器输出中的间隙,从而尝试生成完整的对象轮廓。 这是通过检查每个边缘点的邻居来确定具有最大幅度(即最大梯度)的点,并且如果其幅度大于在MinAmplitude中传递的最小幅度,则将该点添加到...

    close_edges(Edges, EdgeImage : RegionResult : MinAmplitude : )

    close_edges closes gaps in the output of an edge detector, and thus tries to produce complete object contours. This is done by examining the neighbors of each edge point to determine the point with maximum amplitude (i.e., maximum gradient), and adding the point to the edge if its amplitude is larger than the minimum amplitude passed in MinAmplitude. This operator expects as input the edges (Edges) and amplitude image (EdgeImage) returned by typical edge operators, such as edges_image or sobel_amp. close_edges does not take into account the edge directions that may be returned by an edge operator. Thus, in areas where the gradient is almost constant the edges may become rather “wiggly.”

    close_edges关闭边缘检测器输出中的间隙,从而尝试生成完整的对象轮廓。 这是通过检查每个边缘点的邻居来确定具有最大幅度(即最大梯度)的点,并且如果其幅度大于在MinAmplitude中传递的最小幅度,则将该点添加到边缘。 此运算符期望由典型的边运算符(例如edges_image或sobel_amp)返回的边(Edges)和幅度图(EdgeImage)作为输入。 close_edges不考虑边缘运算符可能返回的边缘方向。 因此,在梯度几乎恒定的区域中,边缘可能变得相当“摇摆”。

    read_image (Image, 'fabrik')
    dev_close_window ()
    get_image_size (Image, Width, Height)
    dev_open_window (0, 0, Width, Height, 'black', WindowID)
    sobel_amp (Image, EdgeAmplitude, 'thin_sum_abs', 3)
    threshold (EdgeAmplitude, Edges, 30, 255)
    close_edges (Edges, EdgeAmplitude, EdgesExtended, 15)
    dev_set_color ('green')
    dev_display (EdgesExtended)
    dev_set_color ('red')
    dev_display (Edges)

    下图的红色部分是经过sobel和阈值分割的。绿色部分是经过close_edges得到的。 

    展开全文
  • sobel_amp(Image:EdgeAmplitude:FilterType,Size:)根据图像的一次导数计算图像的边缘 close_edges(Edges,EdgeImage:RegionResult:MinAmplitude:) close_edges_length(Edges,Gradient:ClosedEdges:MinAmplitude,...
  • halcon边缘检测-取背景的连通区域

    千次阅读 2019-01-14 11:10:28
    sobel取前景(边缘) 阈值分割边缘 去背景连通区域 填孔 * Determine the connected components of the background of given regions *  read_image (Image, 'fabrik') * Detect edges sobel_amp (Image, ...
  • read_image (Bk45, 'bk45') *带通滤波 bandpass_image (Bk45, Lines, 'lines') threshold (Lines, Region, 128, 255) *计算划痕 skeleton (Region, Skeleton) dev_set_colored (12) *生成轮廓 ...
  • 以前用opencv时用canny算法用得挺多。...如果检测结果大于低阀值但又小于高阀值,那就要看这个像素的邻接像素中有没有超过高阀值的边缘像素:如果有的话那么它就是边缘了,否则他就不是边缘halcon...
  • 一、边缘提取 1、设置ROI兴趣区域 2、快速二值化,并连接相邻区域。 这样做的目的是进一步减少目标区域,通过二值化将目标区域大概轮廓提取出来 3、提取最接近目标区域的轮廓 常用函数有boundary,gen_contour_...
  • *亚像素提取边缘,Alpha数值越大,轮廓越圆滑 edges_sub_pix (Image, Edges, 'lanser1', 1, 5, 10) *合并邻近的XLD,使得细小线段拼接起来 union_adjacent_contours_xld (Edges, UnionContours, 5, 1, 'attr_keep') *...
  • *如果是畸变图,需要先校正 read_image (Image, 'D:/1.bmp') ...*测试提取边缘 edges_image(Image,Amp,Dir,'lanser2',0.5,'none',-1,-1) hysteresis_threshold(Amp,Margin,20,30,30) *彩色转灰度图 co...
  • halcon边缘检测-close_edges_length.hev

    千次阅读 2019-01-16 09:29:56
    close_edges_length关闭边缘检测器输出中的间隙,从而尝试生成完整的对象轮廓。此运算符期望由典型的边运算符(例如edges_image或sobel_amp)返回的边(边)和幅度图(梯度)作为输入。 轮廓分两步关闭:首先,...
  • 一、边缘提取 1、设置ROI兴趣区域 2、快速二值化,并连接相邻区域。 这样做的目的是进一步减少目标区域,通过二值化将目标区域大概轮廓提取出来 3、提取最接近目标区域的轮廓常用函数有boundary,gen_contour_...
  • derivate_gauss — Convolve an image with derivatives of the Gaussian.用高斯的导数卷积图像 高斯导数滤波用作 平滑滤波器(使用分水岭watershed得到contours)(用于很多小块的图像) derivate_gauss(Image :...
  • halcon边缘缺陷检测

    2020-07-13 21:42:51
    阈值分割+形态学处理,将包含边缘部分图像进行抠图 然后使用canny滤波器进行边缘检测 详细见:http://www.skcircle.com/?id=1276
  • halcon边缘缺陷检测.zip

    2020-12-16 14:32:34
    halcon边缘缺陷检测的思路 一、边缘提取 二、映射标准轮廓 三、计算边缘与标准轮廓的距离 四、超出阈值的认为是有缺陷的点,这个与海康 visionmaster的缺陷检测功能是一致的。 本资料包括源码和测试数据,代码都包括...
  • halcon sobel边缘检测sobel_amp

    千次阅读 2019-07-13 08:35:56
    halcon 边缘检测sobel_amp
  • halcon边缘提取缺陷检测的思路 一、边缘提取 二、BLOB分析检测
  • Halcon —— 边缘检测算子详解

    千次阅读 2021-01-15 17:32:26
    halcon内常用的边缘检测算子包括如下几种: 1.edges_image: 提取2D 图像边缘 2.edges_sub_pix:提取2D图像亚像素边缘 3.edges_object_model_3d :提取3D图像边缘 4.edges_color和edges_color_sub_pix:提取彩色图像...
  • Halcon学习之边缘检测函数
  • Halcon学习之边缘检测函数
  • halcon sobel 边缘检测 sobel_dir

    千次阅读 2019-07-15 14:00:54
    halcon sobel 边缘检测 sobel_dir sobel_dir - 使用Sobel算子检测边缘(振幅和方向)。 sobel_dir(Image : EdgeAmplitude, EdgeDirection : FilterType, Size : )
  • halcon图像边缘提取(边缘检测

    万次阅读 2016-11-02 09:17:01
    二、边缘检测:  由于边缘和噪声都是灰度不连续的点,在频域均为高频分量,直接采用微分运算难以克服噪声的影响。因此,用微分算子检测边缘前要对图像进行平滑滤波。 三、示例: 原图: halcon边缘提取代码...
  • Halcon-边缘检测算子

    万次阅读 2018-05-06 23:56:27
    边缘检测的定义 :使用数学方法提取图像像元中具有亮度值(灰度)空间方向梯度大的边、线特征的过程。边缘 是指周围像素灰度有阶跃变化或屋顶等变化的那些像素的集合。图像的边缘对应着图像灰度的不连续性。显然...
  • halcon边缘提取和检测常用方法

    万次阅读 2015-07-17 11:30:37
    一、边缘提取 1、设置ROI兴趣区域 2、快速二值化,并连接相邻区域。 这样做的目的是进一步减少目标区域,通过二值化将目标区域大概轮廓提取出来 3、提取最接近目标区域的轮廓 常用函数有boundary,gen_contour_...
  • 一、边缘提取

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,154
精华内容 461
关键字:

halcon边缘检测