計算影象間的相似性可以使用歐氏距離、余弦相似度/作為度量,前者強調點的思想,後者注重線的思想。
歐氏距離
歐式距離/euclidean distance即n維空間中兩個點之間的實際距離。已知兩個點a=
(a1,
a2,.
..an
),b=
(b1,
b2,.
..,b
n)a =(
a1,a
2,..
.an)
,b=(
b1,b
2,..
.,bn
),則ab間的距離為: d(
a,b)
=[∑(
ai−b
i)2]
−−−−
−−−−
−−−√
(i=1
,2,.
..,n
) d(a
,b)=
[∑(a
i−bi
)2](
i=1,
2,..
.,n)
同樣可以利用歐式距離計算影象的相似度,歐式距離越小相似度越大。
計算歐氏距離:
double euclidean_distance(mat baseimg, mat targetimg)
double simility = sqrt(sumdescriptor);
return simility;
}
漢明距離
漢明距離/hamming distance也能用來計算兩個向量的相似度;即通過比較向量每一位是否相同,若不同則漢明距離加1,這樣得到漢明距離。向量相似度越高,對應的漢明距離越小。如10001001和10110001有3位不同。
余弦相似度
余弦相似度是利用兩個向量之間的夾角的余弦值來衡量兩個向量之間的余弦相似度。兩個向量越相似夾角越小,余弦值越接近1。
在n維空間中,對於向量a=
(a1,
a2,.
..an
),b=
(b1,
b2,.
..,b
n)a =(
a1,a
2,..
.an)
,b=(
b1,b
2,..
.,bn
),其餘弦值為: co
sθ=∑
n1(a
i×bi
)∑n1
a2i√
×∑n1
b2i√
c os
θ=∑1
n(ai
×bi)
∑1na
i2×∑
1nbi
2
double cos_distance(mat baseimg, mat targetimg)
double modb = sqrt(squsumb);
double modt = sqrt(squsumt);
double simility = innerpro / (modb*modt);
return simility;
}
歐氏距離和余弦相似度
兩者相同的地方,就是在機器學習中都可以用來計算相似度,但是兩者的含義有很大差別,以我的理解就是 前者是看成座標系中兩個點,來計算兩點之間的距離 後者是看成座標系中兩個向量,來計算兩向量之間的夾角。前者因為是點,所以一般指位置上的差別,即距離 後者因為是向量,所以一般指方向上的差別,即所成夾角。如下圖...
歐氏距離和余弦相似度
參考自 歐氏距離與余弦相似度 歐氏距離和余弦相似度 在資料分析和資料探勘的過程中,我們經常需要知道個體間差異的大小,進而評價個體的相似性和類別。最常見的是資料分析中的相關分析,資料探勘中的分類和聚類演算法,如k最近鄰 knn 和k均值 k means 來衡量兩者的差異的方法,主要分為距離度量和相似度...
歐氏距離和余弦相似度
兩者相同的地方,就是在機器學習中都可以用來計算相似度,但是兩者的含義有很大差別,以我的理解就是 前者是看成座標系中兩個點,來計算兩點之間的距離 後者是看成座標系中兩個向量,來計算兩向量之間的夾角。前者因為是點,所以一般指位置上的差別,即距離 後者因為是向量,所以一般指方向上的差別,即所成夾角。如下圖...