[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])

效果

未完待续。。。


目录
相关文章
|
2月前
|
机器学习/深度学习 监控 算法
基于单尺度Retinex和多尺度Retinex的图像增强算法实现
基于单尺度Retinex(SSR)和多尺度Retinex(MSR)的图像增强算法实现
130 1
|
2月前
|
存储 算法 数据安全/隐私保护
基于FPGA的图像退化算法verilog实现,分别实现横向和纵向运动模糊,包括tb和MATLAB辅助验证
本项目基于FPGA实现图像运动模糊算法,包含横向与纵向模糊处理流程。使用Vivado 2019.2与MATLAB 2022A,通过一维卷积模拟点扩散函数,完成图像退化处理,并可在MATLAB中预览效果。
|
2月前
|
监控 算法 决策智能
基于盲源分离与贝叶斯非局部均值的图像降噪算法
基于盲源分离与贝叶斯非局部均值的图像降噪算法
64 0
|
3月前
|
算法 数据安全/隐私保护
基于混沌加密的遥感图像加密算法matlab仿真
本项目实现了一种基于混沌加密的遥感图像加密算法MATLAB仿真(测试版本:MATLAB2022A)。通过Logistic映射与Baker映射生成混沌序列,对遥感图像进行加密和解密处理。程序分析了加解密后图像的直方图、像素相关性、信息熵及解密图像质量等指标。结果显示,加密图像具有良好的随机性和安全性,能有效保护遥感图像中的敏感信息。该算法适用于军事、环境监测等领域,具备加密速度快、密钥空间大、安全性高的特点。
|
5月前
|
算法 安全 数据安全/隐私保护
基于AES的遥感图像加密算法matlab仿真
本程序基于MATLAB 2022a实现,采用AES算法对遥感图像进行加密与解密。主要步骤包括:将彩色图像灰度化并重置大小为256×256像素,通过AES的字节替换、行移位、列混合及轮密钥加等操作完成加密,随后进行解密并验证图像质量(如PSNR值)。实验结果展示了原图、加密图和解密图,分析了图像直方图、相关性及熵的变化,确保加密安全性与解密后图像质量。该方法适用于保护遥感图像中的敏感信息,在军事、环境监测等领域具有重要应用价值。
181 35
|
3月前
|
算法 安全 数据安全/隐私保护
基于AES的图像加解密算法matlab仿真,带GUI界面
本程序基于AES算法实现图像的加解密功能,并提供MATLAB GUI界面操作,支持加密与解密。运行环境为MATLAB 2022A,测试结果无水印。核心代码通过按钮回调函数完成AES加密与解密流程,包括字节替换、行移位、列混淆及密钥加等步骤。解密过程为加密逆向操作,确保数据安全性与完整性。完整程序结合128位块加密与可选密钥长度,适用于图像信息安全场景。
|
7月前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
7月前
|
算法 数据安全/隐私保护
基于信息论的高动态范围图像评价算法matlab仿真
本项目基于信息论开发了一种高动态范围(HDR)图像评价算法,并通过MATLAB 2022A进行仿真。该算法利用自然图像的概率模型,研究图像熵与成像动态范围的关系,提出了理想成像动态范围的计算公式。核心程序实现了图像裁剪处理、熵计算等功能,展示了图像熵与动态范围之间的关系。测试结果显示,在[μ-3σ, μ+3σ]区间内图像熵趋于稳定,表明系统动态范围足以对景物成像。此外,还探讨了HDR图像亮度和对比度对图像质量的影响,为HDR图像评价提供了理论基础。
|
7月前
|
传感器 算法 数据安全/隐私保护
基于Affine-Sift算法的图像配准matlab仿真
本项目展示了Affine-SIFT算法的运行效果(无水印),适用于图像配准任务,能够处理旋转、缩放、平移及仿射变换。程序基于MATLAB2022A开发,包含完整代码与操作视频。核心步骤为:先用SIFT提取特征点,再通过仿射变换实现高精度对准。
|
7月前
|
人工智能 编解码 算法
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
113 0

热门文章

最新文章