本文的学习资源来自《机器学习实践指南》
一、图像特征码计算优化方式
前一章的图像特征码提取算法基于像素点的三值,在某些情况下图像的微小像素点差异可能干扰识别结果。 有两种算法可以提高认识。将脸部图像的尺寸设定为适当的值。 通常越小越好。 这样,可以在省略很多噪音的同时强调脸部的特征。 另外,提取原始特征组后,采用PCA降维技术进一步加工原始特征组,生成最终特征组,更好地表现人脸。 对标准欧几里得距离进行加权。 有两种计算方法。 为区域中的每个像素设置不同的权重。 设定整体权重,使脸部图像矩阵的差分值均匀。 这里使用第二种方式。
二、变异系数
变异系数是衡量资料中各观测值变异程度的一个统计量。 比较两个以上数据的变动程度时,如果测定单位与平均值相同,则可以直接利用标准偏差进行比较。 单位与均值不同时,比较其变异程度不能采用标准差,必须采用标准差与均值之比(相对值)进行比较。离散系数的指标有全距离(极差)系数、平均差系数、方差系数、标准偏差系数等。 标准偏差系数经常使用,用cv(coefficientofvariance )表示。 补偿偏移(cv ) :标准偏差与平均值的比率。 用公式表示,CV=/CV=/
计算公式:
极差(全距离)系数) VR=r/x (VR=r/x ); 平均差系数: Va,d=a.d/x'va,d=a.d/x '; 分散系数: v分散=分散/x'v分散=分散/x '; 标准差系数: v标准差=标准差/x'v标准差=标准差/x '; 这里,x’表示x的平均值。 百度百科
变异系数可以消除因平均值不同而导致的变异程度比较中产生的干扰。 变动系数越小,偏离数据平均值的程度越小; 相反,变异系数越大,数据偏离平均值的程度越大。
在此,通过改良变异系数,将标准偏差置换为方差,将改良后的变异系数的倒数作为计算欧几里得距离的调节系数,具有对偏离度大的数据赋予小的权重,对偏离度小的数据赋予大的权重的效果。 最后对标准欧氏距离进行调节加权,实现差异平均,改进后的欧氏矩阵可以更好地表达人脸整体的差异。
三、代码示例
defget_distance(img,findimg ) :新大小=(21,21 )
fimg=cv2.resize(findimg,newsize ) )。
img=cv2.resize(img,newsize ) )。
my_img=cv2.cvtcolor(img,cv2.COLOR_BGR2GRAY )。
my_fimg=cv2.cvtcolor(fimg,cv2.COLOR_BGR2GRAY )。
# PCA降维
pcaimg=mlpy.PCA (
PCAimg.learn(my_img ) ) ) ) ) )。
PCA _ img=PCA img.transform (my _ img,k=1) )。
PCA _ img=PCA img.transform _ inv (PCA _ img ) )。
pcafimg=mlpy.PCA (
pcafimg.learn(my_fimg ) )。
PCA _ fimg=PCA img.transform (my _ fimg,k=1) )。
PCA _ fimg=pcafimg.transform _ inv (PCA _ fimg ) )。
#计算基于整体权重的欧几里得距离
返回get _ euclidean distance (PCA _ img,pca_fimg )其他代码部分与上一节相同。
执行效果: