【图像检测】基于局部相关分数阶傅里叶变换与向量脉冲耦合神经网络的遥感高光谱异常检测Matlab代码实现
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。
🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:做科研,博学之、审问之、慎思之、明辨之、笃行之,是为:博学慎思,明辨笃行。
🔥 内容介绍
一、引言
在当今的遥感技术领域,高光谱图像包含了丰富的地物信息,广泛应用于地质勘探、农业监测、军事侦察等多个领域。然而,从海量的高光谱数据中准确检测出异常目标是一项具有挑战性的任务。基于局部相关分数阶傅里叶变换(LC - FRFT)与向量脉冲耦合神经网络(VPCNN)的方法为遥感高光谱异常检测提供了新的有效途径,能够更精准地识别出与周围背景显著不同的异常地物。
二、相关理论基础
局部相关分数阶傅里叶变换(LC - FRFT)
分数阶傅里叶变换(FRFT):分数阶傅里叶变换是傅里叶变换的广义形式,它可以将信号投影到介于时域和频域之间的分数阶域上。通过调整分数阶数 p,能够在不同的变换域中分析信号,从而更全面地捕捉信号的特征。其定义为:
三、基于 LC - FRFT 与 VPCNN 的异常检测方法流程
数据预处理:对原始遥感高光谱图像进行辐射校正、大气校正等预处理操作,以消除传感器噪声、大气散射等因素对图像质量的影响,提高图像数据的准确性和可靠性。同时,对图像进行归一化处理,将不同波段的数据统一到相同的数值范围,便于后续的分析和处理。
LC - FRFT 特征提取:对预处理后的高光谱图像,在每个像元的局部邻域内进行 LC - FRFT 变换。通过选择合适的分数阶数 p,计算局部区域内光谱信号在分数阶域上的能量分布特征。这些特征能够反映出像元在局部空间和光谱维度上的特性,突出异常目标与背景之间的差异。例如,对于一个包含异常地物的局部区域,其在特定分数阶域上的能量分布可能与周围正常区域有明显不同,通过 LC - FRFT 可以有效地捕捉到这种差异。
VPCNN 处理:将 LC - FRFT 提取的特征作为 VPCNN 的输入。VPCNN 通过神经元之间的相互连接和脉冲传递,对特征进行进一步的处理和分析。在这个过程中,VPCNN 能够自动学习和提取异常目标的特征模式,并且利用神经元的同步振荡特性,增强异常目标与背景之间的对比度。最终,VPCNN 输出每个像元的异常检测结果,以判断该像元是否属于异常目标。
结果后处理:对 VPCNN 输出的异常检测结果进行后处理,如形态学滤波、阈值分割等操作。形态学滤波可以去除检测结果中的噪声和孤立点,使检测结果更加平滑和准确。阈值分割则根据设定的阈值,将检测结果划分为异常和正常两类,得到最终的异常检测图像。
⛳️ 运行结果
📣 部分代码
function y = Disfrft(f,a,p)%% Computes discrete fractional Fourier transform% of order a of vector x% p (optional) is order of approximation, default N/2%%N = length(f); even = ~rem(N,2);shft = rem((0:N-1) + fix(N/2),N)+1;f = f(:);if (nargin == 2), p = N/2; end;p = min(max(2,p),N-1);E = dFRFT(N,p);y(shft,1) = E*(exp(-j*pi/2*a*([0:N-2 N-1+even])).' .*(E'*f(shft)));function E = dFRFT(N,p)%% function E = dFRFT(N,a,p) returns the NxN eigenvectors of the% Fourier transform matrix% The optional argument p is the order of approximationglobal E_saved p_savedif (length(E_saved) ~= N | p_saved ~= p),E = make_E(N,p);E_saved = E; p_saved = p;elseE = E_saved;end;function E = make_E(N,p)% Returns sorted eigenvectors and eigenvalues of corresponding vectors% Construct matrix H, use approx order ordd2 = [1 -2 1]; d_p = 1; s = 0; st = zeros(1,N);for k = 1:p/2,d_p = conv(d2,d_p);st([N-k+1:N,1:k+1]) = d_p; st(1) = 0;temp = [1:k;1:k]; temp = temp(:)'./[1:2*k];s = s + (-1)^(k-1)*prod(temp)*2*st;end;% H = circulant + diagonalcol = (0:N-1)'; row = (N:-1:1);idx = col(:,ones(N,1)) + row(ones(N,1),:);st = [s(N:-1:2).';s(:)];H = st(idx) + diag(real(fft(s)));% Construct transformation matrix Vr = floor(N/2);even = ~rem(N,2);V1 = (eye(N-1) + flipud(eye(N-1))) / sqrt(2);V1(N-r:end,N-r:end) = -V1(N-r:end,N-r:end);if (even), V1(r,r) = 1; endV = eye(N); V(2:N,2:N) = V1;% Compute eigenvectorsVHV = V*H*V';E = zeros(N);Ev = VHV(1:r+1,1:r+1); Od = VHV(r+2:N,r+2:N);[ve,ee] = eig(Ev); [vo,eo] = eig(Od);%% malab eig returns sorted eigenvalues% if different routine gives unsorted eigvals, then sort first%% [d,inde] = sort(diag(ee)); [d,indo] = sort(diag(eo));% ve = ve(:,inde'); vo = vo(:,indo');%E(1:r+1,1:r+1) = fliplr(ve); E(r+2:N,r+2:N) = fliplr(vo);E = V*E;% shuffle eigenvectorsind = [1:r+1;r+2:2*r+2]; ind = ind(:);if (even), ind([N,N+2]) = []; else ind(N+1) = []; endE = E(:,ind');
🔗 参考文献
P. Xiang, H. Li, J. Song, S. Hou, H. Zhou, Hyperspectral anomaly detection with local correlation fractional Fourier transform and vector pulse coupled neural network, Infrared Physics and Technology, 127 (2022) 104430. Doi: 10.1016/j.infrared.2022.104430.Edited by Pei Xiang, November 6, 2025.
