前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【手撕算法】更新:AC显著性检测算法

【手撕算法】更新:AC显著性检测算法

作者头像
周旋
发布2022-08-07 12:23:23
3820
发布2022-08-07 12:23:23
举报
文章被收录于专栏:行走的机械人行走的机械人

算法原理

论文名称:

代码语言:javascript
复制
Salient Region Detection and Segmentation

AC算法同样是计算每个像素的显著值,但却不是基于全局对比度,而是基于一定尺度的感知单元的。而且整个AC算法是融合了多个不同尺度的感知单元计算的显著值得到的最终显著图。

如上图,R1为当前像素,计算当前像素的显著值,需要计算该像素LAB三个通道的特征值与R2区域(上图为5*5)所有像素特征值的均值的差。

而R2区域的半径是可变的,算法设定R2区域的大小范围:

MinR2 = Min(Width, Height) / 8 最小为1/8

MaxR2 = Min(Width, Height) / 2 最大为1/2

在这个范围内等分为3份,也就是三个尺度,分别计算这三个尺度下的显著图,并相加,得到最终的显著图。如下图:

a为原图,b为三个不同尺度得到的显著图,c为加和后的显著图,d为抠图结果。

算法实现

算法步骤:

  1. 分别取三个不同尺度的R2
  2. 计算该三个R2区域的均值
  3. 计算图片每个像素每个尺度下的特征值
  4. 不同尺度的显著图叠加,得到最终显著图

算法代码:

代码语言:javascript
复制
void AC::calculateSaliencyMap(Mat *src, Mat * dst)
{
  Mat img3f;
  (*src).convertTo(img3f, CV_32FC3, 1.0 / 255);//归一化在0-1之间表示统计的概率分布
  // 存储显著性图     内部区域R1的均值   外部区域R2的均值
  Mat sal(img3f.size(), CV_32F), MeanR1, MeanR2;
  GaussianBlur(img3f, MeanR1, Size(3, 3), -1);//高斯平滑
  cvtColor(MeanR1, MeanR1, COLOR_BGR2Lab);//转LAB颜色空间

  int Width = img3f.cols, Height = img3f.rows;
  int R1 = 0, Scale = 3;
  //计算MeanR1
  if (R1 > 0)    //如果R1=0,则表示就取原始像素
  {
    blur(MeanR1, MeanR1, Size(R1, R1), Point(-1, -1));
  }
  int  MinR2 = min(Width, Height) / 8, MaxR2 = min(Width, Height)/2;

  for (int Z = 0; Z < Scale; Z++)//分3个尺度Scale进行计算
  {
    MeanR1.copyTo(MeanR2);
    int radius = (MaxR2 - MinR2) * Z / (Scale - 1) + MinR2; //当前尺度半径
    if (radius % 2 == 0)//如果半径为偶数,则加1变奇数
      radius++;
    //计算MeanR2
    blur(MeanR2, MeanR2, Size(radius, radius), Point(-1, -1));
    //遍历像素值计算像素的显著性
    for (int r = 0; r < Height; r++)
    {
      float *s = sal.ptr<float>(r);
      float *lab = MeanR1.ptr<float>(r);
      float *lab2 = MeanR2.ptr<float>(r);
      for (int c = 0; c < Width; c++, lab += 3, lab2 += 3)
      { 
        //三个尺度累加到s[]显著性图中
        s[c] += sqrt((float)(sqr((lab2[0] - lab[0])) + sqr((lab2[1] - lab[1])) + sqr((lab2[2] - lab[2]))));
      }
        
    }
  }   
  //归一化操作
  normalize(sal, *dst, 0, 1, NORM_MINMAX);
}

算法效果

THE END

今天就到这里啦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 周旋机器视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档