【手撕算法】FT显著性检测算法
2021/4/19 12:55:20
本文主要是介绍【手撕算法】FT显著性检测算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
FT算法原理
FT算法出自论文:
Frequency-tuned salient region detection
FT算法实现也非常简单,该方法从频率角度分析图像。
图像在频率域可以分成低频部分和高频部分。低频部分反映了图像的整体信息,如物体的轮廓,基本的组成区域。高频部分反映了图像的细节信息,如物体的纹理。显著性区域检测用到的更多的是低频部分的信息。
在实际进行计算时,FT方法使用窗口5*5的高斯平滑来实现对最高频的舍去。像素的显著性可以用下面公式计算:
其中,Iu为图像的平均特征,使用Lab颜色特征,后一项为像素p在高斯平滑后的Lab颜色特征,||.||为L2范式,即计算前一项和后一项在了Lab颜色空间的欧氏距离。
算法实现
FT方法实现简单,只需要高斯平滑和平均值计算。
- 对图像进行5*5的高斯平滑
- 转换颜色空间。RGB颜色空间转换为CIELAB颜色空间
- 计算整幅图片的l、a、b的平均值
- 按照算法中的公式,计算每个像素l、a、b值同图像三个l、a、b均值的欧氏距离,得到显著图
- 归一化。图像中每个像素的显著值除以最大的那个显著值。得到最终的显著图
程序编写:
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显著性检测算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-21订单系统资料入门教程:轻松管理你的订单
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java订单系统资料:新手入门教程与实战指南
- 2024-09-21Java管理系统资料入门教程
- 2024-09-21从零开始学习Java监控系统资料
- 2024-09-21Java就业项目资料:新手入门的必备教程
- 2024-09-21Java全端资料:初学者指南
- 2024-09-21Java全栈资料入门教程及资源汇总
- 2024-09-21Java日志系统资料入门教程