matlab二值化处理黑色背景,Matlab 对图片的二值化处理

这几天做了一道题目,要求在 5000 张图片中找出 30 张与样例相同但经过放大或缩小,高亮或变暗的图片。

整体思路是把图片hash成一段指纹,这个指纹和图片的大小、格式、明暗均无关,只和图片的内容本身有关。

1.先把彩色图片转为灰度图

如果原本的一个像素点的rgb值为(r1,g1,b1),一个比较简易的方法转为灰度图,

就是 gray1=(r1*299+g1*587+b1*114+500)/1000

那么该像素点的rgb颜色变为(gray1,gray1,gray1)。

而我用的是 Matlab 中的函数 imgray = rgb2gray(imdata);

2.将灰度图转化为黑白图

先计算出该图的平均灰度,一种比较简易的做法是把所有像素点的灰度求和平均。 然后对于每个像素点,如果小于平均灰度,则rgb值为(0,0,0),否则为(255,255,255)。

经过这一步,图片就变成黑白的了。我用的是 Matlab 中函数 lev = graythresh( imdata); 求平均灰度,再 bwimg = im2bw( imdata, lev); 求二值图。

但这样的函数对于一些高亮或灰暗的图片的处理不是特别的好,会使整个图片呈现全白或全黑的现象。

我对于这些图片的处理是 自己设定 lev,根据需要设 lev 为 0~1 的值,而不是求图片的平均值。(找到更好的方法再来更新)。

4 编码

将之前的二值图放大或缩小为 8*8 的一个矩阵 imdata = imresize(imdata, [8,8]);

144361893728412.jpg

白为 0,黑为 1 整合成 1 个 64 位的二进制, 转化为 16 进制则是这个图片的指纹了。

在这里,我并没有转换成 16 进制进行比较,而是直接对二进制串做的对比,完全相同的并不多,所以不同的字符在十个之内我都算成相似的,再进行进一步的比较。

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文:http://www.cnblogs.com/ygdblogs/p/5071165.html

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值