您好,登錄后才能下訂單哦!
本篇內容主要講解“opencv FT顯著性檢測算法怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“opencv 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);
}
}
到此,相信大家對“opencv FT顯著性檢測算法怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。