[Halcon&图像] 边缘提取算法汇总

简介: [Halcon&图像] 边缘提取算法汇总

1:sobel_amp — sobel_amp计算图像的一阶导数,用作边缘检测器。

函数:sobel_amp(Image : EdgeAmplitude : FilterType, Size : )

参数

Image (in):输入图像

EdgeAmplitude (out):边缘振幅图像

FilterType(in):过滤器类型。默认值:‘thin_sum_abs’

Size (in):过滤淹模尺寸(一般数值越大,提取的轮廓边缘越暗)。默认值:3

核心代码:配合提取区域骨架,用skeleton骨骼化边缘成1像素宽度

read_image (Image, 'fabrik')
sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)
threshold (EdgeAmplitude, Region, 10, 255)
skeleton (Region, Skeleton)
dev_display (Image)
dev_set_color ('red')
dev_display (Skeleton)

检测效果

:与sobel_amp 相似的边缘检测算子还有roberts、kirsch_amp、prewitt_amp、robinson_amp、frei_amp (较roberts算子提取效果稍好一些)等,都是通过计算图像的一阶导数来获取图像的边缘信息。

 

2:edges_image — 使用Deriche, Lanser, Shen或Canny过滤器提取边缘(相对来说edges_image 包含了上述的操作,因为提取出的边缘是1像素宽度)

函数:edges_image(Image : ImaAmp, ImaDir : Filter, Alpha, NMS, Low, High : )

参数

Image (in):输入图像

ImaAmp(out):输出边缘图像

ImaDir(out) :图像边缘方向

Filter(in):要应用的边缘算子,默认值:‘canny’

Alpha(in):值越小,图像越平滑,细节特征越少(与“canny”相反)。建议: 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.9,1.0(默认), 1.1

NMS(in):非最大抑制(如果不需要,“无”)

Low(in):较低的阈值用于滞后阈值操作

High (in):迟滞阈值操作的上限阈值

核心代码

edges_image (Image, ImaAmp, ImaDir, 'lanser2', 0.5, 'nms', 8, 16)
threshold (ImaAmp, Region, 8, 255)
skeleton (Region, Skeleton)

效果

3.bandpass_image — 使用带通滤波器的边缘提取

函数:bandpass_image(Image : ImageBandpass : FilterType : )

参数

Image (in):输入图像

ImageBandpass (out):输出边缘图像

FilterType (in) :过滤器类型:目前只支持“lines”

效果

注:在提取线条并进行二值化之后,发现线条断断续续,可使用算子close_edges — 利用边缘振幅图像缩小边缘间隙。(相似算子close_edges_length)

4.laplace — 拉普拉斯用拉普拉斯算子对输入图像进行滤波(对图像进行滤波,然后提取零交叉点).

函数:laplace(Image : ImageLaplace : ResultType, MaskSize, FilterMask : )

参数

Image (in):输入图像

ImageLaplace (out):Laplace-filtered结果图像

ResultType(in):类型

MaskSize(in):过滤掩膜的大小

FilterMask (in):滤波器掩模用于拉普拉斯算子

核心代码

laplace (Image, ImageLaplace_3, 'signed', 3, 'n_8_isotropic')
zero_crossing (ImageLaplace_3, RegionCrossing_3)
laplace (Image, ImageLaplace_11, 'signed', 11, 'n_8_isotropic')
zero_crossing (ImageLaplace_11, RegionCrossing_11)
laplace_of_gauss (Image, ImageLaplaceG, 5)
zero_crossing (ImageLaplaceG, RegionCrossingG)

效果

相似滤波算子还有diff_of_gauss、laplace_of_gauss、derivate_gauss等,根据实际效果选择合适算子。

核心思想对图像进行滤波之后,再从图像中提取零交叉。

5 .MS_LineDetecter — 本人封装的一个halcon算子,可以根据需求拟合求物体的直线、圆、椭圆等边缘轮廓,这里我主要使用其求物体的直线边缘轮廓。

函数:MS_LineDetecter(ImageIn : : iLineRow1, iLineCol1, iLineRow2, iLineCol2, iSigma, iThreshold : oLineRow1, oLineCol1, oLineRow2, oLineCol2)

参数

ImageIn(in):输入图像

iLineRow1(in):直线的起始段行坐标

iLineCol1(in):直线的起始段列坐标

iLineRow2(in):直线的结束段行坐标

iLineCol2(in):直线的结束段列坐标

iSigma(in):测量矩形的平滑性

iThreshold(in):测量矩形的最小边缘幅度

oLineRow1(out):直线的起始段行坐标

oLineCol1(out):直线的起始段列坐标

oLineRow2(out):直线的结束段行坐标

oLineCol2(out):直线的结束段列坐标

封装函数内的代码

gen_cross_contour_xld (Cross1, iLineRow1, iLineCol1, 6, 0.785398)
gen_cross_contour_xld (Cross2, iLineRow2, iLineCol2, 6, 0.785398)
distance_pp (iLineRow1, iLineCol1, iLineRow2, iLineCol2, Distance)
angle_lx (iLineRow1, iLineCol1, iLineRow2, iLineCol2, Angle)
tuple_deg (Angle, Deg)
scale_image_max (ImageIn, Image)
measureRectNum:=20
measureRectWidth:=Distance/measureRectNum
measureRectHeight:=20
get_image_size (Image, Width, Height)
row:=[]
col:=[]
for Index := 0 to measureRectNum by 1
    gen_rectangle2 (Rectangle, iLineRow1+cos(Angle+rad(90))*measureRectWidth*Index, iLineCol1+sin(Angle+rad(90))*measureRectWidth*Index, \
                    Angle+rad(90), measureRectHeight,measureRectWidth/2)   
    gen_measure_rectangle2 (iLineRow1+cos(Angle+rad(90))*measureRectWidth*Index, iLineCol1+sin(Angle+rad(90))*measureRectWidth*Index, \
                    Angle+rad(90), measureRectHeight,measureRectWidth/2, Width, Height, 'nearest_neighbor', MeasureHandle)   
    measure_pos (Image, MeasureHandle, iSigma, iThreshold, 'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance1)
    row:=[row,RowEdge]
    col:=[col,ColumnEdge]    
    gen_cross_contour_xld (Cross, RowEdge, ColumnEdge, 6, Angle)
endfor
gen_contour_polygon_xld (Contour, row, col)
fit_line_contour_xld (Contour, 'tukey', -1, 0, 5, 2, oLineRow1, oLineCol1, oLineRow2, oLineCol2, Nr, Nc, Dist)
gen_contour_polygon_xld (Contour1, [oLineRow1,oLineRow2], [oLineCol1,oLineCol2])
return ()

实战

draw_line (200000, Row1, Column1, Row2, Column2)
MS_LineDetecter (Image, Row1, Column1, Row2, Column2, 1, 50, oLineRow1, oLineCol1, oLineRow2, oLineCol2)
gen_contour_polygon_xld (Contour1, [oLineRow1,oLineRow2], [oLineCol1,oLineCol2])

效果

未完待续。。。


目录
相关文章
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
阿里云人工智能平台 PAI 团队发表的图像编辑算法论文在 MM2024 上正式亮相发表。ACM MM(ACM国际多媒体会议)是国际多媒体领域的顶级会议,旨在为研究人员、工程师和行业专家提供一个交流平台,以展示在多媒体领域的最新研究成果、技术进展和应用案例。其主题涵盖了图像处理、视频分析、音频处理、社交媒体和多媒体系统等广泛领域。此次入选标志着阿里云人工智能平台 PAI 在图像编辑算法方面的研究获得了学术界的充分认可。
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
|
3月前
|
机器学习/深度学习 人工智能 算法
【MM2024】面向 StableDiffusion 的多目标图像编辑算法 VICTORIA
阿里云人工智能平台 PAI 团队与华南理工大学合作在国际多媒体顶级会议 ACM MM2024 上发表 VICTORIA 算法,这是一种面向 StableDiffusion 的多目标图像编辑算法。VICTORIA 通过文本依存关系来修正图像编辑过程中的交叉注意力图,从而确保关系对象的一致性,支持用户通过修改描述性提示一次性编辑多个目标。
|
3月前
|
算法 数据安全/隐私保护
织物图像的配准和拼接算法的MATLAB仿真,对比SIFT,SURF以及KAZE
本项目展示了织物瑕疵检测中的图像拼接技术,使用SIFT、SURF和KAZE三种算法。通过MATLAB2022a实现图像匹配、配准和拼接,最终检测并分类织物瑕疵。SIFT算法在不同尺度和旋转下保持不变性;SURF算法提高速度并保持鲁棒性;KAZE算法使用非线性扩散滤波器构建尺度空间,提供更先进的特征描述。展示视频无水印,代码含注释及操作步骤。
|
4月前
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。
|
6月前
|
机器学习/深度学习 编解码 监控
算法金 | 深度学习图像增强方法总结
**图像增强技术概括** 图像增强聚焦于提升视觉效果和细节,广泛应用于医学、遥感等领域。空间域增强包括直方图均衡化(增强对比度)、对比度拉伸、灰度变换、平滑滤波(均值、中值)和锐化滤波(拉普拉斯、高通)。频率域增强利用傅里叶变换、小波变换,通过高频和低频滤波增强图像特征。现代方法涉及超分辨率重建、深度学习去噪(如CNN、Autoencoder)、图像修复(如GAN)和GANs驱动的多种图像处理任务。
213 14
算法金 | 深度学习图像增强方法总结
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
|
6月前
|
算法
基于粒子群优化的图像融合算法matlab仿真
这是一个基于粒子群优化(PSO)的图像融合算法,旨在将彩色模糊图像与清晰灰度图像融合成彩色清晰图像。在MATLAB2022a中测试,算法通过PSO求解最优融合权值参数,经过多次迭代更新粒子速度和位置,以优化融合效果。核心代码展示了PSO的迭代过程及融合策略。最终,使用加权平均法融合图像,其中权重由PSO计算得出。该算法体现了PSO在图像融合领域的高效性和融合质量。
|
5月前
|
算法 前端开发 计算机视觉
基于均值坐标(Mean-Value Coordinates)的图像融合算法的优化实现
基于均值坐标(Mean-Value Coordinates)的图像融合算法的优化实现
55 0
|
5月前
|
自然语言处理 并行计算 算法
基于均值坐标(Mean-Value Coordinates)的图像融合算法的具体实现
基于均值坐标(Mean-Value Coordinates)的图像融合算法的具体实现
55 0
|
7月前
|
算法 计算机视觉
基于Chan-Vese算法的图像边缘提取matlab仿真
**算法预览展示了4幅图像,从边缘检测到最终分割,体现了在matlab2022a中应用的Chan-Vese水平集迭代过程。核心代码段用于更新水平集并显示迭代效果,最后生成分割结果及误差曲线。Chan-Vese模型(2001)是图像分割的经典方法,通过最小化能量函数自动检测平滑区域和清晰边界的图像分割,适用于复杂环境,广泛应用于医学影像和机器视觉。**

热门文章

最新文章