算法学习之显著性检测FT算法

显著性检测FT算法来自文献:《Frequency-tuned Salient Region Detection》

FT算法由Achanta等提出,利用颜色特征的中央-周边算子来得到显著图。其求解过程非常简单:

算法学习之显著性检测FT算法_第1张图片

S(x,y)=||Iu-Iwhc(x,y)||;
Iu是图像像素的算术平均值,Iwhc(x,y)是对原图像进行的高斯模糊。此算法使用Lab空间,||-||为欧式距离。
matlab实现流程:

算法实现过程如下:
(1)读取图像,进行高斯滤波,并转换到lab空间
(2)分别求取l、a、b的均值Lm、Am、Bm。
(3)数据融合,Sm=(l-Lm)^2+(a-Am)^2+(b-Bm)^2

大概意思是:就是计算Lab空间下每点与均值的欧式距离作为显著值

FT算法处理结果图:
算法学习之显著性检测FT算法_第2张图片算法学习之显著性检测FT算法_第3张图片算法学习之显著性检测FT算法_第4张图片

算法学习之显著性检测FT算法_第5张图片算法学习之显著性检测FT算法_第6张图片算法学习之显著性检测FT算法_第7张图片
FT学习参考:http://ivrlwww.epfl.ch/supplementary_material/RK_CVPR09/.其中C++以及matlab源代码已经提供好了,可以下载学习一下

关于C++代码,这里我对数据转换的函数,转换后的imgBuffer类型数据可以直接用于FT提供的代码了,感兴趣的可以尝试一下。

c++版本:实际上也是三步,滤波+颜色空间转换+计算SaliencyMap(见源码)
void Mat2Vuint(const Mat& image,vector& imgBuffer)
{
int height=image.rows;
int width=image.cols;
long imgSize= height*width;
imgBuffer.resize(imgSize);
uchar yy=255;
uchar sR,sG,sB;
int dex=0;
for(int i=0;i for (int j=0;j

{
sR=(image.at(i,j)[2]);
sG=(image.at(i,j)[1]);
sB=(image.at(i,j)[0]);//要注意RGB三通道的存储方式是BGR
imgBuffer[dex]=yy<<24|sR<<16|sG<<8|sB;
dex++;
}
}
下图是我测试的结果图片,就是将一幅图中觉得比较显著的区域分割出来的,源码大家好好看看参考资料即可。

友情链接:http://www.cnblogs.com/skyseraph/archive/2011/08/11/2135291.html

http://www.cnblogs.com/Imageshop/p/3889332.html

http://blog.csdn.net/u013967613/article/details/51234666

http://ivrlwww.epfl.ch/supplementary_material/RK_CVPR09/

http://www.chinaaet.com/article/3000015506

你可能感兴趣的:(算法学习)