图像处理+显著性检测

2016-10-20 18:05:13 u012507022 阅读数 31613

视觉显著性检测(Visual saliency detection)指通过智能算法模拟人的视觉特点,提取图像中的显著区域(即人类感兴趣的区域)。

视觉注意机制(Visual Attention Mechanism,VA),即面对一个场景时,人类自动地对感兴趣区域进行处理而选择性地忽略不感兴趣区域,这些人们感兴趣区域被称之为显著性区域。如图1所示,当看到这幅图像时,图中的四个人最能引起人的注意。


图1

人类视觉注意机制有两种策略:

1)自底而上基于数据驱动的注意机制;

仅受感知数据的驱动,将人的视点指导到场景中的显著区域;通常与周围具有较强对比度或与周围有明显不同的区域吸引自下而上的注意。利用图像的颜色、亮度、边缘等特征表示,判断目标区域和它周围像素的差异,进而计算图像区域的显著性。图2为自下而上的注意,第1列浅灰色条和第 2 列的竖直摆放的条形能立即引起人的注意。

 
图2
2)自上而下基于任务驱动的目标的注意机制;

由人的“认知因素” 决定, 比如知识、预期和当前的目标.对图像的特定特征来计算图像区域的显著性。图3为自上而下的注意, 监控任务下, 场景中的人体能引起注意。

  

图3

在机器人和计算机视觉领域, 研究者们对视觉注意机制的兴趣与日俱增, 因为该机制可从大量的视觉数据中确定出最相关的部分。因此,近年来研究者们在特征综合理论和Guided search等注意的心理学模型基础上, 提出了大量的可计算的注意力选择模型,以用于模拟人类的视觉注意机制。这些模型包括: 基于认知、贝叶斯、决策论、信息论、图模型、频域分析和基于模式分类的等人视觉注意模型。

一、认知注意模型
Itti于1998年提出基于显著性的视觉注意模型,并在2001年度Nature上对该模型理论作了进一步的完善。Itti的显著性模型最具代表性,该模型已经成为了自下而上视觉注意模型的标准。其基本结构如图4所示。

图4

对于一幅输入的图像,该模型提取初级视觉特征:颜色(RGBY)、亮度和方位、在多种尺度下使用中央周边(Center-surround)操作产生体现显著性度量的特征图,将这些特征图合并得到最终的显著图(Saliency map)后,利用生物学中赢者取全(Winner-take-all)的竞争机制得到图像中最显著的空间位置, 用来向导注意位置的选取,最后采用返回抑制 (Inhibition of return) 的方法来完成注意焦点的转移。
二、决策论注意模型
决策论的观点认为,不断进化的感知系统能产生关于周围环境的、在决策论意义下的最优决策。要点在于视觉注意应被与当前任务有关的最优性所驱动。决策论注意模型既能表达自下而上的注意,也能表达自上而下的注意。并已经在计算机视觉中得到了成功的应用,如分类和注意定位预测,均取得很高的准确率。

三、频域分析注意模型
基于频谱分析的显著性模型,形式简洁,易于解释和实现,并且在注意焦点预测和显著区域检测方面取得了很大的成功,由于基于快速傅里叶变换实现,能够满足实时要求,和iNVT类似的模型相比,运算速度可提高近10倍。美中不足的是, 其生物合理性不是非常清楚。
四、图论注意模型
图模型是一个使用图对随机变量之间的条件依赖结构进行表示的概率框架。这种类型的注意模型,把眼动看作一个时间序列。由于有大量的隐变量影响眼球运动的产生,因此,该类注意模型使用了隐马尔科夫模型、动态贝叶斯网和条件随机场等方法。图模型可以对复杂的注意机制建模,因此能取得较好的预测能力,缺点在于模型的高复杂度,尤其涉及训练和可读性时。






注:本文是篇阅读笔记,更多更详细内容请参考论文“引入视觉注意机制的目标跟踪方法综述”及链接

Matlab 代码: http://www.vision.caltech.edu/~harel/share/gbvs.php

参考文献:[1]黎万义, 王鹏, 乔红. 引入视觉注意机制的目标跟踪方法综述[J]. 自动化学报, 2014, 40(4): 561-576

更多资源:http://blog.csdn.net/linzertling/article/details/39585153

                    http://blog.csdn.net/anshan1984/article/details/8657176

                    http://blog.sina.com.cn/s/blog_c303278b0101air2.html

                    http://blog.sina.com.cn/s/blog_14ca128d50102x0f2.html

                    http://www.cnblogs.com/CCBB/archive/2011/05/19/2051442.html

                    http://www.scholarpedia.org/article/Visual_salience

                    http://zhidao.baidu.com/link?url=Eif1n0dunVkiizXII2j6uLN-uEhzVDBCZvRt1TWqb9wURr5ZSIld7MHwKYIq8Gzk7I1iPSvtd-l83XztPlyNAq

2019-10-24 09:12:25 wsp_1138886114 阅读数 3998

一、显著性检测研究现状

  1. 建立计算模型进行显著性检测。
    思想是:对输入图像首先进行多个特征通道和多尺度分解,再进行滤波得到特征图,再对特征图融合得到最终显著图。
    2007年,Hou X等人提出SR方法[2],该方法利用谱残差模型进行显著性检测,该方法认为图像的信息都包含在图像的幅度谱信息中,因此从图像的幅度谱中减去先验知识的幅度谱,剩下的就是显著部分的幅度谱,进而得到显著区域。
    一些经典算法,如Itti,SR,FT,GBVS的代码和显著性检测的数据集整理
    相位谱法。

  2. 将显著性检测定义为二元分割问题来处理
    2007年,T.Liu等人提出一种将显著性检测作为图像分割问题来处理的思路[3],自此出现了大量的显著性检测模型,掀起了显著性检测的第二波热潮。

    2009年,Achanta R等人提出FT模型来进行显著性检测[4],此模型可以输出具有明确定义的边界的全分辨率显著图,通过保留来自原始图像的更多频率内容来保留这些边界。此方法利用颜色和亮度特征的中央周边算子来得到显著图,实施简单,计算效率高

    2011年,Cheng M M等人提出了一种基于区域对比度的显著对象提取算法[5]。该算法同时评估全局对比度差异和空间加权相干性得分来确定显著性区域,此算法是简单,高效,多尺度的,并且可以生成全分辨率,高质量的显著图。这些显著图被进一步用于初始化GrabCut的新颖迭代版本,以进行高质量的显著对象分割。

    2012年,Perazzi F等人重新考虑了之前方法的一些设计选择,并提出了基于对比度的显著性检测的概念清晰且直观的算法[6]。此算法由四个基本步骤组成:(1)将给定的图像分解为紧凑且感知均匀的元素,以抽象不必要的细节;(2)基于这种抽象,计算两个对比度度量,评估这些元素的独特性和空间分布;(3)从元素对比度中推导出显著性度的度量,该度量生成一个像素精确的显著图,它统一覆盖感兴趣的对象并始终分离前景和背景;(4)文章表明,完整的对比度和显著性估计可以使用高维高斯滤波器统一制定,这有助于此方法的概念简单性,并使其具有线性复杂性的高效实施。

  3. 基于深度学习进行显著性检测
    2015年,开始引入CNN进行显著性检测,与基于对比线索的大多数经典方法不同,基于CNN的方法消除了对手工特征的需求减轻了对中心偏见知识的依赖,因此被许多科研人员所采用。基于CNN的模型通常包含数十万个可调参数和具有可变接受字段大小的神经元。神经元具有较大的接受范围提供全局信息,可以帮助更好地识别图像中最显著的区域。CNN所能实现前所未有的性能使其逐渐成为显著性物体检测的主流方向。

    2015年,He S等人提出了一种新的超像素卷积神经网络方法,称为SuperCNN,可以有效地学习显著性的内部表示[7]。与传统的卷积网络相比,SuperCNN有四个主要特性:首先,能够学习分层对比度特征;第二,恢复了超级像素之间的上下文信息;第三,受益于超像素机制,对密集标记的图像所需的预测数量大大减少;第四,通过利用多尺度网络结构检测显著性区域可以不受区域大小的约束。

    2017年,Hou Q等人提出了一种新的显著性检测方法,在HED(Holistically-Nested EdgeDetection)的基础上,增加了一种高层信息指导低层信息的Skip Layer结构,从而构建了一种简单,有效,快速的端对端的显著性物体检测网络结构[8]。此方法注意到了边缘检测、语义分割和显著性检测几个领域的一些共性和最新的趋势:

    1. 从局部分析逐渐过渡到的全局分析,
    2. HED中的Skip layer结构对高质量的输出很有帮助,
    3. 显式的让高层语义信息去指导和帮助低层语义信息更好的定位显著性物体位置的同时精确的确定其范围很有帮助。

总而言之:
显著性就是可以快速引起你注意的对象或者物体,在图像或者视频中显著性检测的结果往往是图像或者视频中对象,在神经学科中显著性检测被描述为注意力机制,目的是聚焦或者缩小看到的对象场景重要部分,显著性检测可以自动处理图像中对象表示。
生物皮层对图像对比度比较敏感,通过图像对比度可以实现图像显著性特征提取。

二、基于谱残差法的显著性检测

从信息理论角度:信息可分为冗余部分和变化部分。人们的视觉对变化部分更敏感。视觉系统的一个基本原则就是抑制对频繁出现的特征的响应,同时对非常规的特征保持敏感。那么就将图像分为如下两部分:
在这里插入图片描述
作者对图像的 log\log 频谱发下了如下规律(log是自然对数): E{A(f)}1/fE\{ \mathcal{A}(f) \} \propto 1/f
大量图像的 log\log 频谱的平均值是和频率呈现正比关系的。(左下图)

在这里插入图片描述
如图可知大量图像的log频谱和频率的曲线形状,在log-log scale上,几乎是一条直线。文中的log频谱就是对图像傅里叶变换后的振幅谱取自然对数。然后作者又提出了既然大量图像的log振幅谱都差不多趋近一条直线,那么一幅图像的log振幅谱减去平均log振幅谱不就是显著性部分了吗?这就是作者提出的:Spectral Residual理论。(右上图)

作者定义Spectral Residual:R(f)=L(f)A(f)\mathcal{R}(f) = \mathcal{L} (f) - \mathcal{A}(f)

给定图像 I(x)\mathcal{I}(x) 首先计算其2维离散傅里叶变换,将其从空间域转换到频域,对幅值取对数后得到 log谱L(f)\mathcal{L}(f): 由于 log\log 曲线满足局部线性条件,所以用局部平均滤波器 hn(f)h_n(f)对其进行平滑,获得log\log谱的大致形状。R(f)\mathcal{R}(f) 就是图像f的Spectral Residual。计算过程如下表示:
A(f)=F[I(x)]P(f)=φ(F[I(x)])L(f)=log(A(f))R(f)=L(f)hn(f)L(f) \begin{aligned} \mathcal{A}(f) &= | F[ \mathcal{I} (x) ]| \\ \mathcal{P}(f) &= \varphi(F[ \mathcal{I} (x) ]) \\ \mathcal{L}(f) &= \log(\mathcal{A}(f)) \\ \mathcal{R}(f) &= \mathcal{L}(f) - h_n(f)*\mathcal{L}(f) \\ \end{aligned}

S(f)=g(x){F1[exp(R(f)+iP(f))]2} \mathcal{S}(f) = g(x) * \left \{ F^{-1}\left [ \exp(\mathcal{R}(f) + i \mathcal{P}(f) ) \right ] ^2 \right \}

参数说明:

FF 代表2维离散傅里叶变换,|·|代表其幅值,φφ 代表其相位
I(x)\mathcal{I}(x)为输入图像,对其傅里叶变换,并且求出振幅谱为 A(f)\mathcal{A}(f)
P(f)\mathcal{P}(f)是其相位谱(复数 x+i*y 的相位是arctan(y/x))。
L(f)\mathcal{L}(f)是log振幅谱。h是一个n*n均值滤波的卷积核,作者设n=3。
R(f)\mathcal{R}(f)就是Spectral Residual谱。再将 R(f)+i*P(f)求出自然指数exp。
注意:由欧拉公式可知:
exp(r+iΘ)=exp(r)(cos(Θ)+isin(Θ))=exp(r)cos(Θ)+iexp(r)sin(Θ) \begin{aligned} \exp(r+i*Θ)&=\exp(r)* (\cos(Θ) + i*\sin(Θ)) \\ &= \exp(r)*\cos(Θ) + i*\exp(r)*\sin(Θ) \end{aligned}

ΘΘ是相位谱。其实 ΘΘ 的正余弦也可由傅里叶谱的实部和虚部求出:sin(Θ)=ImageIm/Amplitude\rm sin(Θ) = ImageIm/Amplitude; cos(Θ)=ImageRe/Amplitude\rm cos(Θ) = ImageRe/Amplitude。然后对其,傅里叶反变换,在进行一个高斯模糊滤波就得到了所谓的显著性区域。效果如下:
在这里插入图片描述
演示代码:查看matlab以及C++代码请点击

以下代码有点问题。

import cv2
import numpy as np


def visual_saliency_detection(mat):
    # 傅里叶变换 -> 拆分为实部,虚部 -> 振幅
    fourier = cv2.dft(np.float32(mat), flags=cv2.DFT_COMPLEX_OUTPUT)
    re = fourier[:, :, 0]
    im = fourier[:, :, 1]
    base = cv2.magnitude(re, im)

    # 对数谱 -> 平滑曲线 -> 显著性余谱
    LogAmplitude = cv2.log(base)
    blur = cv2.blur(LogAmplitude, (3, 3))
    residual = LogAmplitude - blur

    # 指数还原对数谱
    residual = cv2.exp(residual)

    # 求原频域上实虚的夹角, 利用夹角还原实虚
    Sine = im / base
    Cosine = re / base
    tmp1_re = residual * Cosine
    tmp2_im = residual * Sine

    # 傅里叶逆变换
    ifourier = cv2.merge((tmp1_re, tmp2_im))
    img_idf = cv2.idft(ifourier)
    img_idf = cv2.magnitude(img_idf[:, :, 0], img_idf[:, :, 1])
    img_idf = cv2.GaussianBlur(img_idf**2, (7, 7), 0)

    # 优化结果显示
    min_v, max_v, _, _ = cv2.minMaxLoc(img_idf**2)
    _, thre = cv2.threshold(img_idf, 0, 255, cv2.THRESH_TOZERO)
    img_idf = thre * (255 / max_v-min_v)
    return img_idf



if __name__ == '__main__':
    img = cv2.imread(r'C:\Users\xxx\Desktop\002.png',0)
    res = visual_saliency_detection(img)
    cv2.imshow('res',res)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

三、基于全局对比度图像显著性检测(LC)

计算某个像素在整个图像上的全局对比度,即该像素与图像中其他所有像素在颜色上的距离之和作为该像素的显著值。
图像 II 中某个像素 IkI_k 的显著值计算如下:
SalS(Ik)=IiIIkIiSalS(I_k) = \sum_{\forall I_i \in I} ||I_k - I_i||
其中IiI_i的取值范围为 [0,255][0, 255], 即为灰度值。
给定一张图像,每个像素IkI_k的颜色值已知。假定Ik=amI_k = a_m,则上式可进一步重构:
SalS(Ik)=ama0+ama1+...+amanSalS(Ik)=n=0255fnaman \begin{aligned} SalS(I_k) &= ||a_m - a_0||+||a_m - a_1|| +...+||a_m - a_n|| \\ SalS(I_k)&= \sum_{n=0} ^{255}f_n||a_m - a_n|| \end{aligned}
其中,fnf_n表示图像中第nn个像素的频数,以直方图的形式表示。

代码演示【参考原代码请点击】 ,我使用了numpy重写了原函数,优化了代码运行时间,图片分辨率越大越省时间

import numpy as np
import time
import cv2


def diag_sym_matrix(k=256):
    base_matrix = np.zeros((k,k))
    base_line = np.array(range(k))
    base_matrix[0] = base_line
    for i in range(1,k):
        base_matrix[i] = np.roll(base_line,i)
    base_matrix_triu = np.triu(base_matrix)
    return base_matrix_triu + base_matrix_triu.T

def cal_dist(hist):
    Diag_sym = diag_sym_matrix(k=256)
    hist_reshape = hist.reshape(1,-1)
    hist_reshape = np.tile(hist_reshape, (256, 1))
    return np.sum(Diag_sym*hist_reshape,axis=1)

def LC(image_gray):
    image_height,image_width = image_gray.shape[:2]
    hist_array = cv2.calcHist([image_gray], [0], None, [256], [0.0, 256.0])
    gray_dist = cal_dist(hist_array)

    image_gray_value = image_gray.reshape(1,-1)[0]
    image_gray_copy = [(lambda x: gray_dist[x]) (x)  for x in image_gray_value]
    image_gray_copy = np.array(image_gray_copy).reshape(image_height,image_width)
    image_gray_copy = (image_gray_copy-np.min(image_gray_copy))/(np.max(image_gray_copy)-np.min(image_gray_copy))
    return image_gray_copy


if __name__ == '__main__':
    file = r"C:\Users\xxx\Desktop\003.png"

    start = time.time()
    image_gray = cv2.imread(file, 0)
    saliency_image = LC(image_gray)
    cv2.imwrite(r"C:\Users\xxx\Desktop\006_1.png",saliency_image*255)
    end = time.time()

    print("Duration: %.2f seconds." % (end - start))
    cv2.imshow("gray saliency image", saliency_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
'''
Duration: 0.08 seconds.
'''

在这里插入图片描述
在这里插入图片描述
上述代码中 diag_sym_matrix() 函数演示详情请点击。

diag_sym_matrix(k=5):
 [[0. 1. 2. 3. 4.]
  [1. 0. 1. 2. 3.]
  [2. 1. 0. 1. 2.]
  [3. 2. 1. 0. 1.]
  [4. 3. 2. 1. 0.]]
2.1 基于直方图对比度的显著性检测(HC)

HC的显著性图生成主要是基于输入图像的颜色值直方图分布,生成像素级别的显著性值,每个像素点的显著性值是它跟剩下全部图像像素点的对比度(色差)来定义的:
S(Ik)=IkID(Ik,Ii)(1)S(I_k) = \sum_{\forall I_k \in I}D(I_k,I_i) \tag{1}

其中D(Ik,Ii)D(I_k,I_i)是空间 L*a*b 中两个像素的颜色距离度量,上式经过扩展像素等级变如下方程:
S(Ik)=D(Ik,I1)+D(Ik,I2)+...+D(Ik,IN)(2)S(I_k) =D(I_k,I_1) +D(I_k,I_2)+...+D(I_k,I_N) \tag{2}
其中NN 为图像 II中的像素数量。
从上式中看出拥有相同像素的值,得到显著性值会相同,把相同的像素值都归为同一类别CjC_j,对每种颜色得到显著性值:
S(Ik)=S(cl)=j=1nfiD(cl,cj)(3)S(I_k) = S(c_l) = \sum_{j=1}^n f_iD(c_l,c_j) \tag{3}
其中 clc_l是像素IkI_k的颜色值,nn 是不同像素颜色的数量,fif_i是图像I中像素值CjC_j出现的频率。这样把上面的像素计算转换为基于直方图的颜色值查找计算。

  1. 基于直方图的加速
    把对每个像素点的全图查找 O(N2)O(N^2) 变换为 O(N)+O(n2)O(N)+O(n^2),正常情况直方图的BIN(N)为256,通过对颜色进行量化,每个颜色通道量化为12个不同值。考虑到自然图像中的颜色仅仅包含了全颜色空间中很小的一部分,通过忽略出现频率较低的颜色来进一步减少颜色数量。通过选择高频颜色并且保证这些颜色覆盖图像像素不低于95%的颜色,最终达到了n=85个颜色。剩下的像素颜色,包含不高于5%的图像像素,这部分颜色被直方图中最邻近的颜色替代。

    Lab 色彩空间只在L上计算,但是这种做法有很大的弊端,就是颜色的区分度下降,色彩空间多维度信息没有有效利用,所以一般会对Lab色彩空间的三个维度同时量化生成 颜色值,然后再根据频次优化出现的颜色值范围。确保这些颜色值可以覆盖95%以上的像素点。

  2. 颜色空间平滑
    以通过建立直方图使用色彩空间量化的方法加速全局对比度的计算,但是量化色彩空间本身就是人为的,有可能把相似的颜色量化成不同的值,为了减少这种现象导致显著性噪声出现,所以对得到显著性值最后完成一个模糊操作,采取一套平滑程序来改善每个颜色的显著值。用相似颜色的显著值加权平均来代替每个颜色(以 L*a*b* 距离测量)的显著值。选择m=n/4。个最近的颜色作为代表来改善颜色c的显著值:
    S(c)=1(m1)Ti=1n(TD(c,ci))S(ci)(4)S'(c) = \frac{1}{(m -1)T} \sum_{i=1}^n(T-D(c,c_i))S(c_i) \tag{4}

    其中,T=i=1mD(c,ci)T = \sum_{i=1}^mD(c,c_i)是颜色c和它的m个最近的颜色CiC_i之间的距离之和,归一化因数来自公式:i=1m(TD(c,ci))=(m1)T\sum_{i=1}^m(T-D(c,c_i)) = (m-1)T
    在最后的实现中,在RGB颜色空间中进行颜色量化,每个色彩空间均匀量化为12等分,共12312^3色彩种类。再在Lab颜色空间中进行距离度量。

算法实现流程:
1、量化颜色通道。找出图像中一共有多少种颜色以及对应的像素总数。
2、按照像素总数从大到小排序,并同时记录相应颜色。
3、找出像素数目覆盖图像不小于95%的高频颜色,以及其他的不高于5%的颜色种类,假设高频颜色共有maxnum种。
4、把低频颜色的像素归类到与它lab颜色距离相距最近的高频颜色中。
5、在maxnum种颜色中,计算颜色i到所有其他颜色j的颜色距离。并按照距离从小到大排序,记录相应j的颜色种类。
6、按照方程(3)计算每一种颜色的显著值。根据第5步,可以找到距离颜色i相距最近的m种颜色,从而可以根据方程(4)计算每种颜色显著值,即最终的显著值。
7、为图像中每一个像素分配显著值。像素(i,j)是什么颜色,就赋予它相应颜色的显著值。
8、至此,显著图生成。进行归一化、线性空间滤波。

关于色彩量化:理论请点击github代码请点击
中位颜色切割:github代码请点击
通过随机选择调色板或使用K均值来执行颜色量化:github代码请点击

演示代码:各位老铁这个代码复现断断续续花了我2周,工作忙。我这里放出HC核心代码,特别鸣谢https://mmcheng.net/salobj/。
以下代码使用的颜色量化代码Quantize()请点击。
测试了一张1920*1080分辨率1.1M的图片,颜色量化耗时1.20s,总耗时:1.35s。待优化。

import cv2, time
import numpy as np
from scipy.spatial.distance import pdist, squareform
from temp_003 import Quantize



def GetHC(img_float,delta=0.25):
    t1 = time.time()
    binN, idx1i, binColor3f, colorNums1i = Quantize(img_float)                 # 颜色量化
    t2 = time.time()
    print("Quantize time is :", t2 - t1, 'seconds')
    binColor3f = cv2.cvtColor(binColor3f, cv2.COLOR_BGR2Lab)                   # 颜色空间:BGR2Lab
    weight1f = np.zeros(colorNums1i.shape, np.float32)
    cv2.normalize(colorNums1i.astype(np.float32), weight1f, 1, 0, cv2.NORM_L1) # 相邻色彩相关权重

    binColor3f_reshape = binColor3f.reshape(-1, 3)[:binN]
    similar_dist = squareform(pdist(binColor3f_reshape))
    similar_dist_sort = np.sort(similar_dist)
    similar_dist_argsort = np.argsort(similar_dist)

    weight1f = np.tile(weight1f, (binN, 1))
    color_weight_dist = np.sum(np.multiply(weight1f, similar_dist), axis=1)    # 颜色距离的权重分配

    colorSal = np.zeros((1, binN), np.float64)
    if colorSal.shape[1] < 2:
        return
    tmpNum = int(np.round(binN * delta))                                       # tmpNum 占比0.25的变化的颜色值数量
    n = tmpNum if tmpNum > 2 else 2

    similar_nVal = similar_dist_sort[:, :n]
    totalDist_similar = np.sum(similar_nVal, axis=1)
    every_Dist = np.tile(totalDist_similar[:, np.newaxis], (1, n)) - similar_nVal

    idx = similar_dist_argsort[:, :n]
    val_n = np.take(color_weight_dist,idx)                                    # 获取占比前0.25的颜色权重距离

    valCrnt = np.sum(val_n[:, :n] * every_Dist, axis=1)
    newSal_img = valCrnt / (totalDist_similar * n)
    cv2.normalize(newSal_img, newSal_img, 0, 1, cv2.NORM_MINMAX)              # 归一化
    salHC_img = np.take(newSal_img,idx1i)
    cv2.GaussianBlur(salHC_img, (3, 3), 0, salHC_img)
    cv2.normalize(salHC_img, salHC_img, 0, 1, cv2.NORM_MINMAX)
    return salHC_img


if __name__ == "__main__":
    img3_int = cv2.imread(r"C:\Users\xxx\Desktop\112.png")
    img3_float = img3i.astype(np.float32)
    img3_float = img3_float / 255.0
    t1 = time.time()
    sal = HC(img3_float)
    t2 = time.time()
    print("Total time is :",t2-t1,'seconds')
    cv2.imwrite(r"C:\Users\xxx\Desktop\1121.png",(sal*255).astype(np.int32))
    cv2.imshow('sal_', sal)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
'''
Total time is : 0.2723052501678467 seconds
'''

在这里插入图片描述
在这里插入图片描述

2.2 基于区域的对比度方法(region-based contrast 简称RC)

上面讲了HC直方图的对比度方法,然而 区域与空间关系在显著性检测中也扮演重要作用,高对比邻近周围通常是显著性区域一个很强的证据,HC是计算像素级别的显著性值,计算开销比较大,基于区域对比度分析的显著性检测通过定义每个区域与其他区域的相似度权重得到区域显著性值,完成显著性检测。RC做法需要首先生成区域,通过基于图的图像分割得到很多图像区域,对一个区域计算显著性值:
S(rk)=rkriw(ri)D(rk,ri)(5)S(r_k) = \sum_{r_k \neq r_i}^{}w(r_i)D(r_k,r_i) \tag{5}
其中w(ri)w(r_i) 表示区域 rir_i 的权重,D(,)D(,)表示两个区域之间的颜色距离,其中颜色距离定义如下:
Dr(r1,r2)=i=1n1j=1n2f(c1,i)f(c2,i)Dr(c1,i,c2,j)(6)D_r(r_1,r_2) = \sum_{i=1}^{n1} \sum_{j=1}^{n2}f(c_1,i)f(c_2,i)D_r(c_{1,i},c_{2,j}) \tag{6}
使用稀疏直方图可以加速上述计算。
考虑到不同距离远近对当前区域的影响,基于高斯核函数权重生成,进行适当的权重区域合并得到改进的显著性值计算:
S(rk)=rkriexp(Ds(rk,ri)σs2)w(ri)Dr(rk,ri)(7)S(r_k) = \sum_{r_k \neq r_i} \exp \left ( -\frac{D_s(r_k,r_i)}{\sigma_s^2} \right )w(r_i)D_r(r_k,r_i) \tag{7}
其中:σs\sigma_s 控制空间权重影响,DsD_s表示两个区域中心之间的欧氏距离。作者论文采用σs=0.4\sigma_s = 0.4,像素坐标归一化到0~1之间。
演示代码【请点击】

2.3 显著性检测 FT

图像在频率域可以分成低频部分和高频部分。低频部分反映了图像的整体信息,如物体的轮廓,基本的组成区域。高频部分反映了图像的细节信息,如物体的纹理。显著性区域检测用到的更多的是低频部分的信息。在实际进行计算时,FT方法使用窗口5*5的高斯平滑来实现对最高频的舍去。
论文请点击
像素的显著性可以用下面公式计算:
S(p)=IμIwhc(p)S(p) = ||I_{\mu} - I_{w_{hc}}(p)||

其中,IμI_{\mu}为图像的平均特征,使用 Lab 颜色特征,后一项为像素p在高斯平滑后的Lab颜色特征,||.||为L2范式,即计算前一项和后一项在了Lab颜色空间的欧氏距离。

FT算法过程
1、对图像进行 5*5 的高斯平滑。
2、转换颜色空间。RGB颜色空间转换为CIELAB颜色空间。
3、计算整幅图片的 l、a、b的平均值。
4、按照算法中的公式,计算每个像素l、a、b值同图像三个l、a、b均值的欧氏距离。得到显著图
5、归一化。图像中每个像素的显著值除以最大的那个显著值。得到最终的显著图。
import cv2
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread(r"C:\Users\xxx\Desktop\002.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.GaussianBlur(img,(5,5), 0)
gray_lab = cv2.cvtColor(img, cv2.COLOR_RGB2LAB)

l_mean = np.mean(gray_lab[:,:,0])
a_mean = np.mean(gray_lab[:,:,1])
b_mean = np.mean(gray_lab[:,:,2])
lab = np.square(gray_lab- np.array([l_mean, a_mean, b_mean]))
lab = np.sum(lab,axis=2)
lab = lab/np.max(lab)

plt.imshow(lab, cmap='gray')
plt.show()

在这里插入图片描述

2.4 显著性检测 AC

论文地址:http://www.cs.toronto.edu/~strider/publications/AES_ICVS08.pdf
AC算法也是Achanta等提出的,与FT算法类似,只是在求欧式距离时使用的均值不再是整幅图像的均值,而是通过计算一个感知单元在不同邻域上的局部对比度来实现多尺度显著性计算。内部区域R1,外部区域R2,计算R1和R2的局部对比度时,通过改变R2的大小实现多尺度显著性计算。即:选取不同大小邻域内的均值(三种大小)分别求取欧式距离,再相加得到
该方法是基于局部对比度的。采用Lab颜色空间计算距离。
在这里插入图片描述
感知单元R1可以是一个像素或一个像素块,其邻域为R2,(R1)R2所包含的所有像素的特征值的平均值作为(R1)R2的特征值。设像素p为R1和R2的中心,p所在位置局部对比度为:
ci,j=D[(1N1p=1N1vp),(1N2p=1N2vq)]c_{i,j} = D\left [ \left ( \frac{1}{N_1}\sum_{p=1}^{N_1} \mathbf{v}_p \right ) ,\left ( \frac{1}{N_2}\sum_{p=1}^{N_2}\mathbf{v}_q \right ) \right ]

算法实现过程如下:
1.读取图像,进行高斯滤波,并转换到lab空间
2.分别求取该点附近h/8邻域lab空间的均值L1、A1、B1。以及h/4邻域lab空间的均值L2、A2、B2和h/2邻域lab空间的均值L3、A3、B3。
3.数据融合:
S1=(lL1)2+(aA1)2+(bB1)2S1=(\mathrm{l}-L1)^2 + (a-A1)^2 + (b-B1)^2
S2=(lL2)2+(aA2)2+(bB2)2S2=(l-L2)^2 + (a-A2)^2+(b-B2)^2
S3=(lL3)2+(aA3)2+(bB3)2S3=(l-L3)^2+(a-A3)^2+(b-B3)^2
4.显著图:S=S1+S2+S3S=S1+S2+S3

代码有点问题,待修改

import numpy as np
import time
import cv2


def AC(imagelab):
    height, width = imagelab.shape[:2]
    medical = min(height, width)
    offset1 = int(medical / 2)
    offset2 = int(medical / 4)
    offset3 = int(medical / 8)
    l = imagelab[:, :, 0]
    a = imagelab[:, :, 1]
    b = imagelab[:, :, 2]

    sm = np.zeros((height, width),dtype=np.float32)

    for j in range(height):
        y11 = max(1, j - offset1)
        y12 = min(j + offset1,height)

        y21 = max(1, j - offset2)
        y22 = min(j + offset2, height)

        y31 = max(1, j - offset3)
        y32 = min(j + offset3, height)
        for k in range(width):
            x11 = max(1, k - offset1)
            x12 = min(k + offset1, width)
            x21 = max(1, k - offset2)
            x22 = min(k + offset2, width)
            x31 = max(1, k - offset3)
            x32 = min(k + offset3, width)
            lm1 = np.mean(l[y11:y12, x11: x12])
            am1 = np.mean(a[y11:y12, x11: x12])
            bm1 = np.mean(b[y11:y12, x11: x12])

            lm2 = np.mean(l[y21:y22, x21: x22])
            am2 = np.mean(a[y21:y22, x21: x22])
            bm2 = np.mean(b[y21:y22, x21: x22])
            lm3 = np.mean(l[y31:y32, x31: x32])
            am3 = np.mean(a[y31:y32, x31: x32])
            bm3 = np.mean(b[y31:y32, x31: x32])

            cv1 = (l[j, k] - lm1)**2 + (a[j, k] - am1)**2 + (b[j, k] - bm1)**2
            cv2 = (l[j, k] - lm2)**2 + (a[j, k] - am2)**2 + (b[j, k] - bm2)**2
            cv3 = (l[j, k] - lm3)**2 + (a[j, k] - am3)**2 + (b[j, k] - bm3)**2
            sm[j, k] = cv1 + cv2 + cv3
    return sm


if __name__ == '__main__':
    file = r"C:\Users\xxx\Desktop\006.png"

    start = time.time()
    image_gray = cv2.imread(file)
    imagelab = cv2.cvtColor(image_gray,cv2.COLOR_RGB2Lab)

    t1 = time.time()
    result = AC(imagelab)
    t2 = time.time()
    print('cost time:',t2-t1)
    cv2.imshow('result',result)
    cv2.waitKey()
    cv2.destroyAllWindows()

至此:欢迎点击我的github项目

参考与鸣谢
https://mmcheng.net/salobj/

AC算法:
http://blog.sina.com.cn/s/blog_c303278b0101aism.html
https://blog.csdn.net/qq_22238021/article/details/72876410

鲁棒背景检测的显著性优化
https://blog.csdn.net/ZHANGWENJUAN1995/article/details/95043177
https://blog.csdn.net/dayenglish/article/details/51275128#commentsedit

图像显著性检测论文及代码汇总
https://github.com/mhaut/pResNet-HSI

FT算法:
https://blog.csdn.net/weixin_33836874/article/details/86130758
全局对比对:https://mmcheng.net/salobj/
基于深度学习的显著性检测:https://blog.csdn.net/u010736662/article/details/88930849
Matlab中angle函数内容详解:https://blog.csdn.net/cao_jie_xin/article/details/91128887

综述:https://blog.csdn.net/xioamoon/article/details/80817236
HC:https://blog.csdn.net/weixin_34185512/article/details/86197786
FT https://blog.csdn.net/qq_22238021/article/details/72884492
参考文献
[1] Itti L, Koch C, Niebur E. A model ofsaliency-based visual attention for rapid scene analysis[M]. IEEE ComputerSociety, 1998.
[2] Hou X, Zhang L. Saliency Detection: ASpectral Residual Approach[C]// Computer Vision and Pattern Recognition, 2007.CVPR '07. IEEE Conference on. IEEE, 2007:1-8.
[3] Liu T,Zheng N, Wei, et al. Video attention: Learning to detect a salient objectsequence[C]// International Conference on Pattern Recognition. IEEE, 2009:1-4.
[4] AchantaR, Hemami S, Estrada F, et al. Frequency-tuned salient region detection[J].2009, 22(9-10):1597-1604.
[5] Cheng MM, Zhang G X, Mitra N J, et al. Global Contrast Based Salient RegionDetection[C]. Computer Vision and Pattern Recognition. IEEE, 2011:409-416.
[6] PerazziF, Krähenbühl P, Pritch Y, et al. Saliency filters: Contrast based filteringfor salient region detection[C]// Computer Vision and Pattern Recognition.IEEE, 2012:733-740.
[7] He S,Lau R W, Liu W, et al. SuperCNN: A Superpixelwise Convolutional Neural Networkfor Salient Object Detection[J]. International Journal of Computer Vision,2015, 115(3):330-344.
[8] Hou Q,Cheng M M, Hu X, et al. Deeply Supervised Salient Object Detection with ShortConnections[J]. IEEE Transactions on Pattern Analysis & MachineIntelligence, 2016, PP(99):1-1.
基于谱残差的显著性检测:Saliency Detection: A Spectral Residual Approach

2015-09-21 15:24:50 tyq101010 阅读数 9653


1.Ali Borji, Laurent Itti, Exploiting Local and Global Patch Rarities for Saliency Detection, CVPR2012

1) 系统框架:

 

2) 算法思路:

① 图像表示:本文通过1500张图像中,在各通道提取出的8*8patch,学到了一个自然图像的字典。使用这个字典以及一系列的系数α就可以重组任何一个patch。各通道分别进行。因此,在学习了字典,并且使用Matlab中的LARS算法进行了稀疏编码系数α的估计之后,每个patch通过系数表示成一个矢量。

② 显著度计算:在这些矢量上进行局部和全局显著度的计算。局部显著度为两个图像块系数向量在特征空间里的欧几里得距离,用空间距离进行加权,距离远权重小;全局显著度为图像块矢量进行直方图计算后的概率分布函数的倒数。最终RGBLAB每个通道会得到局部和全局两个显著图。

③ 显著度融合:分三步:a. 每一个通道内,局部和全局显著图进行归一化并相乘;b. 每一种颜色空间内,三个显著图归一化并相加;c. 两个颜色空间的显著图归一化并相加。相乘表示目标必须同时满足局部和全局的孤立性条件。相加表示各个通道之间是互补,或者竞争关系。并且这个竞争是现在各个颜色空间内部几个通道之间进行,优胜者再和另一个颜色通道的比较。

④ 结果优化:尺度空间扩展,对图像进行降采样,计算每个尺度下的显著性图,归一化后计算这些显著性图的均值,再用高斯核进行卷积得到平滑结果;

3) 论文评价:文章采用多通道显著性融合的方法,并进行了多尺度增强;并应用了字典学习和稀疏编码,计算量较大(感觉Ali Borji的论文计算量都很大,计算很多特征或很多显著性图)。代码还在调试,论文图示中结果还可以,边缘显著性较突出。

 

2.Ali Borji, DickyN.Sihite, Laurent Itti, Salient Object Detection:A Benchmark, ECCV2012

1) 主要贡献:一篇关于显著性模型的综合论文,总结了自2011年以及之前发表的,能容易得到的(代码或者Saliency Map),具有很好的准确率的,或者具有很高引用率的模型。

全文共用5个数据库:MSRAASDSED1SED2SOD(这个五个数据 库都是包含物体的数据库,该文的重点也是考察包含物体的数据库上比较各 个模型)。

具体参见博客:http://www.cnblogs.com/hSheng/archive/2012/12/06/2804385.html

 

3.Xiaoshuai Sun, Hongxun Yao, Rongrong Ji, What Are We Looking For: Towards Statistical Modeling of Saccadic Eye Movements and Visual Saliency, CVPR2012

1) 基本思想:该文的基本假设从视觉注视点的统计分析得出。得出的基本假设为两点:a:显著性是非常稀疏的,也就是说大多数地方的显著值都是0,而只有图中的很小区域的显著值有很大的值;b:具有很大的显著值的区域的周围区域通常具有丰富结构信息。而超高斯(super-Gaussianity)分布刚好具有这两点特征。

根据特征融合理论,显著度是由多个特征通道融合而成的,用于显著度检测 的特征应该与显著度具有相似的统计特征;对于一个视觉统计点,显著度具 有超高斯性,我们的注视过程就是在寻找场景中的超高斯成分。

 

2) 算法流程:

  

① 超高斯成分分析:给定图像I,滑动窗扫描将其变换成基于块的表示X,存储为矩阵形式,每个列向量表示一个变形后的图像块;用PCA去相关,白化后得到特征矩阵Z;在统计学领域,通常利用kurtosis函数来模拟超高斯分布。本文通过定义一个随机映射矩阵w,将原始特征空间Z通过这个映射矩阵w,然后求其最大值的kurtosis。通过projection pursuit优化算法求这个w,而这个w也将决定哪些值是saliency在得到一系列的映射向量w时,我们需要将他们进行格拉姆-施密特正交化,来确保当前的优化方向与前面的优化方向不一致。同样通过不停的迭代,能够得到不同的saliency点。本文能同时计算出saliency map和视线扫描的轨迹。

② WAT目光定位:在得到了投影向量W后,计算这个投影方向上的响应图RMi:这个响应图就是原图中的那个具有最大的单个超高斯分布的区域,这个分布是基于图像颜色的分布。这样RM1对应图中具有最大SGCSuper Gaussian Component)对应的响应图,表示人眼首次注视的区域,RM2则是对应的次大SGC分布,RM3,...依次推理,直到W收敛。而W收敛意味着下次转移的位置与上次转移的位置距离很小。也就是以后的SGC响应太小,不能引起注意力了。 

根据winner-takes-all原则选取响应值最大的位置作为注视点。

③ 显著图计算:响应图的非线性组合,pi为第i个响应图的直方图概率。

3) 论文评价:本文的视角比较新颖,从“在图像中的什么成分能引起注意力”的问题出发。从大量tracker数据中得到假设:超高斯分布的数据更能吸引人们的注意力。因此文章致力于寻找那些具有超高斯分布的位置。实验结果看起来还可以,噪音抑制能力较强,saliency map有点模糊。

 

4.Stas Goferman,Lihi Zelnik-Manor, Ayellet Ta, Context-Aware Saliency Detection, CVPR2010

1) 基本思路:本文先提出了基于上下文感知的显著度准则,然后依照这4个准则来实现著度检测。

2) 准则提出与实现如下:

① Local low-level considerations:具有不同颜色和模式的区域对应显著性值高,均匀或模糊区域显著性值低;

② Global considerations:经常出现的特征应当被抑制;

③ Visual organization rules:显著的像素应当聚集在一起,而不是遍布整幅图像;

根据前3条准则,先进行单尺度的局部-全局显著性计算,再进行多尺度增强。

一对图像块pipj的颜色距离越大,位置距离越小,则它们的差异值越大。其中颜色距离为两图像块在Lab空间的欧几里得颜色距离,空间距离为欧几里得位置距离;若对于任意pj,得到的差异值都很大,则认为pi是显著的。

为简化计算,显著性值的计算中选取前k个最相似的图像块进行度量。

计算多个尺度下的显著性值,取平均值来进一步提高显著和非显著区域的对比度。

 

加入上下文修正:设定显著性阈值从saliency map中提取most attended localized areas,在attended areas 之外的像素显著性值由与它最近的attended pixel之间的欧几里得距离加权,得到新的显著性值。从而提高显著目标附近的显著性值,降低背景区域的显著性值。

              

④ High-level factors:作为后期处理,加入高层先验知识如人脸检测;

3) 论文评价:提出显著性准则作为算法的先验知识进行显著度检测,显著性思路思路与中央-周围机制大体相同,融合多尺度修正与上下文感知,导致saliency map中从目标往四周显著性值渐渐降低,边缘较模糊。代码速度与实验结果还可以,如果将颜色距离与空间距离的组合采用加权方式,会不会对显著性结果有所改变?

5.Tie Liu,Jian Sun,Nan-Ning Zheng,Learning to Detect A Salient Object,CVPR2007

1) 基本思想:先对显著目标进行特征提取,得到多尺度对比度,中央-周围对比度,颜色空间分布3feature maps,再用条件随机场模型进行组合,得到最终的显著性检测结果。

2) 方法流程:

① Multi-scale contrast feature:高斯金字塔多层对比度的线性组合。

② Center-surround histogram:计算像素点x'为中心的显著矩形区域与其周 围矩形区域的RGB颜色直方图之间的x2距离;由于目标尺寸不同,选择不同纵横比的矩形区域进行测试,x2距离最大对应得到最独特矩形区域;像素点x的中央-周围直方图特征定义为其所属所有矩形区域的空间高斯加权x2距离之和。

③ Color spatial-distribution:图像中的所有颜色用高斯混合模型来表示,每一个像素被分配给具有某概率的颜色成分,计算每一个颜色成分的水平方差和垂直方差,得到该成分的空间方差;颜色空间分布特征定义为中央加权的 空间方差之和。颜色方差越小,该颜色越有可能属于显著目标。

④ 条件随机场结合:能量函数为K个显著特征和配对特征的线性组合,通 过条件随机场学习计算权重,得到最优化的线性组合。其中显著特征为前面 得到的3feature map,用来描述一个像素点是否属于显著目标;配对特征 为两个相邻像素点的空间关系,是对相邻像素标记为不同值的惩罚项。

3) 论文评价:采用条件随机场模型进行特征组合,融合颜色独立性,颜色空间分布和多尺度分布,考虑了局部信息,全局信息以及尺度信息。效果也不错。

6.Jian Li, Martin D.Levine, Saliency Detection Based on Frequency and Spatial Domain Analysis,BMVC2011

1) 总体思路:本文结合频域的全局信息和时域的局部信息进行显著度检测。在频域分析中,根据全局信息对非显著区域进行建模,频繁出现的成分认为不显著,用频谱平滑进行抑制;在时域分析中,采用中央-周围机制加强信息量大的区域;最后将两个通道的输出结果相结合得到显著图。

2) 算法步骤:

① 频域分析:一幅图像中只有少部分是显著的,大部分是背景,即repeated patterns;基于该假设,我们可以寻找非显著的部分进行抑制,从而突出显著部分;对原始图像进行幅度谱分析,发现峰值对应图像中的repeated patterns,故采用高斯核进行平滑来抑制repeated patterns。为处理不同尺度下的幅度谱,提出频谱尺度空间(Spectrum Scale-Space),高斯核的尺度因子范围由图像的长和宽来决定。再根据显著图的熵来确定高斯核的最优尺度,计算每个尺度下的显著图的熵,选择熵最小的显著图作为最佳结果。(根据熵定义,等概分布时熵最大,说明画面均匀;则显著物体最突出最集中时对应熵最小)

② 时域分析:应用ICAIndependent Component Analysis)选用场景中的独立成分作为中央-周围滤波器,根据论文Dynamic visual attention: searching for coding length increments得到192个响应图,进行加权求和得到一幅显著图,权值为原始图像滤波后的熵取倒数。即熵越小,对应该响应图显著部分越集中,对最终显著图的贡献越大。

③ 显著图结合:将图像分解到图像空间IRGBY,分别计算三个图像通道的最佳尺度频域显著图,再进行熵值加权求和,得到频域saliency map Sg;时域saliency map的计算如②所述,得到Sl;最终的saliency map为二者加权组合:

             

3) 论文评价:文章结合时域和频域两种信息来进行显著度检测,频域分析应用全局信息突出显著度,时域分析增强那些具有很高局部对比度的显著区域,并在多尺度优化时加入熵的应用,值得借鉴。从论文的实验结果来看,对于目标较小的情况结果也不错,不过没有下载到代码,不知道速度和实际运算结果是否满意。

2015-09-21 15:22:57 tyq101010 阅读数 17098


1.Mingming Cheng,Global Contrast based Salient Region Detection,CVPR2011

1) HC:基于直方图对比度的方法,每一个像素的显著性值是由它与图像中所有其他像素的颜色差异来确定,得到全分辨率显著性图像;

2) RC:基于局部对比度的方法,先将图像分割成小区域,采用的分割方法是基于图的分割,基本分割思想是将每个像素点作为无向图的顶点,两个像素点之间的不相似度作为边的权重,要求连接相同区域内的两个顶点的边的最大权重要小于连接不同区域的顶点的边的最小权重,在迭代过程中进行顶点归纳与区域合并,具体参见论文Efcient graph-based image segmentation;每个区域的显著性值由它与其他所有区域的空间距离和区域像素数加权的颜色差异来确定;空间距离为两个区域重心的欧氏距离,较远区域分配较小权值;

3) 细节加速:

① 基于直方图的加速:将每个颜色通道由256个颜色值量化到12个颜色值后,对输入图像计算颜色直方图,保留高频颜色,覆盖95%图像像素,剩下颜色舍弃,用直方图中距离最近的颜色代替;

② 颜色空间平滑:减小量化误差,每个颜色的显著性值被替换为相似颜色显著性的加权平均;在RGB空间进行量化,用Lab空间度量距离;

4) 评价:基于HC的理论方法很简单,根据全局对比度计算显著度,计算速度快,对于背景较简单的图像效果也不错;RC改变了处理单元,由单个像素到图像块,速度较慢,效果并没有比HC提高很多,个人认为基于图的分割结果不够好,导致saliency map不均匀。

 

2.Yulin Xie,Visual Saliency Detection Based on Bayesian Model,ICIP2011

1) 基本流程:

① 检测显著目标的角点:颜色增强Harris角点检测。对输入的彩色图像计算颜色增强矩阵Mboost,用Mboost对输入图像进行颜色转换,计算颜色增强后的图像的Harris角点能量函数得到能量图,选取能量图中能量值最大的几个点,并剔除图像边界附近的点,得到较准确的显著点;

② 用一个凸包将所有显著点包围起来,得到显著区域的大致位置;

③ 将显著度计算等价为贝叶斯后验概率的计算:

 

a. 先验概率p(sal):计算每个像素显著度。将输入图像进行超像素分割,计算每个超像素的平均颜色和空间位置;对凸包内外的超像素分别进行K-means聚类,计算凸包内每个cluster与凸包外所有clusters的平均颜色距离,最大距离对应的那个cluster为显著cluster;其他所有超像素的显著度由它与显著cluster内的超像素的空间和颜色距离来确定;将计算的所有显著值归一化到[0,1],作为贝叶斯框架的先验概率。

b. 观测概率p(x|sal)p(x|bk):分别计算凸包内区域和凸包外区域的Lab颜色直方图,对于任意像素点x特征值为Lab,分别找凸包内外直方图相同Lab值对应的各通道bin,计算各通道bin包含像素个数占总像素个数的百分比,三个百分比相乘。即框内外元素在框内和框外直方图占的比例。

④ 由贝叶斯公式计算最终的saliency map

2) 评价:对于简单背景,效果也很好。Saliency map的准确度也很大部分取决于凸包的准确性,稍复杂背景会有很多的角点被检测到,经常会有显著范围过大的情况,即false positive

 

3.Yun Zhai,Mubarak Shah,Visual Attention Detection in Video Sequences Using Spatiotemporal Cues,ACM2006

1) 系统框架:

 

① 时域显著度模型

检测连续视频帧中的兴趣点,用SIFT建立兴趣点之间的对应,根据对应点计算单应性矩阵检测运动平面,RANSAC算法估计多个单应性矩阵来描述不同的运动模块;根据单应性矩阵得到投影点与实际点之间的投影误差计算该像素点的运动对比度,并加入单应性矩阵的跨越区域作为权重调节,避免纹理变化导致显著点分布不均匀的问题。

② 空域显著度模型

计算像素级的saliency map:该像素点颜色与图像中所有其他像素点的color distance map与其他像素点颜色直方图频率的乘积;

计算区域级的saliency map:采用区域增长算法,根据前面计算的显著点对显著区域进行初始化,以其为中心生成种子区域,通过计算区域边缘的能量进行迭代扩张,最终得到一个矩形显著区域。扩展的区域重叠时,采用区域合并技术;

③ 时域空域模型结合

动态结合,运动对比度较大时给时域显著度模型赋予较大权重,否则给空域显著度模型赋予较大权重。

2) 评价:基于视频的显著度检测,考虑帧间运动显著性信息,和图像自身显著性,值得进一步探索。速度较快,效果也比较稳定。

 

4.Xiaohui Shen,Ying Wu,A Unified Approach to Salient Object Detection via Low Rank Matrix Recovery,CVPR2012

1) 基本流程:文章提出了一种新的图像表示方法,将其表示为一个低秩矩阵(非显著区域)加上稀疏噪音(显著区域),再利用Robust PCA技术进行低秩矩阵恢复,得到的噪音就是显著区域,再根据高层次的先验知识来帮助修正显著区域。

2) 图像矩阵:

① 提取特征:RGBhuesaturation3尺度下4个方向共12steerable pyramids响应,3尺度8方向共12Gabor fileters响应,加起来一共53维。

② 矩阵构造:先利用Mean-shift算法将图像分割成很多较小的segments再用每个segment中所有特征向量的均值来表示这个segment,从而构造成为矩阵。

③ 特征空间变换:保证特征向量为低秩。

3) 高层先验融合:位置先验(基于图像中心高斯分布),语义先验(人脸检测),颜色先验(暖色更明显)

4) 评价:对图像的表示比较新颖,但实验效果一般,saliency map不均匀,提取特征多,计算量大,低秩矩阵恢复速度也比较慢

 

6.Ali Borji,Boosting Bottom-up and Top-down Visual Features for Saliency Estimation,CVPR2012

1) 主要贡献:

① 本文的主要出发点是一个贝叶斯公式的推导,在具有特征f的某位置xsalient的概率p是等式的左边,有如下:

此处假设fx相互独立,且先验概率p(s)相同,所以可以得到正相关最右。又有:

 

即与图片中心点的欧式距离相关,所以本文主要研究的是特征点和salient的对应关系。

② 将bottom-uptop-down联合,底层特征有方向,颜色,强度,颜色通道直方图及概率,金字塔模型,现有的底层显著图例如GBVSTorralba模型,AWS模型;高层特征包括水平线检测,人车检测,人脸检测等。底层和高层加起来,每个pixel就对应一个34维的feature

③ 测试了多种分类器对于显著图计算的贡献,采用online learning,先将feature matrix归一化,使其平均数是0,标准差是1,然后建立一个等大小的label map,每个点取值+1/-1,人眼观测的预测结果,top 20%标注+1bottom 40% 标注-1他将数据集分为N组,然后使用leave-one-out的方式进行训练和测试。测试分类器有回归分类器(regression),线性核的SVMAdaBoost非线性分类器。实验表明Adaboost效果最好。

④ 评估指标:AUC值为ROC曲线与x轴之间距离的积分;NSS归一化扫描路径的显着性,描述saliency可以描述fixation的程度;线性相关系数CC表示saliency map和人眼关注map之间的线性关系,计算协方差。

2) 评价:论文内容上新意不大,底层特征与高层知识的结合,倒是提供了不少特征提取参考,以及各种分类器和评估准则的测试;没有进行代码测试,觉得计算量应该很大。

 

7.Federico Perazzi,Philipp Krahenbuhl,Saliency Filters: Contrast Based Filtering for Salient Region Detection

1) 基本思想:显著性一直以来都被认为应该是一个滤波器,该文作者想到了将其使用滤波器的方法进行加速。这篇文章主要是对局部和全局两种显著特征的公式进行了分析,提出了一种可以再线性时间内计算的方法。

2) 方法流程:

① 图像分割:采用略微修改的超像素分割,根据CIElab空间的测地线图像距离进行K-means聚类,产生大体上均匀尺寸,并且可以保持颜色边界的超像素分割。

② 颜色独立性:

 

其中的权重与超像素空间位置的距离有关,如果这个值给予长距离很低的权重,这个颜色独立性就类似于中央周边的对比度,即距离远的像素对其显著性贡献较低;如果这个权重为常数,这个颜色权重就类似于Mingming Cheng论文里面的区域对比度。

这个公式也可以写成:

 

第一项的Σ结果是1,第二和第三项都可以看做是以ω为核的滤波器,分别对cj cj2滤波。本文将这个核写成了高斯的形式,并且借助Adams提出的permutohedral lattice embedding 滤波器来实现线性时间的计算。

③ 空间颜色分布:

权重是颜色的差距,前面是空间距离。根据ω(ci,cj)定义,颜色越接近近权重越大,即距离远但颜色相近的像素分布值大,和前一个特征刚好是相反,这个特征可以表示某种颜色在空间分布的广度。例如某种颜色分散在图像中,但是面积都很小,那么第一个特征计算出来这个颜色的独立性就比较高,但是第二个特征会告诉你这个颜色的分布很广,并不显著。

通过类似的推导,这个公式也可以写成高斯滤波的形式,借助Adams提出的permutohedral lattice embedding 滤波器来实现线性时间的计算,具体参考论文Fast High-Dimensional Filtering Using thePermutohedral Lattice

④ 显著性融合:

 

由于空间颜色分布的区分度更大,因此作者将其放在了指数的位置,并加了一个权重调节。Di越大即颜色分布越广,对应显著性值越小;Ui越大对应颜色独立性越高,对应显著性值越大。

最后,特征被从超像素级映射到像素级。每个像素的显著性是通过其所在超像素以及周围的超像素进行高斯线性加权,权重取决于和颜色,位置的距离。最终的归一化也很重要,要求显著图至少包含10%的显著像素,这种归一化方式也会提升算法最终的评价指标。

3) 论文评价:考虑到颜色自身独立性与颜色分布对显著度的贡献结合,算法均在时域进行,并采用高斯滤波加速,得到很不错的效果。实际测试结果saliency map较均匀,但公布的代码缺少一些实验细节,没有论文的公布结果好。

2017-02-27 15:06:53 tuconghuan 阅读数 3655

        一直以来做图像显著性检测和图像检索的相关研究,避免不了需要找相关的图像库来进行算法验证。今天把一些标准图像库整理如下:

显著性检测图像库

(1)MSRA-1000

(2)MSRA-10K

         上述两个图像库选自于MSRA数据集,包含准确的像素级的显著目标标注图

(3)CSSD 和 ECSSDComplex Scene Saliency Dataset 

图像检索图像库

(1)Corel-1000、Corel-10000 

         自然图像数据库:

         Corel-1000包含10类,每类100幅图像(印度、海滩、建筑、大巴、恐龙、鲜花、骏马、大象、山河、食物)

         Corel-10000包含100类,每类100幅图像

(2)GHIM-10K(该链接中也含Corel数据库)

         自然图像数据库

         GHIM-10K包含20类,每类500幅图像

(3)THUR15K

          包含5类图像(蝴蝶、咖啡杯、跳跃的狗、长颈鹿、飞机),部分图像包含显著区域标注图

        该图像库可用于基于形状的图像检索

(4)ImageNet



图像显著性检测

阅读数 260