显著图

在电脑视觉中，显著性是一种图像分割的模式，而显著图（Saliency map）是显示每个像素独特性的图像。显著图的目标在于将一般图像的表示简化或是改变为更容易分析的样式。举例来说，某个像素在一张彩色图中具有较高的灰阶，其会在显著图中以较为明显的方式被显示出来。

视觉刺激的观点上，如果某些特征特别能够被捕捉到注意力，这样子的特性在心理学上被称为显著性(saliency)。

## 图像显著性

如前述，显著性是图像分割的一部分，图像分割通常用于定位图像中的物体和边界(例：线条，曲线等）。更精确来说，图像分割是为图像中的每个像素(pixel)分配一个标签的过程，以便让相同标签的像素能够共享某些特征。

图像显著性是图像中重要的视觉特征，体现出人眼对图像各区域的重视程度，自从Laurent Itti在1998年发表的论文后，产生了大量的显著性映射方法。图像显著性也广泛运用在压缩，编码，图像边缘加强，显著性目标分割和提取等方面。

## 视觉显著性检测

视觉注意机制，即面对一个场景时，人类自动地对感兴趣区域进行处理而选择性地忽略不感兴趣区域，这些人们感兴趣区域被称之为显著性区域。

视觉显著性检测(英语：Visual Saliency Detection)，指透过算法模拟人的视觉，提取出图像中的显著性区域。

人类的视觉注意机制主要分为两种：

- 由下而上基于数据驱动的机制：受感知数据的驱动，将人的视点引导至图像或场景中的显著性区域；利用图像的亮度，边缘，颜色等特征，判断目标区块与周围的差异，进而计算出显著性。
- 由上而下基于任务驱动目标的机制：由人的认知因素决定,对图像的某些特定特征来计算图像区域的显著性。

一般认为，良好的视觉显著性检测模型需要至少满足以下三个标准：

- 良好的检测率：要有较低丢失实际显著区域的可能性以及将背景错误地标记为显著区域的错误发生。
- 高分辨率：产生的显著图需要具有高分辨率以准确定位显著物体并保留原始图像讯息。
- 计算效率：作为其他复杂流程的起始点，这些模型应该要能够快速检测显著区域。

### 认知注意模型

Itti于1998年提出基于显著性的视觉注意模型，而后在2001年对该模型的理论作了更进一步的完善，现今，Itti的模型已经成为由下而上视觉注意模型的标准。

对于一幅输入的图像，该模型提取初级视觉特征：颜色、亮度和方位、在多种尺度下使用中央环绕(Center-surround)操作产生体现显著性量值的特征图，将这些特征图合并得到最终的显著图(Saliency map)后,利用生物学中赢者取全(Winner-take-all)的竞争机制得到图像中最显著的空间位置, 用来引导注意，最后采用返回抑制(Inhibition of return) 的方法来完成注意焦点的转移。

### 决策论注意模型

在决策论模型的观点中，感知系统因为不断进化，从而能产生关于周遭环境在决策论概念下的最佳解。决策论注意模型能表达由下而上和由上而下的注意。其主要重点在于视觉注意应被当前任务有关的最优性所驱动。其理论已在计算机视觉中得到了成功的应用，如分类和注意定位预测，这两者均获得很高的准确率。

### 频域分析注意模型

这是一种基于频谱分析的显著性模型，非常容易解释和实现，由于其理论基于快速傅里叶转换实现，能够满足实时(real-time)要求，此模型在注意焦点预测和显著区域检测方面取得了很大的成功，和iNVT类似的模型相比，运算速度可提高近10倍。

### 图论注意模型

图论模型是把眼球活动看作一个时间序列，由于有大量的隐变量影响眼球运动，因此，该类注意模型使用了隐马尔科夫模型、动态贝叶斯网和条件随机场等方法。图论模型可以对复杂的注意机制建模，因此能取得较好的预测能力，缺点在于模型的高复杂度。

## 实作范例

第一步，需要先计算出每一个像素与在同一帧（frame）其余像素的距离。之后将所有的值相加，得到以下等式：

Ii是在当前帧中除了Ik之外其他的像素值，Ik的范围在0,255之间，展开之后如下：

SALS(Ik) = |Ik - I1| + |Ik - I2| + ... + |Ik - IN|

其中N是当前帧中的像素总和，若更进一步的扩展公式，将同样的值放在一起，得到结果如下：

Fn代表In的频率，且n的范围在0,255，频率以直方图的形式表示，此算法的时间复杂度为O(N)。

### 虚拟码

以pseudo matlab code为例，首先读取数据。

```matlab
for k = 2 : 1: 13  // which means from frame 2 to 13,  and in every loop K's value increase one.
I = imread(currentfilename); //read current frame
I1 = im2single(I);    //convert double image into single(requirement of command vlslic)
l = imread(lastfilename); //read last frame
I2 = im2single(l);
regionSize = 10; // set the parameter of SLIC this parameter setting are the experimental result. RegionSize means the superpixel size.
regularizer = 1; //set the parameter of SLIC 
segments1 = vlslic(I1, regionSize, regularizer);//get the superpixel of current frame
segments2 = vlslic(I2, regionSize, regularizer);//get superpixel of the previous frame
numsuppix = max(segments1(:)); //get the number of superpixel  all information about superpixel is in this link http://www.vlfeat.org/overview/slic.html
regstats1 = regionprops(segments1,’all’);
regstats2 = regionprops(segments2,’all’);//get the region characteristic based on segments1
```

在读取数据之后，对每一帧进行超像素(super-pixel)处理，spnum1和spnum2分别表示当前帧与前一个帧的像素总数。

```matlab
for i=1:1:spnum1   // From the first pixel to the last one. And in every loop i++
      for j=1:1:spnum2 //From the first pixel to the last one.j++. previous frame
           centredist(i:j)=sum((center(i)-center(j)));//calculate the center distance 
      end
end
```

之后计算每个像素之间的颜色距离，这流程称为契约函数。

```matlab
for i=1:1:spnum1//From first pixel of current frame to the last one pixel. I ++
      for j=1:1:spnum2//From first pixel of previous frame to the last one pixel. J++
           posdiff(i,j)=sum((regstats1(j).Centroid’-mupwtd(:,i)));//Calculate the color distance.
      end
end
```

经过前述两个处理后，可以得到一个显著图。

## 外部链接

- VLfeat: http://www.vlfeat.org/index.html
- Saliency map at Scholarpedia