博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Matlab 对图片的二值化处理
阅读量:5091 次
发布时间:2019-06-13

本文共 876 字,大约阅读时间需要 2 分钟。

  这几天做了一道题目,要求在 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]);

      

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

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

 

转载于:https://www.cnblogs.com/ygdblogs/p/5071165.html

你可能感兴趣的文章
sqlite的坑
查看>>
digitalocean --- How To Install Apache Tomcat 8 on Ubuntu 16.04
查看>>
【题解】[P4178 Tree]
查看>>
Mongo自动备份
查看>>
cer证书签名验证
查看>>
synchronized
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
QML学习笔记之一
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>