精华内容
下载资源
问答
  • 显著性图
    2021-04-15 21:00:52

    显著性图像检测(抠图)

    canny边缘loss

    Loss=L边缘+L全局
    在这里插入图片描述

    通过canny得出预测图像与mask图像的边缘,然后计算损失。

    bce_loss = nn.BCELoss(size_average=True)  #二分类交叉熵
    
    def opencv(images):
        for i in range(images.shape[0]):
            image = images[i, 0, :, :]
            image = image // 0.5000001 * 255   # 二值化
            image_2 = image.cpu().detach().numpy()
            image_2 = image_2.astype(np.uint8)
            img = cv2.Canny(image_2, 30, 150)
            img = img.astype(np.float32)
            img = torch.from_numpy(img)
            img.type = torch.float32
            if i != 0:
                if i != 1:
                    img_final = torch.cat((img_final, img), 0)
                else:
                    img_final = torch.cat((img_first, img), 0)
            else:
                img_first = img
        return img_final / 255
    
    loss=bce_loss(opencv(pre),opencv(label))
    
    

    两种方法加上这个边缘Loss:
    1.每一种输出都算上
    2.只算一种输出

    IoU Loss

    突出前景

    def _iou(pred, target):

    b = pred.shape[0]
    IoU = 0.0
    for i in range(0,b):
        Iand1 = torch.sum(target[i,:,:,:]*pred[i,:,:,:])
        Ior1 = torch.sum(target[i,:,:,:]) + torch.sum(pred[i,:,:,:])-Iand1
        IoU1 = Iand1/Ior1
    
        IoU = IoU + (1-IoU1)    #因为要算的是错误的大小,所以要1-IoU
    
    return IoU/b
    

    EGNet中的边缘loss

    Paper:http://mftp.mmcheng.net/Papers/19ICCV_EGNetSOD.pdf
    GitHub:https://github.com/JXingZhao/EGNet/
    在这里插入图片描述
    在EGNet中,是把阈值为0.5的二值化label扔进边缘损失函数中
    计算正常的loss部分是用0为阈值的二值化label

    def load_edge_label(im):
        """
        pixels > 0.5 -> 1
        Load label image as 1 x height x width integer array of label indices.
        The leading singleton dimension is required by the loss.
        """
        label = np.array(im, dtype=np.float32)
        if len(label.shape) == 3:
            label = label[:,:,0]
        # label = cv2.resize(label, im_sz, interpolation=cv2.INTER_NEAREST)
        label = label / 255.
        label[np.where(label > 0.5)] = 1.   #  0.5当做阈值
        label = label[np.newaxis, ...]
        return label
    
    def EGnet_edg(d,labels_v):
        target=load_edge_label(labels_v)
        # assert(d.size() == target.size())
        pos = torch.eq(target, 1).float()
        neg = torch.eq(target, 0).float()
        # ing = ((torch.gt(target, 0) & torch.lt(target, 1))).float()
    
        num_pos = torch.sum(pos)
        num_neg = torch.sum(neg)
        num_total = num_pos + num_neg
    
        alpha = num_neg  / num_total
        beta = 1.1 * num_pos  / num_total
        # target pixel = 1 -> weight beta
        # target pixel = 0 -> weight 1-beta
        weights = alpha * pos + beta * neg
    
        return F.binary_cross_entropy_with_logits(d, target, weights, reduction=None)
        
    

    论文中是把label二值化的部分加在dataset部分,我想直接通过后处理来实现,但是是一些奇奇怪怪的报错。。。
    下面贴上原本的load_edge_label部分:

    def load_edge_label(pah):
        """
        pixels > 0.5 -> 1
        Load label image as 1 x height x width integer array of label indices.
        The leading singleton dimension is required by the loss.
        """
        if not os.path.exists(pah):
            print('File Not Exists')
        im = Image.open(pah)
        label = np.array(im, dtype=np.float32)
        if len(label.shape) == 3:
            label = label[:,:,0]
        # label = cv2.resize(label, im_sz, interpolation=cv2.INTER_NEAREST)
        label = label / 255.
        label[np.where(label > 0.5)] = 1.
        label = label[np.newaxis, ...]
        return label
    

    然后在读取dataload的时候读取一下处理后的edge_label,扔到EGnet_edg里面去算就好了

    该论文在算loss的时候对loss进行大小的调整
    nAveGrad=10

    sal_loss = (sum(sal_loss1) + sum(sal_loss2)) / (nAveGrad * self.config.batch_size)
    
    更多相关内容
  • 显著性标记图片,含原图片和标记图片,CSSD和ECSSD共1200张。
  • 是一个显著性检测的典型算法,能够清楚的得到显著
  • 实现了显著性检测HC/LC/AC/FT的C++算法,并附带测试图片
  • crf图像显著性检测

    2018-05-30 00:31:59
    基于matlab的图像显著性检测,采用的图像分割方式是crf 推荐给大家
  • 显著性时经典的图像联合分割中所用的图像数据库。
  • 上面是一个特诊cost time: 99.35089445114136。特征 显著性图很重要。

    特征图 显著性图很重要

    图 对应的原始图形的数据

    然后可以进行显著性图和特征图的显示研究 

     

    上面是一个特诊图cost time: 99.35089445114136
    Duration: 0.07 seconds.

    lc的显著性图 

    展开全文
  • 显著性检测PR曲线

    2018-06-08 10:34:18
    显著性检测中画PR曲线的代码,需要自己生成的显著和Ground Truth。
  • GBVS视觉显著性代码

    2020-11-25 04:31:39
    GBVS是在itti模型基础上的改进算法,对视觉显著和注意机制的研究人员很有用。 GBVS是在itti模型基础上的改进算法,对视觉显著和注意机制的研究人员很有用。
  • 针对先前的立体图像显著性检测模型未充分考虑立体视觉舒适度和视差分布特征对显著区域检测的.影响,提出了一种结合立体视觉舒适度因子的显著性计算模型.该模型在彩色图像显著性提取中,首先利用 SLIC 算.法对输入...
  • 基于物体信息的图像显著性区域检测
  • 为了能正确检测显著性图中的多个显著性目标,提出了一种基于全局颜色对比的显著性目标检测算法。该算法首先提取图像的全局颜色对比度特征,然后把显著性图和全局颜色对比度作为特征输入条件随机场框架中,得到二值...
  • 我们从频域的角度检查五个最先进方法的显著性图创建中使用的信息内容。五个显著性检测器分别是Itti等,Ma和Zhang等,Harel等,Hou和Zhang等,Achanta等分别称为IT,MZ,GB,SR和AC。 我们把我们提出的方法称为IG。 ...
  • 针对现有图像显著性区域提取算法都是以图像像素为基本单元进行计算,因而会导致显著性表示中一致性较差、运算量较大等问题,提出一种新的图像显著性建模方法,即以超级像素为基本单元,提取颜色直方、区域纹理等...
  • 这是一种图像视觉显著性提取方法,对应文献S. Goferman, L. Zelnik-Manor, and A. Tal, “Context-aware saliency detection,” in IEEE CVPR, 2010, pp. 2376–2383.该文献中的模型同时考虑了图像的局部特征和全局...
  •  提出一种彩色图像分割算法主要利用区域间显著性。先是运用了Kmeans聚类的算法对彩色图像进行分割。...根据需要设定显著性阈值,得到目标显著性区域并将其他非显著性区域合并。以此达到目标区域与背景的分离。
  • 针对传统基于像素的显著性模型存在的边缘...结果表明,生成的显著性图轮廓清晰,边缘锐利,同等条件下近处及深度变化显著的区域能够获得更高的显著性.该方法符合人类视觉感知特征,适用于移动机器人障碍物检测及场景识别.
  • 本文提出的基于显著性加权的图像检索方法不需要分割出显著性区域,而以显著性加权的方式建立了新的颜色特征和纹理特征,从而增加了显著性区域的颜色与纹理特征的权重。通过对4种主要的显著的实验比较发现该方法能...
  • SR_图像显著性检测_

    2021-09-29 06:08:24
    SR算法[7]是一种基于全局对比度采用RGB颜色空间计算距离的空间频域分析的剩余谱算法。此算法通过分析输入图像的对数谱的方式来获取空间域中输入图像的剩余谱,以此来构造显著图
  • gbvs图像显著性检测代码(matlab)
  • 对图像的内容分析,进行显著性信息检测,得到深度内容
  • 此文档旨在帮助初学图像处理的朋友了解视觉显著性检测,代码为matlab
  • 图像显着检测算法matlab代码视觉显着项目 此存储库中包括: 显着对象检测(Hou和LSMD)的两种实现的代码 关于我们项目的综合报告,包括算法如何工作,算法如何不同,算法各自的结果以及我们的发现。 由于Github的...
  • 针对低水平特征显著性目标检测算法在检测图像时不能检测到不同大小的目标,而且精确度较低的问题。提出一种新的算法,通过将颜色分布,方向对比度以及基于频率信息这3种特征运用条件随机场进行最优全值线性融合后,...
  • 静态图像显著性分析程序,利用matlab开发。加州理工三位教授所写。
  • 对图像进行显著性增强,并且将显著新部分分割处理
  • 针对合成孔径雷达(SAR)图像中普遍存在...最后将两阶段的图融合得到增强显著性图。在SAR海冰数据集上对所提算法、7种显著性算法及3种海冰分割方法进行对比实验。结果表明,所提算法可以有效检测出孤立浮冰,抑制背景区域。
  • 基于显著性的图像分割

    千次阅读 2019-04-22 10:26:21
    在这两种方法中,Aggressive显著性图似乎为大多数图像产生了精确的掩模。细粒度显著性方法产生的图像中的显著性目标更为“笨重”。如果图像很长或有卷须,则这些部分通常会与图像的其余部分断开连接。然而,由于其...
    TB1CHdeRCzqK1RjSZFjXXblCFXa.jpg

    本文为 AI 研习社编译的技术博客,原标题 :

    Saliency Based Image Segmentation

    作者 | Tim Chin

    翻译 | GAOLILI      

    校对 | Pita        审核 | 酱番梨       整理 | 立鱼王

    原文链接:

    https://towardsdatascience.com/saliency-based-image-segmentation-473b4cb31774

    通常我们看到一幅图像的时候,我们都会关注于图像中的某一点上。这有可能是一个人,一个建筑物或者甚至是一个水桶。图像的清晰部分几乎没有什么意义,这些部分在图像中通常的特点是缺少关注点、颜色单调和纹理平滑。当这样一类图像出现的时候,它们是从图像剩余部分分割出感兴趣目标的理想图像。这篇文章就探索了这类显著性图像的分割。

    显著性图像的例子。左边的水桶和右边的人就是感兴趣的目标。

    这个项目最初来源于对于发掘一个自动生成图像三分图方法的兴趣。当和抠图算法相结合的时候三分图就是图像的掩膜。这个抠图算法用于关注前景和背景细节的图像分割。正常情况下一个三分图包含了前景的白色部分、背景的黑色部分和不确定的灰色区域。

    TB10zBOSgDqK1RjSZSyXXaxEVXa.png

    三分图的例子(来源于参考文献[2])

    大多数抠图算法的问题就是它们希望由用户提供三分图,这是一个耗时的工作。这里有两篇我参考的主要的论文,他们尝试去自动生成三分图[1][2]。在第一篇论文里,Hsieh等人使用了一个 相当直接和易完成的方法。但不幸的是他们的方法并不是完全自动的,因为它需要用户给Grabcut算法提供一个矩形区域。Gupta等人而是使用显著性方法去预测感兴趣的区域。然而他们的显著性方法非常复杂,结合了三种显著性算法的结果。其中一种算法使用了卷积神经网络,这是一种我希望为了简单实现而避免使用的技术。

    除了需要用户提供信息之外,Hsieh's等人的算法产生的结果是非常合理的。我想如果我能够使Grabcut部分自动化,那么他们算法的其余部分就会解决最初始的那个问题。我是从Gupta等人提供的方法那里得到的去创造这样一个自动方法的灵感。

       方法

    很多的图像分割方法的目标就是将图像二值化为感兴趣的区域。这个项目的目标是不一样的。首先,我想大致的找出感兴趣区域。将高斯模糊滤波器应用于图像。从模糊图像中生成平均15个像素大小的超像素。超像素算法旨在基于像素区域中的值的颜色和距离来打破图像。具体来说,用了简单线性迭代聚类算法(SLIC)。

    TB11eykShjaK1RjSZKzXXXVwXXa.jpg

    水桶和人的超像素图

    超像素将图像分为几乎一样大小的区域。这样做的好处之一就是超像素允许区域的泛化。我们可以假设超像素里的大部分像素有着相似的属性。

    与确定图像中的超像素并行地,计算图像的显著图使用了两种不同的显著性方法。第一种方法使用了内置的OpenCV方法,叫细粒度显著性。第二种方法涉及获取细粒度显著图像的平均值并从图像的高斯模糊图中减去它,就得到了新图像的绝对值。

    这两种方法的不同之处在于结果的侵略性。下面的两张图象高亮了感兴趣区域。细粒度显著性方法产生的图像相对柔和一些。另外,细粒度显著性图像主要勾勒出显著图像的边界,尽管另一种方法也捕获了显著图的内部。与细粒度方法相比积极的方法确实产生了更多的噪声。消除噪声是这个过程的下一步。

    TB1QP0ZScbpK1RjSZFyXXX_qFXa.jpg

    使用细粒度方法产生的水桶和人的显著性图

    TB1AsFZSjTpK1RjSZKPXXa3UpXa.jpg

    使用积极显著性产生的水桶和人的显著性图

    以下的技术是从Gupta等人的论文中挖掘出来的。为了对图像进行二值化,通过迭代从彩色图像生成每个超像素。如果显著性图像超像素区域的中间像素值大于阈值T1,那么这整个超像素就二值化为白色。否则整个超像素就是黑色。T1由用户选择。在参考文献[2]中,T1被设置为显著性图像中最大像素值的30%,但是在该项目中使用的是25%。

    在二值化图像之后,扩张图像基于使用哪种显著性技术。在细粒度显著方法中,图像被扩大为超像素平均值的两倍大小。Aggressive显著性方法没有扩张图像。图像中出现的噪声越大,任何扩张都有风险。

    TB1TGR2SgHqK1RjSZJnXXbNLpXa.png

    细粒度显著性方法(左)和二值化Aggressive显著性方法扩张后的水桶图像

    最后一步又取决于使用哪种显著性方法。在这两种方法中,都提取了白色像素最大的区域。在OpenCV中,这个操作可以通过寻找图像中的轮廓并选择具有最大面积的轮廓来实现。对选择出来的区域会匹配一个包围框。

    据观察,细粒度显著性方法常常会生成碎片区域。在包围框生成后,其他任何落在包围框里的不属于最大区域的白色部分都会被添加到包围框里。包围框的边界会增大来包围这些区域。Aggressive显著性方法并不需要这样做。通常最大区域的包含量超过了预期。

    最后一步是将最终找到的包围框输入到Grabcut算法中。Grubcut是分割图像的常用方法。包围框给了Grabcut函数什么会被算法最终分割为背景和前景。在包含Grubcut应用程序的大多数软件包中,用户编辑矩形区域可以为算法产生更好的结果提供更多的信息。在这个项目中,使用了OpenCV内置的Grubcut功能。

    TB15Yx0SbrpK1RjSZTEXXcWAVXa.jpg

    在桶的实验中,两种方法都产生了相同的结果

    此过程在[1]开始的地方结束。在将来我计划继续开发这种自动tripmap生成器。

       结果

    在这两种方法中,Aggressive显著性图似乎为大多数图像产生了精确的掩模。细粒度显著性方法产生的图像中的显著性目标更为“笨重”。如果图像很长或有卷须,则这些部分通常会与图像的其余部分断开连接。然而,由于其保守的性质,当图像特别嘈杂时,细粒度方法更好。掩模不一定能够捕获整个图像,但它并没有像Aggressive方法那样频繁地溢出。

    TB1xAl0SXzqK1RjSZFCXXbbxVXa.jpg

    两种方法的样本结果

    还要必要指出,对于[1]中开发的算法,欠发达的掩模并不坏。由于最终目标是开发tripmap图像,因此掩模将由灰色区域填充。该灰色区域将有助于区分前景和背景。

    对于任何的每周的读者来说,使用C++学习OpenCV并实现这个算法是非常耗时的。对于时延感到很抱歉,但希望将来这个项目会继续并有更多的内容!雷锋网雷锋网雷锋网(公众号:雷锋网)

    Github 代码地址:

    https://github.com/TimChinenov/GraspPicture

       参考文献

    [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://ai.yanxishe.com/page/TextTranslation/1549

    AI研习社今日推荐:Python中文书籍大集合

    100本Python中文电子书,6份源代码,Python从入门到出家,一条龙服务。

    包含Python基础、进阶、爬虫、算法实现、深度学习、TensorFlow、NLP等等

    友情提示:文件大小为2.89GB,慎用流量下载,可以先收藏哟~~!

    点击链接即可获取:https://ai.yanxishe.com/page/resourceDetail/676

    展开全文
  • 针对遥感图像融合中,不同地物区域对空间与光谱信息要求不同的问题,提出了一种基于显著性分析的自适应遥感图像融合算法。结合多尺度谱残差分析模型,将遥感图像分为纹理、边缘丰富的显著区域与纹理、边缘较少的非...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 232,035
精华内容 92,814
关键字:

显著性图