Halcon复习专题-第四章-边缘

第四章-边缘

前言

在Halcon的例子中,有方法-边缘提取(像素精度)

边缘原理:参考DIP课本

区域和轮廓是没有像素值的,而图像是有像素值的,

在边缘检测中,有High阈值和Low阈值,像素值高于High时一定是边缘像素,低于Low一定不是边缘像素,若像素值在High和Low之间时,若该像素值的8邻域的像素有一个高于High,则该像素就判为边缘像素

Region区域和XLD轮廓只保存了位置信息,没有像素值信息

图像中提取边缘

edges_image(Image输入图像,
			ImaAmp输出边缘幅度结果图像, 
			ImaDir输出边缘方向结果图像,
			Filter边缘检测器一般是‘canny’,或者是lanser1一阶导,lanser2二阶导
			Alpha平滑参数,越大越不平滑
		    NMS, 
			Low阈值, 
			High)

上述的ImaAmpImaDir都是图像,即有像素值,我们用threshold得到的区域或者xld轮廓是没有像素值的

一阶导数算子?NMS

注意这里的输出都是图片,即有像素值

read_image (Image, 'fabrik')
// dir表示方向,amp表示幅度
//sobel_dir()可以产生边缘方向图和边缘幅度差分图
//sobel_amp()只能得到幅度图
//prewitt()同理
read_image (Image, 'fabrik')
sobel_dir(Image, EdgeAmplitude_sbbel_dir, EdgeDirection_sobel_dir, 'sum_abs', 3)
sobel_amp(Image,EdgeAmplitude_sobel_amp, 'sum_abs', 3)
prewitt_amp (Image, ImageEdgeAmp_pre_amp)
prewitt_dir (Image, ImageEdgeAmp_pre_dir, ImageEdgeDir_pre_dir)
//非极大值抑制算子
nonmax_suppression_dir(ImgAmp, ImgDir,ImageResult,Mode)
nonmax_suppression_amp(ImgAmp,ImageResult,Mode)

示例

使用了skeleton骨架,作用就是提取区域骨架,效果就是区域框架更细了,可以通过skeleton转换成contours轮廓

骨架往往是一个连通域,而轮廓是多个连通域

skeleton是一个连通域
contours是多个不同的连通域
read_image (Image, 'fabrik')
edges_image (Image, ImaAmp, ImaDir, 'lanser2', 0.5, 'nms', 12, 22)
threshold (ImaAmp, Edges, 1, 255)
//提取骨架
skeleton (Edges, Skeleton)
// 骨架转换成xld亚像素轮廓

gen_contours_skeleton_xld (Skeleton, Contours, 1, 'filter')
dev_display (Image)
dev_set_colored (6)
dev_display (Contours)

区域中提取边缘

区域无像素值

该方法是基于形态学操作产生的,其中边界类型包括了外边界和内边界,

内边界=原区域-腐蚀外边界=膨胀-原区域

boundary(Region输入区域,
		RegionBorder输出区域边界,
		BoundaryType边界的类型‘inner’或‘outer’)

 

 

 

 

 


版权声明:本文为Mrsherlock_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。