ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【手撕算法】FT显著性检测算法

2021-04-19 12:31:31  阅读:160  来源: 互联网

标签:显著性 FT colorM imgf 算法 tImg 图像


FT算法原理

FT算法出自论文:

Frequency-tuned salient region detection

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

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

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

图片

其中,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);
  }
}

算法效果

图片

图片

图片

THE END

今天就到这里啦,微信搜索【Opencv视觉实践】,对【计算机视觉/机器视觉算法和软件开发】感兴趣的小伙伴可以一起来学习呀。

关注后 后台回复

【电子书资源】可以领取10G计算机视觉/软件开发相关电子书

【手撕算法代码】可以领取手撕算法系列专栏的所有代码和PDF版论文

【加群】可以加入我们的视觉算法靓仔群~

标签:显著性,FT,colorM,imgf,算法,tImg,图像
来源: https://blog.csdn.net/qq_43667130/article/details/115861834

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有