相似度计算——jmdpd距离、汉明距离、余弦相似度
发布时间: 2018-03-31 19:42、
浏览次数: 1217
计算图像之间的相似性,可把jmdpd距离、馀弦相似度/作为尺度使用,前者强调点线思想,后者重视点线思想。
jmdpd距离
欧元距离/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 ) ) )
同样可以使用欧式距离计算图像的相似度,欧式距离越小相似度越大。
计算jmdpd距离:
double euclidean _ distance (matbaseimg,Mat targetImg ) { double sumDescriptor=
0; for(intI=0; i baseImg.cols; I ) doublenumbase=ABS(baseimg.at
浮点(0,I ); doublenumtarget=ABS (target img.at (0,I ) ); 辅描述符
=pow(numbase-numtarget,2 ); } doublesimility=sqrt (sum descriptor; 返回
simility; }
汉明距离
汉明距离/汉明
距离也可以用于计算两个向量的相似度,也就是说,通过比较向量的各位是否相同,如果不同则在汉明距离上加1得到汉明距离。 向量的相似度越高,对应的汉明距离就越小。 像10001001和10110001一样相差3位数。
馀弦相似度
余弦相似度是利用两个向量之间角度的余弦值来测量两个向量之间的余弦相似度。 两个向量越相似,夹角越小,余弦值越接近1。
在n维空间中,对于向量a=(a1,a2,an ),b=(B1,b2,bn ) a=) a1,a2,an=(B1,b2,bn ) )
、剩下的弦值如下。
cos=N1(AIbi ) N1A2IN1B2Icos=1n ) AIbi )1nai21nbi2
doublecos_distance(matbaseimg,Mat targetImg ) { double squSumB=0; 双精度
squSumT=0; double innerPro=0; for(intI=0; i baseImg.cols; I ) { double
numbase=ABS(baseimg.at(0,I ); doublenumtarget=ABS (target img.at
浮点(0,I ); squSumB=squSumB numBase*numBase; squSumT=squSumT
numTarget*numTarget; inner pro=innerpronumbase * num target; }double modB=
sqrt ) squsumb; doubleModt=sqrt(squSumt ); double simility=innerPro /
(modB*modT ) return simility; }