图片打分算法
1.游戏模式
在收集用户数据的方式上,我们采用了小游戏。我们提供给用户原始图片,让用户描绘我们提供的图案,我们最后提交给用户得分情况。
这个 时候就涉及到我们的打分机制了,我们的打分机制是基于图片相似度的打分机制。
2.算法描述
我们的思想是,在服务器存储样本空间的数据特征,并将新上传来的图片与样本空间的数据特征进行相似度对比。采取平均值作为总体图片的数字特征可以只用存储一张图片,如果采用其他数据特征可能需要保存整个样本空间。但是采取平均值作为数据特征也有不好的地方,就是容易受到极端值的影响,因此在程序运行一段时间,收集一定量的数据之后,我们将打分较低的图片不加入样本空间
3.相似度算法
相似度的比较算法我借鉴了网上的哈希算法以及灰度值
感知哈希可以用来判断两个图片的相似度,通常可以用来进行图像检索。感知哈希算法对每一张图片生成一个“指纹”,通过比较两张图片的指纹,来判断他们的相似度,是否属于同一张图片。常用的有三种:平均哈希(aHash),感知哈希(pHash),差异值哈希(dHash)。
平均哈希
1.图片缩放,一般为88,或者3232
2.将图片灰度化
3.求平均值,并根据平均值将每一个像素二值化
4.将8*8=64位bit,每8个比特为一个十六进制值,转换成字符串,生成哈希值(指纹)
感知哈希
1.图片缩放 为32*32大小
2.将图片灰度化
3.对图片进行离散余弦变换(DCT),转换的频域
4.取频域左上角8*8大小(图片的能量都集中在低频部分,低频位于左上角)
5.计算平均值,并根据平均值二值化(同平均哈希)
6.生成哈希值
差异值哈希
1.图片缩放为9*8大小
2.将图片灰度化
3.差异值计算(每行相邻像素的差值,这样会生成8*8的差值,前一个像素大于后一个像素则为1,否则为0)
4.生成哈希值
另外我们还采用了直方图算法来对比相似度,最后把结果投影到0-1之间,取均值作为最后的算法结果