如果是下相机对位,有时候会碰到相机拍到复杂背景,造成需要处理的工件被背景干扰的问题。
这时候有一个办法是去掉背景。一般来讲,每次拍到的背景应该是一样的,只是每次拍到的工件不一样。
勇哥直接上图片与演示代码,最后介绍一下相关的算子。
(图1 背景图像)
(图2 含有背景图像的电芯)
下面是代码处理的结果。
(图3 电池本体之外的背景全部镂空的效果)
(图4 含有膨胀区域的处理结果)
read_image(backImg, 'C:/Users/Administrator/Desktop/bj1.png') read_image(inputImg, 'C:/Users/Administrator/Desktop/bj2.png') gen_empty_obj(resultImg) gen_empty_obj(resultImg2) abs_diff_image(inputImg, backImg, ImageAbsDiff, 1) threshold(ImageAbsDiff, Region, 8, 255) connection(Region, ConnectedRegions) fill_up(ConnectedRegions, RegionFillUp) select_shape_std(RegionFillUp, SelectedRegions, 'max_area', 70) shape_trans(SelectedRegions, RegionTrans, 'rectangle2') dilation_circle(RegionTrans, RegionDilation, 10) reduce_domain(inputImg, RegionDilation, resultImg) reduce_domain(inputImg, SelectedRegions, resultImg2)
下面讲一下相关的算子:
abs_diff_image算子解析
abs_diff_image算子能够得到两幅图像相减后的结果图,其结果是以绝对值的方式呈现。主要用于计算两幅图像的差异,可用于和图片的对比测试。
abs_diff_image(Image1, Image2 : ImageAbsDiff : Mult : ) Image1,Image2是输入图像 ImageAbsDiff是相减后的结果,是输出图像 Mult是放大倍数 相减公式:g' = |(Image1 - Image2)| * Mult
不论输入的是彩色图像,还是灰度图像,该算子都能进行相减操作。但是如果是希望得到两幅图像在亮度上的差异,则建议使用rgb1_to_gray (Image1, GrayImage1)
如上算子将RGB图转为灰度图之后,再进行相减更能得到想要的结果。
read_image (Image1, 'F:/SZWX912/TestImage/Pic912/0002.bmp') rgb1_to_gray (Image1, GrayImage1) read_image (Image2, 'F:/SZWX912/TestImage/Pic912/0008.bmp') rgb1_to_gray (Image2, GrayImage2) abs_diff_image ( GrayImage1, GrayImage2, ImageAbsDiff, 1)
sub_image算子解析
sub_image是计算两幅图像相减结果的实际值,这种相减有方向性,也就是说减数和被减数的位置调换会影响输出结果。如果相减后像素值小于零,其结果图中会被置0;同理,如果像素值大于255,也会被截断使其最大值为255。
sub_image(ImageMinuend, ImageSubtrahend : ImageSub : Mult, Add : ) ImageMinuend是被减图像 ImageSubtrahend是减去的图像 ImageSub是减后的结果图像 Mult是放大倍数 Add是附加灰度值
两者差异
其差异是有两个方面:
(1)abs_diff_image是两幅图像相减的绝对值,而sub_image是相减后的实际值。
(2)abs_diff_image的计算结果没有附加灰度值参数,而sub_image又附加灰度值参数。该参数可用于提升图像整体的灰度。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

