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

算法原理

论文名称:

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. 不同尺度的显著图叠加,得到最终显著图

算法代码:

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;//计算MeanR1if (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++;//计算MeanR2blur(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

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

关注后 后台回复

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

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

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

【手撕算法】AC显著性检测算法相关推荐

  1. 图像显著性检测算法的评价指标介绍

    图像显著性检测算法的评价指标介绍 要评价一个图像显著性检测(Saliency Detection,SD)算法的好坏,当然离不开评价指标(Metric),显著性检测分为眼注视点显著性(eye fixat ...

  2. 显著性检测算法学习阶段论文总结(1)

    因为本人研究方向是显著性检测,也就看了不少的显著性方面的文献.这篇博客是我对之前所看论文中一些较为经典,具有较大参考价值的论文的一个集中整理,也算是对自己学习过程的一个总结. 1.Global Con ...

  3. 路面裂痕检测YOLO算法、目标检测算法实现地面裂缝检测

    道路裂纹检测YOLO算法,目标检测,目标识别,裂纹检测 路面裂痕检测YOLO算法.目标检测算法实现地面裂缝检测 车头定位 交通标志识别 车道线识别 自己标注数据,训练模型,效果很好4360063193 ...

  4. 【手撕算法】HC显著性检测算法

    前言 HC算法出自程明明老师的论文: Global Contrast based Salient Region Detection 这个论文一共提到了两种算法,分别是HC与RC. HC仅仅是考虑了颜色 ...

  5. 视觉显著性python_OpenCV—python 图像显著性检测算法—HC/RC/LC/FT

    文章目录 一.显著性检测研究现状 二.基于谱残差法的显著性检测 三.基于全局对比度图像显著性检测(LC) 2.1 基于直方图对比度的显著性检测(HC) 2.2 基于区域的对比度方法(region-ba ...

  6. python视觉识别_视觉显著性python_OpenCV—python 图像显著性检测算法—HC/RC/LC/FT

    文章目录 一.显著性检测研究现状 二.基于谱残差法的显著性检测 三.基于全局对比度图像显著性检测(LC) 2.1 基于直方图对比度的显著性检测(HC) 2.2 基于区域的对比度方法(region-ba ...

  7. matlab 图像显著性检测ft_全局对比度的图像显著性检测算法

    点击上方蓝字关注我们 星标或者置顶[OpenCV学堂] 干货与教程第一时间送达! 显著性检测概念 显著性就是可以快速引起你注意的对象或者物体,在图像或者视频中显著性检测的结果往往是图像或者视频中对象, ...

  8. 详解面试手撕过的那些排序算法

    前言 只要去大厂面试,必定有一轮算法面试,而这一轮往往是阻碍程序员面试成功的关键.一个程序员的算法基本功是否扎实能够体现出自身的开发能力,下面我尽可能的把常用的排序算法讲清楚. 排序简介 排序(Sor ...

  9. BASNet,一种能关注边缘的显著性检测算法

    转自:https://zhuanlan.zhihu.com/p/71538356 今天要聊的这篇文章是2019年CVPR的一篇显著性检测的文章.<BASNet: Boundary-Aware S ...

最新文章

  1. android 不固定指示器,Android简单的页面指示器
  2. MySQL的Limit详解(转载)
  3. 高情商女神是怎样炼成的?直播EMUI9.0制胜法宝“陪伴实测”
  4. ICCV 2017 《Flow-Guided Feature Aggregation for Video Object Detection》论文笔记
  5. SAP S/4HANA里的生产订单,标识其已经结束生产可以发货的字段
  6. .NET Core项目从xproj+project.json向csproj迁移简介
  7. docker卸载 windows版本_DevOps系列 006 - Docker安装
  8. Mybatis批量删除
  9. 分词之后的如何做特征选择_抑郁症康复之后,如何避免复发?我们可以从这几方面来做...
  10. 熟悉 CMake (三)—— 配置 opencv3
  11. python public_python中private、protectedamp;public
  12. 计算机二级系统环境,计算机等级二级Java考试辅导:“系统和环境”单元综合复习...
  13. SXWIN7X64EN_20181104_NET_msu_LITE英文精简版
  14. 【F1C100S】编译启动所需的uboot,kernel,rootfs
  15. Ochestrator企业数据总线
  16. ESAYUI filebox 隐藏
  17. 如何确保网站的安全性
  18. upload组件代码执行成功却还是有报错提醒
  19. 【Unity3D日常开发】Unity3D中实现计时器工具类-正计时、倒计时、暂停计时、加速计时
  20. P5055【模板】可持久化文艺平衡树

热门文章

  1. MSP430 TIMER_A定时器设置示例
  2. mysql缓存击穿_Mybatis中的缓存击穿
  3. 2022-03-30 西安 javaSE(02)基本数据类型转换、自增运算、三元运算符、原反补码位运算
  4. Debian解决dnsmasq占用53端口问题
  5. 浏览器全屏——screenfull
  6. 【C语言趣味教程】(5) 常量:字面常量 | 类型常量 | const 关键字 | const 的声明 | 程序中的只读概念 | const 保护机制 | 如何巧妙区分 “指针常量“ 和 “常量指针“
  7. overleaf使用技巧
  8. IT人母亲的美国之行(2)
  9. 手把手教您怎么研究转录因子
  10. 3D开发-全景技术方案