一,为什么要摆脱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)