当前位置 博文首页 > hallobike的博客:基于自适应显着性的图像分割

    hallobike的博客:基于自适应显着性的图像分割

    作者:[db:作者] 时间:2021-09-14 22:02

    前言介绍

    成产品及系统平台的现场演示,编写技术应用服务方案等,编写投标类方案文件及标书的制作;通常,当我们看到一张图片时,会在图片中聚焦一个焦点。这个可能是一个人,一座建筑物甚至是一个桶。 其他没有聚焦区域虽然很清晰,但是却由于颜色单调或者纹理较为平滑而很少引起关注。当遇到此类图像时,我们希望从图像中分割出感兴趣的对象。下面给出了显式图像的示例,本文探讨了此类显式图像的分割方法,也称为显着性的图像分割。

    完整代码地址:https://github.com/YouthJourney/Computer-Vision-OpenCV/tree/master/image_segmentation

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wQaTbA2u-1603161896670)(en-resource://database/963:1)]

    在上面的图像中,桶(左)和人(右)是感兴趣的对象

    最开始的分割方式起源于希望能够自主寻找图像中的Trimap。Trimap是图像掩码(mask),当与掩码算法配合使用时,可用于分割图像,同时能够提示前景和背景之间的细节。Trimap通常包含定义前景的白色区域,定义背景的黑色区域以及代表不确定区域的灰色区域。具体形式如下图所示。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HdFEfk2Y-1603161896674)(en-resource://database/965:1)]

    大部分分割图像使用的就是抠图算法,它的问题在于,他们依靠用户自己提供Trimap,这就特别耗时而且不一定准确。下面主要介绍两种自主生成Trimap的方法。

    1、比较简易并易于实现的方法,缺点是它不是完全自主的,要求用户为Grabcut算法提供一个矩形区域。若忽略认为给出矩形区域,能产生很好地分割效果。

    2、使用显式方法预测感兴趣的区域。缺点是该方法非常复杂,是将三种不同的显式性算法的结果结合在一起,而且其中一种算法还利用了卷积神经网络。它可以完美解决自主分割的问题

    本文方法

    对于大多数形式的图像分割,目标都是将图像二值化为感兴趣的区域。这个本文介绍的方法的目标也是这样的。首先,大致确定感兴趣的对象在哪里。再将高斯模糊应用于图像,之后在模糊图像中生成平均15像素大小 的超像素。最后超像素算法旨在根据像素区域中值的颜色和距离来分解图像。具体来说,使用了简单的线性迭代聚类(SLIC)算法。具体形式如下图所示。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3j0SH4bV-1603161896676)(en-resource://database/967:1)]

    超像素将图像分解为大致相同的区域。这样的一个优点是,超像素允许区域的泛化。我们可以假设超像素内的大多数像素具有相似的属性。

    在确定图像中的超像素的同时,计算图像的显式性图。有两种不同的显式性技术。第一种方法使用OPenCV内置的方法,即细颗粒显式性;第二种方法涉及获取细颗粒显式性图像的平均值,然后从图像的高斯模糊版本中减去平均值,最后就得到新图像的绝对值。

    下图显示了两种方法的效果,使用颗粒显式性方法产生的图像较为柔和,勾勒出了图像的边界;使用高斯模糊减去平均值的方法也捕获出了图像内部,但是相比较前者,产生了更多了噪音,需要对图片进行去噪处理。

    在这里插入图片描述

    为了将图像二值化,对从彩色图像生成的每个超级像素进行迭代。如果显式图像内该超像素区域的中值像素值大于阈值T1,则整个超像素将被二值化为白色。否则,整个超像素将保留为黑色。T1由用户选择,一般情况下,将T1设置为显式图像中最大像素值的25%-30%。

    对图像进行二值化之后,基于所使用的的显式性技术对图像进行扩张。方法一是将图像放大为平均尺寸的两倍。方法二没有进行放大,因为图像中存在较大噪音扩大存在风险。处理结果如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aWP55tkb-1603161896682)(en-resource://database/973:1)]

    最后一步操作取决于使用的是哪种显式性。在这两种方法的结果中,都提取最大的白色像素区域。通过查找
    图像中的轮廓并选择面积最大的轮廓来执行此操作,之后将边界框拟合到所选区域。

    根据一般性结果,第一种显式性方法通常会导致区域碎片化。生成边界框后,将落入该框的不属于最大区域的所有其他白色区域添加到该框。框的边界增加到包括这些区域,第二种显式性方法不需要这样做。通常,最大获取的区域会超出期望的数量。

    最后一步是将最终找到的边界框提供给Grabcut算法。Grabcut是用于分割图像的常用方法,该方法会将绝
    对是背景和前景的内容分开。这里面我们直接使用OpenCV的内置Grabcut函数。处理的结果如下所示。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I19jetnu-1603161896683)(en-resource://database/977:1)]

    结果

    两种显着性计算方法对于结果会有一些影响。第一种显着性方法更加适用于含有噪声的图像中,在含有噪声的图像中不会像第二种显式性方法造成分割结果的溢出。,但是如果图像太长或有卷须,则这些部分通常会与图像的其余部分断开连接。

    下面是两种方法分割更多图像的示例结果。
    在这里插入图片描述
    在这里插入图片描述

    参考文献:
    【1】C. Hsieh and M. Lee, “Automatic trimap generation for digital image matting,” 2013 Asia-Pacific Signal and Information Processing Association Annual Summit and Conference, Kaohsiung, 2013, pp. 1–5.
    【2】Gupta, Vikas & Raman, Shanmuganathan. (2017). Automatic Trimap Generation for Image Matting.

    源码地址:https://github.com/TimChinenov/GraspPicture

    cs