计算图像之间的相似性可将lhzdxl距离、馀弦相似度/用作度量,前者强调点的思想,后者重视线的思想。
lhzdxl距离欧式距离/Euclidean Distance,即n维空间中两点之间的实际距离。 两个点a=(a1,a2, an ),b=) B1,b2,bn ) a=) a1,a2, an ),b=) B1,b2,bn ),AB之间的距离为
d(a,b ) ) (aibi )2) ) I=1,2,n ) d ) a,b ) ) ) aibi )2) ) I=1,2,n ) ) )
同样可以使用欧式距离计算图像的相似度,欧式距离越小相似度越大。
计算lhzdxl距离:
double euclidean _ distance (matbaseimg,Mat targetImg ) ) { double sumDescriptor=0; for(intI=0; i baseImg.cols; I ) ) doublenumbase=ABS (base img.atfloat (0,I ); doublenumtarget=ABS (target img.atfloat (0,I ); sum descriptor=pow (num base-num target,2; } doublesimility=sqrt (sum descriptor; return simility; }汉明距离/Hamming Distance也可以用于计算两个向量的相似度。 也就是说,向量的每一比特是否相同,在不同的情况下,通过在汉明距离上加1来得到汉明距离。 向量的相似度越高,对应的汉明距离就越小。 像10001001和10110001一样相差3位数。
馀弦相似度馀弦相似度是利用两个向量之间中心角的馀弦值来测量两个向量之间的馀弦相似度。 两个向量越相似,夹角越小,余弦值越接近1。
在n维空间中,对于向量A=(a1,a2, an )、B=(b1,b2,bn ) A=(a1,a2,bn )、B=(b1,b2,bn )
cos=N1(AIbi ) N1A2I )N1B2I ) cos=1n ) aIBI ) naI21nbI2
doublecos_distance(matbaseimg,Mat targetImg ) { double squSumB=0; 双精度squ SUMT=0; double innerPro=0; for(intI=0; i baseImg.cols; I ) ) doublenumbase=ABS (base img.atfloat (0,I ); doublenumtarget=ABS (target img.atfloat (0,I ); squSumB=squSumB numBase*numBase; squ SUMT=squsumtnumtarget * num target; inner pro=innerpronumbase * num target; }doubleMODB=sqrt(squsumb ); doubleModt=sqrt(squSumt ); doublesimility=inner pro/(modb * modt; return simility; }