图像显著性检测——时域分析(谱残差法、相位谱法)
生活随笔
收集整理的這篇文章主要介紹了
图像显著性检测——时域分析(谱残差法、相位谱法)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
(Saliency Detection: A Spectral Residual Approach)
給定一幅圖像,I(x)首先計算其2維離散傅里葉變換,將其從空間域轉(zhuǎn)換到頻域,對幅值取對數(shù)后得到log譜L(f):
式中F代表2維離散傅里葉變換,I·I代表其幅值,φ代表其相位。
由于log曲線滿足局部線性條件,所以用局部平均濾波器hn(f)對其進行平滑,獲得log譜的大致形狀:
hn(f)是一個nxn矩陣定義為:
因此譜殘差就是log譜和其進行均值濾波后的差,可按下面的式子計算:
譜殘差能夠描述一幅圖像中的異常區(qū)域,因此可以用來進行顯著目標(biāo)檢測。將譜殘差和相位P(f)進行2維離散傅里葉反變換
由此可以重構(gòu)出一幅圖像,用來表示原圖像各像素的顯著性,稱為顯著圖(saliencymap)。
下面為基于譜殘差法顯著性檢測的matlab代碼
function [srmap] = sr(rgb, sigma) %計算利用最基本普殘差得到顯著圖,即不包含顏色亮度分量等特征 F = fft2(rgb2gray(rgb));%將彩色圖像轉(zhuǎn)為灰度圖像(即亮度)后進行二維離散傅立葉變換Af = abs(F);%對傅立葉變換結(jié)果取絕對值(即求變換后圖像的幅度圖像) Pf = angle(F);%求變換后圖像的相位譜圖像 Lf = log(Af);%得到幅度值的Log譜filt = fspecial('average', 3);%創(chuàng)建局部平均濾波算子[3,3]為默認(rèn)尺寸%circular'圖像大小通過將圖像看成是一個二維周期函數(shù)的一個周期來擴展 Rf = Lf - imfilter(Lf, filt, 'circular');% 幅度值的Log譜-局部平均濾波器進行平滑處理后的Log譜得到普殘差srmap = ifft2((exp(Rf+i*Pf)));%將相位譜和譜殘差進行二維傅立葉反變換得到顯著圖 srmap = abs(srmap);%取上面計算圖像的幅值部分即位顯著圖(saliency map) srmap = srmap .^ 2;%將顯著圖矩陣中各個元素平方,即為進行二維卷積運算,利用了“復(fù)數(shù)和它的共軛復(fù)數(shù)的乘積是復(fù)數(shù)模的平方”這一結(jié)論srmap = mat2gray(imfilter(srmap, fspecial('gaussian',[3 3], sigma)));%對處理后的顯著圖進行濾波(高斯低通濾波尺寸為[3,3],Sigma為濾波器的標(biāo)準(zhǔn)差),然后歸一化end
以下為譜殘差法顯著性檢測的C++實現(xiàn)
// opencvtest1.cpp : 定義控制臺應(yīng)用程序的入口點。 // #include "stdafx.h" #include <opencv2\opencv.hpp> #include <cv.h> #include <highgui.h>using namespace cv; using namespace std;int _tmain(int argc,char** argv) {//讀取圖片const char *filename = (argc >=2 ? argv[1]:"1.jpg" );Mat I = imread(filename);if (I.empty()){return -1;}//彩色圖轉(zhuǎn)成灰色圖if (I.channels()==3){cvtColor(I,I,CV_RGB2GRAY);}Mat planes[] = { Mat_<float>(I), Mat::zeros(I.size(), CV_32F) };Mat complexI;//構(gòu)造復(fù)數(shù)雙通道矩陣merge(planes,2,complexI);//快速傅里葉變換dft(complexI,complexI);Mat mag, pha, mag_mean;Mat Re, Im;//分離復(fù)數(shù)到實部和虛部Re = planes[0]; //實部split(complexI, planes); Re = planes[0]; //實部Im = planes[1]; //虛部//計算幅值magnitude(Re, Im, mag); //計算相角phase(Re, Im, pha); float *pre, *pim, *pm, *pp;//對幅值進行對數(shù)化for (int i = 0; i<mag.rows; i++){pm = mag.ptr<float>(i);for (int j = 0; j<mag.cols; j++){*pm = log(*pm);pm++;}}//對數(shù)譜的均值濾波blur(mag, mag_mean, Size(5, 5)); //求取對數(shù)頻譜殘差mag = mag - mag_mean; for (int i = 0; i<mag.rows; i++){pre = Re.ptr<float>(i);pim = Im.ptr<float>(i);pm = mag.ptr<float>(i);pp = pha.ptr<float>(i);for (int j = 0; j<mag.cols; j++){*pm = exp(*pm);*pre = *pm * cos(*pp);*pim = *pm * sin(*pp);pre++;pim++;pm++;pp++;}}Mat planes1[] = { Mat_<float>(Re), Mat_<float>(Im) };//重新整合實部和虛部組成雙通道形式的復(fù)數(shù)矩陣merge(planes1, 2, complexI); // 傅立葉反變換idft(complexI, complexI, DFT_SCALE); //分離復(fù)數(shù)到實部和虛部split(complexI, planes); Re = planes[0];Im = planes[1];//計算幅值和相角magnitude(Re, Im, mag); for (int i = 0; i<mag.rows; i++){pm = mag.ptr<float>(i);for (int j = 0; j<mag.cols; j++){*pm = (*pm) * (*pm);pm++;}}GaussianBlur(mag, mag, Size(7, 7), 2.5, 2.5);Mat invDFT, invDFTcvt;//歸一化到[0,255]供顯示normalize(mag, invDFT, 0, 255, NORM_MINMAX); //轉(zhuǎn)化成CV_8U型invDFT.convertTo(invDFTcvt, CV_8U); imshow("SpectualResidual", invDFTcvt);imshow("Original Image", I);waitKey(0);return 0; }
2.基于相位譜的顯著性檢測
下面給出基于相位譜的顯著性檢測matlab代碼 function [pftmap] = pft(rgb)% [row,col,page] =size(rgb);gimg = rgb2gray(rgb);%將彩色圖像轉(zhuǎn)為灰度圖像F = fft2(gimg);%對灰度圖像進行二維離散傅里葉變換amp = abs(F);%得到幅值圖像 ph = angle(F);%得到相位圖s = ifft2(1 * exp(1i*ph));%不加入幅值圖像部分,只對相位譜進行二維離散傅里葉反變換 filt = fspecial('gaussian', [3 3]);%標(biāo)準(zhǔn)差為sigma的二維高斯濾波算子Pftmap = mat2gray(imfilter(abs(s).*abs(s), filt, 'circular')); pftmap = mat2gray(Pftmap);%歸一化 end3.基于四元傅里葉變換的顯著性檢測
(Spatio-temporal Saliency Detection Using Phase Spectrum of Quaternion Fourier Transform)
定義t時刻的輸入圖像F(t)(t=1,2,...,T,T表示輸入視頻的總幀數(shù)),r(t)、g(t)、b(t)分別表示F(t)的紅、綠、藍(lán)三通道,則其獨立的顏色通道R(紅)G(綠)B(藍(lán))Y(黃)分別定義為:F(t)的亮度特征I(t)和運動特征M(t)定義如下:
根據(jù)人眼視覺系統(tǒng)的生理結(jié)構(gòu)!研究發(fā)現(xiàn)人類視覺皮層存在紅/綠、藍(lán)/黃神經(jīng)元,用RG(t)、BY(t)表示如下:
研究表明!在人類視覺系統(tǒng),M(t)、I(t)、RG(t)、BY(t)這四個特征通道幾乎是獨立的。因此!可以用一個四元數(shù)q(t)表示視頻幀的上述四個特征),定義加權(quán)圖像四元數(shù)表示如下:
其中
可將q(t)寫為如下形式:
q(t)可寫為四元傅里葉變換(Quaternion Fourier Transform)的形式:
四元傅里葉變換的逆變換可寫為如下形式:
我們用Q(t)表示頻域的q(t),Q(t)可以寫為極數(shù)形式:
其中表示Q(t)的相位譜部分,u是四元數(shù)的虛數(shù)單位。 令則Q(t)中只保留相位譜信息,對其進行傅里葉變換的逆變換得到q'表示如下:
最終的顯著圖定義為:
下面為基于四元傅里葉變換的顯著性檢測matlab代碼: function [qpftmap, RG, BY,I1] = qpft(rgb, sigma )%-1 %四元傅里葉相位譜顯著性檢測 [row ,col, page] = size(rgb);%計算四元數(shù) r = double(rgb(:,:,1)); g = double(rgb(:,:,2)); b = double(rgb(:,:,3));%r紅通道g綠通道b藍(lán)通道 R = r - (g + b)/2; %調(diào)整后的紅色通道 G = g - (r + b)/2; %調(diào)整后的綠色通道 B = b - (r + g)/2; %調(diào)整后的藍(lán)色通道 Y = (r + g)/2 - (abs(r - g))/2 - b;%黃色通道u1=1;%I u2=1;%RGRG = R - G;%紅/綠對立神經(jīng)元BY =B - Y;%藍(lán)/黃對立神經(jīng)元I1 = ((r+g+b)./3).*u1;%-0 計算亮度特征 %I0=rgb2gray(rgb);%I1=grayslice(I0,64);%I1=double(I1); %level = graythresh(I0); %OTSU閾值確定-1 %I1=im2bw(I0,level); %轉(zhuǎn)為二值圖像-1M = zeros(row, col); %創(chuàng)建一個全0數(shù)組(運動特征)%定義加權(quán)四元數(shù)表示如下f1 = M + RG * 1i; f2 = BY + I1* 1i;%進行傅里葉變換F1 = fft2(f1);F2 = fft2(f2);phaseQ1 = angle(F1);%得到相位譜 phaseQ2 = angle(F2);%得到相位譜 ifftq1 = ifft2(exp(phaseQ1 * 1i));%對相位譜進行傅里葉反變換 ifftq2 = ifft2(exp(phaseQ2 * 1i));%對相位譜進行傅里葉反變換 absq1 = abs(ifftq1);%得到幅值圖像 absq2 = abs(ifftq2);%得到幅值圖像squareq=(absq1+absq2).*(absq1+absq2);L = fspecial('gaussian', [5 5], sigma);%標(biāo)準(zhǔn)差為sigma的二維高斯濾波算子Squareq = mat2gray(imfilter(squareq, L, 'circular'));%L表示標(biāo)準(zhǔn)差為sigma的二維高斯濾波器 qpftmap = mat2gray(Squareq);%最終顯著圖為歸一化后的二維矩陣 end
4.實驗結(jié)果
從測試圖像庫中選取10幅不同類型的圖片作為實例進行展示。如下圖所示,其中每組圖片第一列為輸入圖像,第二列為譜殘差法輸出的顯著圖,第三列為相位譜法獲得的顯著圖,第四列為四元傅立葉變換法得到的顯著圖。由圖可見譜殘差法雖然能檢測出人所感興趣的人或物體,但當(dāng)背景比較復(fù)雜時,顯著性檢測效果不佳,如在第3、第6幅圖像的譜殘差法顯著圖中背景在顯著圖中占大部分。單純的相位譜法雖然能剔除一些稍復(fù)雜的背景,獲得相對滿意的結(jié)果,但卻不能突出圖像顏色對比強烈的地方,如第3幅圖中相位譜法雖然剔除了黃色的背景,但卻并沒有檢測出圖像中的紅色警示部分。第2幅圖中,基于四元傅立葉變換的顯著性檢測法能夠很好的檢測出廣告牌中紅色警示部分,第3、4、5幅圖中四元傅立葉變換檢測法最為準(zhǔn)確,特別是在第5和第7幅圖中,四元傅立葉變換法不僅檢測出了完整的花朵邊緣部分,而且檢測出了顏色不同于花瓣的花芯部分。第8幅圖中,三種方法均檢測出了人像,四元傅立葉變換法和前兩種方法比對人的輪廓檢測更為準(zhǔn)確,而且對圖像中的一些細(xì)節(jié)例如摩托車和人像橘黃色的部分檢測為顯著區(qū)域。第6幅圖,三種方法均沒有檢測出動物部分,四元相位譜檢測法將背景中綠色部分檢測為顯著區(qū)域,并沒有將人真正注意的動物部分檢測為顯著區(qū)域,可能原因為缺乏先驗知識、動物部分與背景對比度弱等。第9幅圖,3種方法均沒有明確的檢測出感興趣區(qū)域說明上述三種方法仍需要改進。第1-6幅圖像的實驗結(jié)果
第7-10幅圖的實驗結(jié)果
5.參考文獻
總結(jié)
以上是生活随笔為你收集整理的图像显著性检测——时域分析(谱残差法、相位谱法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql子查询的妙用:用在from后面做子
- 下一篇: Big Endian 和 Little