光谱角误差(SAM)
时间: 2025-04-26 11:09:15 浏览: 43
### 光谱角误差(SAM)在遥感和光谱数据处理中的应用
光谱角误差(Spectral Angle Mapper, SAM)是一种广泛应用于高光谱遥感图像分类的技术,其基本原理在于测量两个光谱向量之间的角度差异来评估它们的相似度[^1]。SAM假设如果两组反射率光谱曲线形状相同,则这两个样本属于同一类别;反之则不属于。
对于给定的一对像素点\(i\)和\(j\), 计算两者间光谱角的方法如下所示:
\[ \theta_{ij}=\arccos{\left(\frac{A_i \cdot A_j}{||A_i|| ||A_j||}\right)} \]
其中 \(A_i\) 和 \(A_j\) 表示对应位置处获取到的多维光谱矢量,即各个波段上的响应强度组成的数组;分母部分表示各自模长乘积,分子则是这两者间的内积运算结果。最终得到的角度值越接近0°表明二者之间具有更高的匹配程度,当完全一致时理论上应为零[^3]。
#### 应用场景
- **目标识别**:利用已知地物类型的训练集构建标准光谱库,在未知区域寻找与其相匹配的对象。
- **变化检测**:对比不同时期采集的数据集,发现环境变迁情况。
- **混合像元分解**:帮助解析单个像素内部可能存在的多种成分比例关系。
```python
import numpy as np
def calculate_sam(spectrum_1, spectrum_2):
"""
Calculate Spectral Angle Mapper between two spectra.
Parameters:
spectrum_1 (numpy.ndarray): First input spectral vector.
spectrum_2 (numpy.ndarray): Second input spectral vector.
Returns:
float: Calculated SAM value in degrees.
"""
dot_product = np.dot(spectrum_1, spectrum_2)
norm_spectrum_1 = np.linalg.norm(spectrum_1)
norm_spectrum_2 = np.linalg.norm(spectrum_2)
cos_theta = dot_product / (norm_spectrum_1 * norm_spectrum_2)
theta_rad = np.arccos(np.clip(cos_theta, -1.0, 1.0))
return np.degrees(theta_rad)
```
阅读全文
相关推荐
















