Halcon 边缘提取之使用带通滤波器提取线 bandpass_image.hdev

引言

使用MFC联合Halcon,将HDevelop中的演示结果用MFC中对话框的形式显示使用带通滤波器提取线


一、结果

1.1 读取图像

在这里插入图片描述

1.2 滤波处理后结果

在这里插入图片描述


二、Halcon代码

read_image (Bk45, 'bk45')
//bandpass_image — 使用带通滤波器的边缘提取
bandpass_image (Bk45, Lines, 'lines')
//threshold — Segment an image using global threshold.
threshold (Lines, Region, 128, 255)
//skeleton — Compute the skeleton of a region.
skeleton (Region, Skeleton)
dev_set_colored (12)
//gen_contours_skeleton_xld — 将skeleton 转换为 XLD 轮廓
gen_contours_skeleton_xld (Skeleton, Contours, 5, 'filter')
dev_display (Bk45)
dev_display (Contours)

三、主要算子分析

1.bandpass_image (Operator)

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

...
bandpass_image (Bk45, Lines, 'lines')
...

在这里插入图片描述

函数解析

bandpass_image(Image : ImageBandpass : FilterType : )
//参数 
	Image (input_object)           //Input images
	ImageBandpass (output_object)  //Bandpass-filtered images.
	FilterType (input_control)     //Filter type: currently only 'lines' is supported.
		Default value: 'lines'
		List of values: 'lines'

bandpass_image 用作边缘过滤器。 它将具有以下卷积掩码的线性过滤器应用于图像:

FilterType: ‘lines’ 与边缘运算符 sobel_amp 相比,此过滤器检测线而不是边缘,即两个紧密相邻的边缘。

在这里插入图片描述
在图像的边界处,灰度值被镜像。 灰度值的上溢和下溢被剪掉。 结果图像在 ImageBandpass 中返回。

2.threshold (Operator)

threshold — Segment an image using global threshold.

...
threshold (Lines, Region, 128, 255)
...

在这里插入图片描述

3.skeleton (Operator)

skeleton — Compute the skeleton of a region.

...
skeleton (Region, Skeleton)
...

在这里插入图片描述

函数解析

skeleton(Region : Skeleton : : )
//参数
	Region (input_object)     //需要细化的区域
	Skeleton (output_object)  //Resulting skeleton.
			//Number of elements: Skeleton == Region

skeleton computes the skeleton, i.e., the medial axis of the input regions. The skeleton is constructed in a way that each point on it can be seen as the center point of a circle with the largest radius possible while still being completely contained in the region.


4.gen_contours_skeleton_xld (Operator)

gen_contours_skeleton_xld — 将skeleton 转换为 XLD 轮廓。

gen_contours_skeleton_xld (Skeleton, Contours, 5, 'filter')
dev_display (Contours)

在这里插入图片描述

函数解析

gen_contours_skeleton_xld(Skeleton : Contours : Length, Mode : )
//参数
	Skeleton (input_object)//Skeleton of which the contours are to be determined. 
	Contours (output_object)   //Resulting contours.
	Length (input_control)     //轮廓必须具有的最小点数
		Default value: 1
		Suggested values: 1, 2, 3, 5, 10, 20
	Mode (input_control)       //轮廓过滤模式
		Default value: 'filter'
		List of values: 'filter', 'generalize1', 'generalize2'

gen_contours_skeleton_xld 将输入skeleton(例如,边缘)Skeleton (假定主要包含一个像素宽的区域(see skeleton))转换为 XLD 轮廓。

该算法首先尝试将区域转换为仅包含 8 邻域中的线段。 第二步,标记连接点。 在此之后, gen_contours_skeleton_xld 尝试生成以连接点或端点结束的轮廓,特别是对于以下配置的连接点(在所有四种可能的旋转中):

在这里插入图片描述
其中 0 = background, 1 = foreground, and 2 = junction point.
在此之后,返回所有至少具有 Length 点的轮廓。 由于等高线在连接点处被分割,如果选择了 Mode = ‘filter’,即使它们比 Length 点长,由于相邻的线较短,可能长的等高线可能会被分割成几个短线段。 这可以通过设置 Mode = ‘generalize1’ 来避免。 在这种情况下,轮廓的生成就好像输入区域中不包含短于 Length 的线段一样。 为了保留线段,这些线段通过短线的交叉被分割成很短的线段,可以选择Mode = ‘generalize2’。 在这种情况下,如果线段在两个连接点处结束,即使它们比 Length 短,也会保留线段。

四、MFC与Halcon联合使用

在这里插入图片描述
详细实现过程请查看之前的文章

4.1 详细代码实现链接

Halcon联合MFC混合编程使用带通滤波器提取线(bandpass_image)

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值