基于图支配集的高光谱图像波段选择算法 (DSEBS)

基于图支配集的高光谱图像波段选择算法 (DSEBS)

一、、 算法原理与数学模型

DSEBS 算法的精髓在于它不只看单个波段的好坏,而是从全局结构出发,同时考量波段的“信息量”“独立性”

2.1 Step 1: 构建波段关系图 (Graph Construction)

首先,我们将高光谱图像的 个波段看作无向图 中的 个节点(Vertex)。
为了衡量波段间的相似度(即边的权重 ),算法摒弃了对噪声极度敏感的欧氏距离,而是引入了径向基函数 (RBF)皮尔逊相关系数来量化任意两个波段 的亲疏关系:


(注: 代表第 个波段的所有像素向量, 为尺度参数)

同时,定义每个节点 度 (Degree) 为其与该波段与所有其他波段相似度的总和:

物理意义 越小,说明该波段越“特立独行”(可能包含独特信息); 越大,说明该波段越“合群”(处于某个光谱簇的中心)。

2.2 Step 2: 定义目标函数 (Objective Function)

为了选出最优的 个波段子集 ,我们需要一个裁判。DSEBS 设计了一个极其巧妙的准则函数

这个函数是一个分式结构:

最终目标:寻找能让 最小化的波段组合!

2.3 Step 3: 提取主导集 (Dominant Set Extraction)

由于在庞大的组合数中找到绝对的最优解(NP-hard问题)极其耗时,DSEBS 借助了图论中的主导集 (Dominant Set) 理论进行高效搜索。通过迭代优化(如复制动力学演化策略),算法能快速收敛,扒出那些最具代表性的“意见领袖”波段。


二、 算法执行流程图示

输入: 原始高光谱数据立方体 (M x N x L)
  |
  v
[Step 1: 波段图构建]
  |- 计算所有波段两两之间的相似度矩阵 (Adjacency Matrix)
  |- 计算每个波段的度 (Degree)
  |
  v
[Step 2: 目标函数计算]
  |- 初始化一个候选波段子集 B
  |- 计算当前子集的 J(B) 值 (衡量优劣)
  |
  v
[Step 3: 主导集演化搜索]
  |- 模仿生物进化: 淘汰冗余波段, 引入潜力波段
  |- 不断迭代直至 J(B) 无法再减小 (收敛)
  |
  v
输出: 精选出的 k 个最具代表性波段索引

三、 MATLAB 核心实现代码

虽然原版论文的代码较为复杂,但我们可以提炼出它的最核心骨架,让你一睹其底层逻辑。以下为简化的 MATLAB 代码实现:

function [selected_bands] = DSEBS_band_selection(hsi_img, num_bands)
    % hsi_img: 输入的高光谱三维数据 (高 x 宽 x 波段数)
    % num_bands: 期望选择的波段数量
    
    [~, ~, L] = size(hsi_img);
    hsi_reshaped = reshape(hsi_img, [], L); % 将数据重塑为 像素数 x 波段数
    
    % --- 1. 构建邻接矩阵 E 和度向量 d ---
    E = zeros(L, L);
    sigma = 0.5; % RBF核参数,可根据数据调整
    for i = 1:L
        vi = hsi_reshaped(:, i);
        for j = i+1:L
            vj = hsi_reshaped(:, j);
            dist_sq = sum((vi - vj).^2);
            E(i, j) = exp(-dist_sq / (2 * sigma^2));
            E(j, i) = E(i, j); % 对称矩阵
        end
    end
    d = sum(E, 2); % 计算度
    
    % --- 2. 模拟主导集提取 (简化版贪心搜索) ---
    % 实际论文中使用的是更复杂的基于replicator dynamics的优化
    % 这里用贪心法做原理演示
    selected_bands = [];
    current_set = [];
    
    for k = 1:num_bands
        best_J = inf;
        best_idx = -1;
        
        % 遍历所有未选中的波段
        for i = 1:L
            if ~ismember(i, selected_bands)
                temp_set = [current_set, i];
                
                % 计算目标函数 J(B)
                sum_d = sum(d(temp_set));
                sum_E = 0;
                for p = 1:length(temp_set)
                    for q = 1:length(temp_set)
                        sum_E = sum_E + E(temp_set(p), temp_set(q));
                    end
                end
                
                J_val = sum_d / sum_E;
                
                % 寻找使得 J 最小的波段加入
                if J_val < best_J
                    best_J = J_val;
                    best_idx = i;
                end
            end
        end
        
        % 将找到的最佳波段加入集合
        selected_bands = [selected_bands, best_idx];
        current_set = selected_bands;
        fprintf('选中第 %d 个波段: Band %d, J = %.4f\n', k, best_idx, best_J);
    end
    
    % 对选中的波段进行排序
    selected_bands = sort(selected_bands);
end

参考代码 基于图支配集的高光谱图像波段选择算法 www.youwenfan.com/contentcnu/60028.html

四、 为什么 DSEBS 如此强大?

相比于传统的波段选择方法(如基于信息熵排序或简单的K-Means聚类),DSEBS 具有降维打击般的优势:

  1. 传统方法往往是“目光短浅”的局部操作,而 DSEBS 通过图论模型洞察了所有波段之间的全局拓扑结构。
  2. 它的目标函数巧妙地平衡了“信息丰富度”和“波段独立性”。既不怕漏掉关键细节,也绝不允许数据冗余。
  3. 它是一种无监督算法,不需要耗费人工去标注地物类别,直接靠数据内在的数学结构就能完成特征筛选。

在实际的遥感应用中(如精准农业估产、矿物成分探测、军事伪装识别),使用 DSEBS 将几百个波段压缩到十几个核心波段后,不仅数据传输带宽骤降,后续分类器的运行速度提升数十倍,甚至连最终的分类精度都会不降反升!

专注于matlab/simulink,电子电路,编程