溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

opencv FT顯著性檢測(cè)算法怎么使用

發(fā)布時(shí)間:2022-01-04 09:57:48 來(lái)源:億速云 閱讀:177 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“opencv FT顯著性檢測(cè)算法怎么使用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“opencv FT顯著性檢測(cè)算法怎么使用”吧!

FT算法原理

FT算法出自論文:

Frequency-tuned salient region detection

FT算法實(shí)現(xiàn)也非常簡(jiǎn)單,該方法從頻率角度分析圖像。

圖像在頻率域可以分成低頻部分和高頻部分。低頻部分反映了圖像的整體信息,如物體的輪廓,基本的組成區(qū)域。高頻部分反映了圖像的細(xì)節(jié)信息,如物體的紋理。顯著性區(qū)域檢測(cè)用到的更多的是低頻部分的信息。

在實(shí)際進(jìn)行計(jì)算時(shí),F(xiàn)T方法使用窗口5*5的高斯平滑來(lái)實(shí)現(xiàn)對(duì)最高頻的舍去。像素的顯著性可以用下面公式計(jì)算:

opencv FT顯著性檢測(cè)算法怎么使用

其中,Iu為圖像的平均特征,使用Lab顏色特征,后一項(xiàng)為像素p在高斯平滑后的Lab顏色特征,||.||為L(zhǎng)2范式,即計(jì)算前一項(xiàng)和后一項(xiàng)在了Lab顏色空間的歐氏距離。

算法實(shí)現(xiàn)

FT方法實(shí)現(xiàn)簡(jiǎn)單,只需要高斯平滑和平均值計(jì)算。

  1. 對(duì)圖像進(jìn)行5*5的高斯平滑

  2. 轉(zhuǎn)換顏色空間。RGB顏色空間轉(zhuǎn)換為CIELAB顏色空間

  3. 計(jì)算整幅圖片的l、a、b的平均值

  4. 按照算法中的公式,計(jì)算每個(gè)像素l、a、b值同圖像三個(gè)l、a、b均值的歐氏距離,得到顯著圖

  5. 歸一化。圖像中每個(gè)像素的顯著值除以最大的那個(gè)顯著值。得到最終的顯著圖

程序編寫(xiě):

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);//轉(zhuǎn)換為L(zhǎng)AB顏色空間    Scalar colorM = mean(tImg); //計(jì)算整幅圖像的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)        //計(jì)算每個(gè)像素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顯著性檢測(cè)算法怎么使用

opencv FT顯著性檢測(cè)算法怎么使用

opencv FT顯著性檢測(cè)算法怎么使用

到此,相信大家對(duì)“opencv FT顯著性檢測(cè)算法怎么使用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI