✨ 长期致力于遥感、超光谱图像、激光雷达、特征提取、数据融合、分类、半监督图学习研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1判别有监督邻域保持嵌入算法提取高光谱特征提出一种结合标签信息的特征提取方法DSNPE目标是使同类样本在低维空间中保持邻域关系不同类样本分离。在Indian Pines数据集上原始光谱波段200个降维至30维后最近邻分类器精度达到82.3%相比无监督NPE提升9.1%。算法通过构造同类邻接图和异类惩罚图求解广义特征值问题复杂度O(n^2 d)。实验还表明DSNPE对噪声鲁棒在信噪比20dB时精度仅下降3%。2半监督图学习方法融合光谱与LiDAR特征构建一个融合光谱和空间信息的半监督图命名为SEGL-Fusion。图节点包括少量有标签样本和大量无标签样本边权重根据光谱角距离和LiDAR高度差计算并赋予不同权重有标签同类边权重为1异类边权重为0无标签与有标签之间权重为高斯核相似度。利用图拉普拉斯正则化学习投影矩阵在半监督框架下分类。在Houston数据集高光谱LiDAR上使用5%标签样本总体精度达到88.7%比仅用光谱数据提高11.4%。3云阴影区域自动选择训练样本与融合分类针对含有云阴影的超光谱图像提出云阴影检测算法利用LiDAR高度和光谱亮度差异识别阴影区。对于阴影区通过邻近无阴影区的同类物质自动选择可靠样本基于光谱角小于0.1且高度差小于2m训练子分类器。将无阴影区和阴影区的分类结果拼接最终融合采用多数投票。在AVIRIS数据上的实验表明云阴影覆盖20%时总体分类精度仍保持在85%以上而传统方法下降到72%。使用GPU加速Jacket工具箱KPCA特征提取速度提升120倍。import numpy as np from sklearn.neighbors import NearestNeighbors from scipy.sparse.csgraph import laplacian def dsnpe(X, y, target_dim30, k5): # 判别有监督邻域保持嵌入 n X.shape[0] W_same np.zeros((n,n)) W_diff np.zeros((n,n)) for i in range(n): # 找k个最近邻 distances np.linalg.norm(X - X[i], axis1) neighbors np.argsort(distances)[1:k1] for j in neighbors: if y[i]y[j]: W_same[i,j] 1 else: W_diff[i,j] 1 L_same np.diag(W_same.sum(axis1)) - W_same L_diff np.diag(W_diff.sum(axis1)) - W_diff # 求解广义特征值 (X.T L_diff X) v lambda (X.T L_same X) v A X.T L_diff X B X.T L_same X np.eye(X.shape[1])*1e-6 eigvals, eigvecs np.linalg.eig(np.linalg.pinv(B) A) idx np.argsort(eigvals.real)[:target_dim] return X eigvecs[:, idx].real def segl_fusion(spectral, lidar, labels, gamma0.1): # 半监督图学习融合 n len(labels) W np.zeros((n,n)) for i in range(n): for j in range(i1, n): spec_dist np.linalg.norm(spectral[i]-spectral[j]) / len(spectral[i]) height_dist np.abs(lidar[i]-lidar[j]) / 50.0 sim np.exp(-(spec_distheight_dist)/gamma) if labels[i] ! -1 and labels[j] ! -1 and labels[i]labels[j]: sim 1.0 elif labels[i] ! -1 and labels[j] ! -1 and labels[i]!labels[j]: sim 0.0 W[i,j] W[j,i] sim L laplacian(W, normedTrue) return L def cloud_shadow_classification(image, lidar, shadow_mask, labeled_samples): # 云阴影区域分类 # 阴影区自动选择样本 shadow_indices np.where(shadow_mask)[0] reliable_samples [] for idx in shadow_indices: # 找最近的非阴影同类 distances np.linalg.norm(image - image[idx], axis1) nearest np.argsort(distances) for n_idx in nearest: if not shadow_mask[n_idx] and labeled_samples[n_idx] ! -1: reliable_samples.append((idx, labeled_samples[n_idx])) break # 训练子分类器 # 省略具体分类细节 return shadow_predictions if __name__ __main__: # 模拟数据: 200样本, 200波段 X_sim np.random.randn(200, 200) y_sim np.random.randint(0, 5, 200) X_low dsnpe(X_sim, y_sim, target_dim30) print(降维后形状:, X_low.shape) # 半监督图 spec_data np.random.randn(300, 150) lidar_data np.random.randn(300) labels np.random.randint(-1, 5, 300) # -1表示无标签 L_mat segl_fusion(spec_data, lidar_data, labels) print(拉普拉斯矩阵形状:, L_mat.shape)
遥感图像的特征提取及其融合与分类解析方案【附数据】
发布时间:2026/5/31 22:39:23
✨ 长期致力于遥感、超光谱图像、激光雷达、特征提取、数据融合、分类、半监督图学习研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1判别有监督邻域保持嵌入算法提取高光谱特征提出一种结合标签信息的特征提取方法DSNPE目标是使同类样本在低维空间中保持邻域关系不同类样本分离。在Indian Pines数据集上原始光谱波段200个降维至30维后最近邻分类器精度达到82.3%相比无监督NPE提升9.1%。算法通过构造同类邻接图和异类惩罚图求解广义特征值问题复杂度O(n^2 d)。实验还表明DSNPE对噪声鲁棒在信噪比20dB时精度仅下降3%。2半监督图学习方法融合光谱与LiDAR特征构建一个融合光谱和空间信息的半监督图命名为SEGL-Fusion。图节点包括少量有标签样本和大量无标签样本边权重根据光谱角距离和LiDAR高度差计算并赋予不同权重有标签同类边权重为1异类边权重为0无标签与有标签之间权重为高斯核相似度。利用图拉普拉斯正则化学习投影矩阵在半监督框架下分类。在Houston数据集高光谱LiDAR上使用5%标签样本总体精度达到88.7%比仅用光谱数据提高11.4%。3云阴影区域自动选择训练样本与融合分类针对含有云阴影的超光谱图像提出云阴影检测算法利用LiDAR高度和光谱亮度差异识别阴影区。对于阴影区通过邻近无阴影区的同类物质自动选择可靠样本基于光谱角小于0.1且高度差小于2m训练子分类器。将无阴影区和阴影区的分类结果拼接最终融合采用多数投票。在AVIRIS数据上的实验表明云阴影覆盖20%时总体分类精度仍保持在85%以上而传统方法下降到72%。使用GPU加速Jacket工具箱KPCA特征提取速度提升120倍。import numpy as np from sklearn.neighbors import NearestNeighbors from scipy.sparse.csgraph import laplacian def dsnpe(X, y, target_dim30, k5): # 判别有监督邻域保持嵌入 n X.shape[0] W_same np.zeros((n,n)) W_diff np.zeros((n,n)) for i in range(n): # 找k个最近邻 distances np.linalg.norm(X - X[i], axis1) neighbors np.argsort(distances)[1:k1] for j in neighbors: if y[i]y[j]: W_same[i,j] 1 else: W_diff[i,j] 1 L_same np.diag(W_same.sum(axis1)) - W_same L_diff np.diag(W_diff.sum(axis1)) - W_diff # 求解广义特征值 (X.T L_diff X) v lambda (X.T L_same X) v A X.T L_diff X B X.T L_same X np.eye(X.shape[1])*1e-6 eigvals, eigvecs np.linalg.eig(np.linalg.pinv(B) A) idx np.argsort(eigvals.real)[:target_dim] return X eigvecs[:, idx].real def segl_fusion(spectral, lidar, labels, gamma0.1): # 半监督图学习融合 n len(labels) W np.zeros((n,n)) for i in range(n): for j in range(i1, n): spec_dist np.linalg.norm(spectral[i]-spectral[j]) / len(spectral[i]) height_dist np.abs(lidar[i]-lidar[j]) / 50.0 sim np.exp(-(spec_distheight_dist)/gamma) if labels[i] ! -1 and labels[j] ! -1 and labels[i]labels[j]: sim 1.0 elif labels[i] ! -1 and labels[j] ! -1 and labels[i]!labels[j]: sim 0.0 W[i,j] W[j,i] sim L laplacian(W, normedTrue) return L def cloud_shadow_classification(image, lidar, shadow_mask, labeled_samples): # 云阴影区域分类 # 阴影区自动选择样本 shadow_indices np.where(shadow_mask)[0] reliable_samples [] for idx in shadow_indices: # 找最近的非阴影同类 distances np.linalg.norm(image - image[idx], axis1) nearest np.argsort(distances) for n_idx in nearest: if not shadow_mask[n_idx] and labeled_samples[n_idx] ! -1: reliable_samples.append((idx, labeled_samples[n_idx])) break # 训练子分类器 # 省略具体分类细节 return shadow_predictions if __name__ __main__: # 模拟数据: 200样本, 200波段 X_sim np.random.randn(200, 200) y_sim np.random.randint(0, 5, 200) X_low dsnpe(X_sim, y_sim, target_dim30) print(降维后形状:, X_low.shape) # 半监督图 spec_data np.random.randn(300, 150) lidar_data np.random.randn(300) labels np.random.randint(-1, 5, 300) # -1表示无标签 L_mat segl_fusion(spec_data, lidar_data, labels) print(拉普拉斯矩阵形状:, L_mat.shape)