我的毕业设计是做图像识别,特别是对证件相片的识别,但是在对图片进行二值化以后我就做不想去了,主要是对分合算法不了解,实现不了,但是还有一个月就到毕业设计提交的时候了,所以希望大家帮个忙
解决方案 »
- c# windows 程序上传照片
- 急死人啦!没解决的问题
- 怎么查找DataGri中行中的DatagridTextBox.
- 需要封装一个StreamWriter的方法ReadLine(). 欢迎讨论!
- 如何打开数据库中的word文档
- 求助:关于文件的问题
- 为什么使用PathPointType.DashMode之后,变成曲线了?
- 急~求解~~ ,windows server 2003服务器,这几天连续发现IIS自动关闭!!!!
- 请装了VS.Net2003正式版的朋友进来一下,请问版本号是多少?
- C# 怎样实现只能连接内网不能连接外网
- web services(C#)如何打开文本然后读取文本的内容?
- 想把treeview做成图中的效果,高手帮忙~~
下面具体描述分合算法和我在它的实现中的一些考虑。具体的模块组织见4.1“软件的组成”。要事先说明的一点是,现在个人计算机的内存一般都有几十M以上,对于人脸定位的应用绰绰有余,所以运行在个人计算机上的算法完全不必为了节省内存空间而做专门的考虑。但是如果希望算法能够运行在数字图像处理芯片上,就需要做改写以适应节省内存的要求了。分合算法的目的是把图像分割为许多这样的区域:具有某种共同特征并且相互连通的像素分在同一个区域,而特征不同或者不相互连通的像素分在不同的区域。(我使用的连通性定义是四连通。关于四连通和八连通的概念参见Kenneth R. Castleman(4))。判定区域R内的像素是不是具有共同的特征需要均匀性判据H(R),H(R)为True表示区域均匀(从而可以认为像素具有共同的特征),否则表示不均匀。一般应用的均匀性判据往往是区域内的灰度比较均匀,比如区域内最大和最小的灰度值之差不超过一定阈值(5)。在我的应用中,因为图像已事先做了二值化,所以均匀性的判定有所不同。我只关心黑色的区域,因为只有黑色区域可能代表人脸特征。当一个区域中黑色像素占了绝大部分时,我就认为它是均匀的。具体的判据将在算法中给出。分合算法采用金字塔数据结构。首先讨论以像素计的边长是2的整数次幂的正方形图像。塔的底层(第0层)是原始图像(在我的应用中是已经过二值化的图像)。用相邻排作正方形的四个像素作为子结点,计算上一层相应像素的取值。这样每上溯一层(层编号加1),像素数目成为原来的1/4。当整幅图只剩下一个像素时,金字塔构造完毕(见图1)。数据结构某一层中的一个像素事实上代表了第0层中2j个像素组成的一个数据方块(j是该层编号)。为了表示和计算方便起见,用编码来代表这样的一个数据块。设数据结构中最高一层的编号为n,则这个编码共有n位。把一个方块内的四个子方块按照图2顺时针标记为1,2,3,4。为了表示一个数据块,我们首先把原始图像划分成四个正方形,第一位编码就描述该数据块落在了1,2,3,4中哪个正方形里。然后对包含该数据块的正方形再划分为四个小正方形,第二位编码就描述该数据块落在了哪个小正方形里。如此反复,直到某个小正方形恰好是该数据块,此后的编码就全部取0,表示不必再细分。例如图2所示的3层金字塔结构:对于一幅普通的图像,一般都不会恰好是正方形,边长也不会恰好是2的整数次幂。我便以128×128的方块作为基本单位,用m×n个这样的方块对图像做覆盖。遇到图像中某个部分填不满一个方块的情形,就补上白色(白色不作为特征,看成空白)。每个方块都产生自己的一个7层金字塔数据结构,相互独立地运行分裂算法和合并算法。在相邻归并算法中,不处于同一个128×128划分块但是相邻的数据块应该被归入同一个特征块,所以数据块编码需要在全图像内唯一。我使用的数据块编码是在每个金字塔7位编码的基础上再加两位,分别表示在m×n个128×128划分块中该数据块所处的划分块的x和y位置。因此完整的编码是9位。根据子结点像素计算父结点像素时常用的是灰度平均法。我的应用中有所不同:如果四个像素中白色占了3块以上则父结点像素赋值为白色;如果黑白2:2对角分布也赋值为白色;如果黑色占了三块以上则赋值为黑色;如果黑白2:2各占据一侧则赋值为黑色。这样的好处是可以消除一部分不紧密的连接(2:2对角分布),而保留所有可能的紧密的连接(2:2同侧分布)。分合算法的思路是(5):1.任取一层数据结构,检验其均匀性H,若对于该结构中某一区域R有H(R)=false,则分裂这个区域为4个子区;若4个彼此相邻属于同一个父结点的区域Rk1,…,Rk4满足H(Rk1∪Rk2∪Rk3∪Rk4)=true,则合并它们成为单一区域。当不再有区域可分裂或合并时,停止分割。2.如果二任意相邻区域Ri和Rj(可以不属于同一个父结点;可以有不同的大小)使得H(Ri∪Rj)=true,则合并它们。