光谱信息散度SID
import numpy as np
# 计算SID
def SID(x,y):
# print(np.sum(x))
p = np.zeros_like(x,dtype=np.float)
q = np.zeros_like(y,dtype=np.float)
Sid = 0
for i in range(len(x)):
p[i] = x[i]/np.sum(x)
q[i] = y[i]/np.sum(y)
# print(p[i],q[i])
for j in range(len(x)):
Sid += p[j]*np.log10(p[j]/q[j])+q[j]*np.log10(q[j]/p[j])
return Sid
SAM
SAM算法是由Kruse等[146]在1993年提出,把图像中的每个像元的光谱视为一个高维向量,通过计算两向量间的夹角来度量光谱间的相似性,夹角越小,两光谱越相似,属于同类地物的可能性越大,因而可根据光谱角的大小来辨别未知数据的类别。分类时,通过计算未知数据与已知数据间的光谱角,并把未知数据的类别归为最小光谱角对应的类别中。
根据两向量间的余弦来计算两向量间(X*未知向量,Xi已知向量)的夹角,即:
计算未知向量与所有已知向量的夹角,将其认为和夹角最小的向量同类别。
实现代码:
# 计算SAM
def SAM(x,y):
s = np.sum(np.dot(x,y))
t = np.sqrt(np.sum(x**2))*np.sqrt(np.sum(y**2))
th = np.arccos(s/t)
# print(s,t)
return th