21ic电子技术开发论坛 单片机与嵌入式系统 ST MCU 【STM32F469I试用】判断你我他有缘指数
发新帖我要提问
返回列表
打印
[STM32F4]

【STM32F469I试用】判断你我他有缘指数

[复制链接]
932|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我写这个题目,是为了吸引你进来,如果你进来了,ok太好了,:),不过应该不会失望

其实这个项目也是我自己想的,觉得还挺有意思,有缘指数,并没有一个确切的定义,于是我把两个人的相似指数定义为有缘指数,那么也不算骗你进来了。

在上篇**中
https://bbs.21ic.com/forum.php?mo ... peid%26typeid%3D350
我写了sobel滤波的原理和实现。通过图像与模板的卷积来实现,模板是微分运算的简化形式。

那么我们便可以实现很多不同的花样,应为最后都可以化为模板卷积的形式
具体可以看看效果
https://bbs.21ic.com/icview-1242440-1-1.html

在我原本的计划中,我是想实现一个基本的ps,在469上拥有基本的ps功能,应该说滤镜图片处理功能。
但是有一些算法过于复杂,时间的消耗上,更多的是469的内存上不足以让我实现,也就暂时放弃了,以后可能会尽量实现出来


扯了辣么多,还没有到正题,今天的主题是有缘指数

如果做的更远一点就是配对指数,在人群中寻找跟你更有缘的人,pc上搭建服务器,469访问。

不过先做最简单的办,判断两个是否有缘(相似)。

按照正常的步骤,需要首先对 图片进行人脸检测,取出图片的背景部分,但是受制于内存,哪怕实现adaboost也不是那么容易,而且也偏离了主题,也想过用最最简单的颜色空间的方式检测人脸,效率不高,计算也蛮复杂,469主频又不算高,想了想,省掉这一步吧,主要是懒,哈哈。

有缘指纹检测
图片那么大,像素个数辣么多,不可能按照捉个捉个像素的方式来比较,因此需要对图片进行降维,提取出能够代码图片的少量数据,可能pca是最常见的方法,公式很多,很数学,但是要在单片机上实现,悬

因此我找到一种更简单的方式,hash指纹

更复杂的原理,我就省略了,可参考一下博文【1】【2】【3】,
为了一切从简,我选中了基于低频的均值哈希
对于一种图片而言,可看成f(x,y)二维函数,包含了不同成分的频率,变化剧烈的高频分量,变化平滑的低频分量。高频描述了图片的细节,低频可以得到图片的整体样式。
而刚好,图片的整体框架便可以得到利用,就像平时我们去观察某个东西,可能会说,虽然细节不像,但整体看起来还挺像的。

对图片进行下采样,即缩小图像,就是损失高频细节,提取低频框架的过程。

于是通过以下步骤,便得到64bit的hash指纹

1、缩小图像尺寸
将图像缩放到8*8,不仅减少了数据量而且去除了高频成分,留下低频分量,并且相当于将不同尺度的图片归一化到同一尺寸,减少图片大小的影响一举多得。

2、转成gray图像
彩色图像不仅数据量大,而且也没有必要。

3、计算灰度平均值
将图片8*8 共64个像素求和,然后求平均


4、比较灰度大小
对每一个像素,如果灰度值大于平均值,记为1,否则为0.事实上这里可以实现不同的加权系数,比如高斯加权等等。


5、得出hash指纹
上一步,经过比较后,可以得到1,1,0,0,1.。。。。。。将64个1,0的数组合成一个64bit的整数,这就是图片的表示了,hash指纹。如何对指纹进行组合并不重要,因为我们并不需要也不会去比较这个数的大小,只是比较其中1,0的个数差异。当然了,对不同图片的次数必须保持一致。




6、比较两张图片的hash指纹
char bitdif=bitcount(hashA^hashb),bitcouont是一个计算1的个数的函数。

7、计算相似度
相似度的评价函数,则可以灵活的自定义了,最简单的莫过于,bitdif/64;
如果用1-G(bitdif),可能会好一些,其中G(x)为高斯函数

8、显示结果
将上一步计算得到的结果显示在tft上。
沙发
mmuuss586| | 2016-1-8 13:48 | 只看该作者

强;

使用特权

评论回复
板凳
wejoncy|  楼主 | 2016-1-8 13:52 | 只看该作者

多谢版主支持:P

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

168

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部