halcon 自定义距离10的一阶导数幅图,摆脱sobel的3掩码困境

一,为什么要摆脱3的掩码

在处理图像的过程中,会用到平滑算子,很容易破坏边际,所谓的一阶导数sobel只计算掩码为3的差分,在幅度图分割中,往往是很难把握的

举个例子-现在图像头平滑好了,缺陷跟背景的差值在15左右,那我们如何在sobel幅度图中进行提取呢,我认为很难。那这时候就需要我们做一个自定义的幅度图,在本例子中,我们定义缺陷的边缘与背景边缘的交接地带在6个像素左右,我们来做一个幅度图,以每个点与远处10个像素的差值进行计算求幅度图,对幅度图进行15*0.9到15*1.1的预制进行分割,提取边界。

玩法很多,这里只作为一阶导来玩,增强对一阶导的理解

二,做一个x方向的距离10的一阶幅度图。

1)求距离为10的一阶偏导,最简单的方法就是,图像相减

2)将图像右移10个像素得到image1,然后用Image-image1对应位置的像素,就得到了image的距离为10的一阶偏导subimage。

3)subimage进行   15*0.9-15*1.1的正向分割,就得到了图像的左侧边界

再进行 -15*1.1导-15*0.9的负相分割,就得到右侧边界。但右侧边界会比图像有10个像素的位置便宜,需要我们移动过去。

4)再以此方式求出垂直方向的区域,四个区域的相加,就是目标区域的完整边界区域

5)以此为封闭区域可以求出边界

三,插入了自己的实验代码,希望多多交流

分享让我在问题上能更进一步的思考

如果您觉得我喷的,不是知识垃圾,可点赞或者留言告知

gen_image_const (Image, 'real', 512, 512)
paint_region (Image, Image, ImageResult, 100, 'fill')
dev_open_window_fit_image (ImageResult, 0, 0, -1, -1, WindowHandle)
gen_circle (Circle, 200, 200, 100.5)
paint_region (Circle, ImageResult, ImageResult1, 200, 'fill')

mean_image (ImageResult1, ImageMean, 5, 5)
**将图像右移10个像素
vector_angle_to_rigid (10, 0,0 ,10,10 ,0 , HomMat2D)
affine_trans_image (ImageMean, ImageAffineTrans, HomMat2D, 'constant', 'false')

get_domain (ImageAffineTrans, Domain)
reduce_domain (ImageAffineTrans, Domain, ImageReduced)
paint_gray (ImageReduced, ImageResult, MixedImage)

sub_image (ImageMean, MixedImage, ImageSub, 1, 0)

threshold (ImageSub, Region, 95, 105)

threshold (ImageSub, Region1, -105, -95)

hom_mat2d_invert (HomMat2D, HomMat2DInvert)
affine_trans_region (Region1, RegionAffineTrans, HomMat2DInvert, 'constant')

union2 (RegionAffineTrans, Region, RegionUnion)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值