四元傅里叶显著性图-四元数-Matlab编程

来源:互联网 发布:sqlserver is null 编辑:程序博客网 时间:2024/05/01 11:24

3.基于四元傅里叶变换的显著性检测

(Spatio-temporal Saliency Detection Using Phase Spectrum of Quaternion Fourier Transform)

定义t时刻的输入图像F(t)(t=1,2,...,T,T表示输入视频的总帧数),r(t)、g(t)、b(t)分别表示F(t)的红、绿、蓝三通道,则其独立的颜色通道R(红)G(绿)B(蓝)Y(黄)分别定义为:

F(t)的亮度特征I(t)和运动特征M(t)定义如下:


根据人眼视觉系统的生理结构!研究发现人类视觉皮层存在红/绿、蓝/黄神经元,用RG(t)、BY(t)表示如下:

研究表明!在人类视觉系统,M(t)、I(t)、RG(t)、BY(t)这四个特征通道几乎是独立的。因此!可以用一个四元数q(t)表示视频帧的上述四个特征),定义加权图像四元数表示如下:

其中


可将q(t)写为如下形式:

q(t)可写为四元傅里叶变换(Quaternion Fourier Transform)的形式:


四元傅里叶变换的逆变换可写为如下形式:

我们用Q(t)表示频域的q(t),Q(t)可以写为极数形式:

其中表示Q(t)的相位谱部分,u是四元数的虚数单位。
则Q(t)中只保留相位谱信息,对其进行傅里叶变换的逆变换得到q'表示如下:

最终的显著图定义为:


下面为基于四元傅里叶变换的显著性检测matlab代码:
[plain] view plain copy
  1. function [qpftmap, RG, BY,I1] = qpft(rgb, sigma )%-1  
  2. %四元傅里叶相位谱显著性检测  
  3. [row ,col, page] = size(rgb);  
  4.   
  5. %计算四元数  
  6. r = double(rgb(:,:,1));  g = double(rgb(:,:,2)); b = double(rgb(:,:,3));%r红通道g绿通道b蓝通道  
  7. R = r - (g + b)/2; %调整后的红色通道  
  8. G = g - (r + b)/2; %调整后的绿色通道  
  9. B = b - (r + g)/2; %调整后的蓝色通道  
  10. Y = (r + g)/2 - (abs(r - g))/2 - b;%黄色通道  
  11.   
  12. u1=1;%I  
  13. u2=1;%RG  
  14.   
  15.   
  16. RG = R - G;%红/绿对立神经元  
  17.   
  18. BY =B - Y;%蓝/黄对立神经元  
  19.   
  20. I1 = ((r+g+b)./3).*u1;%-0 计算亮度特征  
  21. %I0=rgb2gray(rgb);  
  22.  %I1=grayslice(I0,64);  
  23.  %I1=double(I1);  
  24. %level = graythresh(I0);  %OTSU阈值确定-1  
  25. %I1=im2bw(I0,level); %转为二值图像-1  
  26.   
  27. M = zeros(row, col); %创建一个全0数组(运动特征)  
  28.   
  29. %定义加权四元数表示如下  
  30.  f1 = M + RG * 1i;   
  31.  f2 = BY + I1* 1i;  
  32.  %进行傅里叶变换  
  33.  F1 = fft2(f1);  
  34.  F2 = fft2(f2);  
  35.   
  36.   
  37. phaseQ1 = angle(F1);%得到相位谱  
  38. phaseQ2 = angle(F2);%得到相位谱  
  39. ifftq1 = ifft2(exp(phaseQ1 * 1i));%对相位谱进行傅里叶反变换  
  40. ifftq2 = ifft2(exp(phaseQ2 * 1i));%对相位谱进行傅里叶反变换  
  41. absq1 = abs(ifftq1);%得到幅值图像  
  42. absq2 = abs(ifftq2);%得到幅值图像  
  43.   
  44.   
  45. squareq=(absq1+absq2).*(absq1+absq2);  
  46.   
  47.   
  48. L = fspecial('gaussian', [5 5], sigma);%标准差为sigma的二维高斯滤波算子  
  49.   
  50. Squareq = mat2gray(imfilter(squareq, L, 'circular'));%L表示标准差为sigma的二维高斯滤波器  
  51. qpftmap = mat2gray(Squareq);%最终显著图为归一化后的二维矩阵  
  52. end  


0 0
原创粉丝点击