温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

opencv FT显著性检测算法怎么使用

发布时间:2022-01-04 09:57:48 来源:亿速云 阅读:193 作者:iii 栏目:大数据

本篇内容主要讲解“opencv FT显著性检测算法怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“opencv FT显著性检测算法怎么使用”吧!

FT算法原理

FT算法出自论文:

Frequency-tuned salient region detection

FT算法实现也非常简单,该方法从频率角度分析图像。

图像在频率域可以分成低频部分和高频部分。低频部分反映了图像的整体信息,如物体的轮廓,基本的组成区域。高频部分反映了图像的细节信息,如物体的纹理。显著性区域检测用到的更多的是低频部分的信息。

在实际进行计算时,FT方法使用窗口5*5的高斯平滑来实现对最高频的舍去。像素的显著性可以用下面公式计算:

opencv FT显著性检测算法怎么使用

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

算法实现

FT方法实现简单,只需要高斯平滑和平均值计算。

  1. 对图像进行5*5的高斯平滑

  2. 转换颜色空间。RGB颜色空间转换为CIELAB颜色空间

  3. 计算整幅图片的l、a、b的平均值

  4. 按照算法中的公式,计算每个像素l、a、b值同图像三个l、a、b均值的欧氏距离,得到显著图

  5. 归一化。图像中每个像素的显著值除以最大的那个显著值。得到最终的显著图

程序编写:

void FT::calculateSaliencyMap(Mat *src, Mat * dst, bool corlor,int ksize){  if (corlor && (*src).channels() == 3)  //处理彩色域  {    Mat img3f = (*src);    img3f.convertTo(img3f, CV_32FC3, 1.0 / 255);    Mat sal(img3f.size(), CV_32F), tImg;    GaussianBlur(img3f, tImg, Size(ksize, ksize), 0);//高斯平滑去除高频信息    cvtColor(tImg, tImg, COLOR_BGR2Lab);//转换为LAB颜色空间    Scalar colorM = mean(tImg); //计算整幅图像的LAB颜色均值    //遍历图像    for (int r = 0; r < tImg.rows; r++)    {      float *s = sal.ptr<float>(r);      float *lab = tImg.ptr<float>(r);      for (int c = 0; c < tImg.cols; c++, lab += 3)        //计算每个像素LAB值与LAB均值的差,即为显著性        s[c] = (float)(sqr(colorM[0] - lab[0]) + sqr(colorM[1] - lab[1]) + sqr(colorM[2] - lab[2]));    }    normalize(sal, *dst, 0, 1, NORM_MINMAX);  }  else //灰度域  {    Mat imgf, tImg;    imgf = *src;
   if (imgf.channels() == 3)    {      cvtColor(imgf, imgf, COLOR_RGB2GRAY);    }    imgf.convertTo(imgf, CV_32FC1, 1.0 / 255);    Scalar colorM = mean(imgf);    GaussianBlur(imgf, tImg, Size(ksize, ksize), 0);    Mat  sal(imgf.size(), CV_32F);    for (int r = 0; r < tImg.rows; r++)    {      float *s = sal.ptr<float>(r);      float *gray = tImg.ptr<float>(r);      for (int c = 0; c < tImg.cols; c++)        s[c] = (colorM[0] - gray[c])*(colorM[0] - gray[c]);    }
   normalize(sal, *dst, 0, 1, NORM_MINMAX);  }}
算法效果

opencv FT显著性检测算法怎么使用

opencv FT显著性检测算法怎么使用

opencv FT显著性检测算法怎么使用

到此,相信大家对“opencv FT显著性检测算法怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI