关于图像识别的一些业余思考

今天在Infoq的微信推送里看到一篇关于图像识别的文章,描述了图像识别在计算机图形验证码破解中的应用,对于计算机图像识别这些基础的计算机科学范畴还是非常有兴趣的,所以从业余者的角度试着思考一些。如何能够实现一个计算机图像识别系统,或者说实现计算机图像识别应该是什么样的,进行一些猜想。

如何获取和存储信息

要进行图像识别,首先要做的事情,肯定是用处理器能够识别的方式,将原始的图像,转换成特定的存储格式。只有这种特定存储格式,对于处理器才是有意义的,处理程序才能处理,不管处理程序是什么方式工作,这个都是必须的;就算是人类大脑也必须要将光学信号转换成大脑能够识别的神经信号,这个需要大量底层机制的支持。

简单分析一下的话,在识别这个环节,要不然就是计算机装有图像采集设备,直接获取光学信号,然后像照相机一样,用自己专用的格式来存储图像,这样的格式肯定会是最适合处理程序进行计算的。但是这种实现方法的话成本比较高,要先有自己的识别处理程序,然后以此来构建,不太符合现实世界,因为显示的计算机图像识别这种应用,更广泛的应用是识别已经存在的,大量的其他计算机存储格式的图片,例如jpg、png之类。这个涉及到的问题是,图像采集程序和识别处理程序的耦合问题。还会出现这样一种景象,为了获取要识别的图像,还要有一个程序和硬件,能够把要获取的计算机源数据用正常的浏览器或者桌面输出成光学信号。然后再让采集器采集,这个就更加复杂了。

理论上,要控制问题的边界的话,应该尽量将图像识别控制在处理器专门处理已有格式的图像上,这样的话,就不需要考虑一些可以使用已经广泛存在的技术可以解决的问题。例如,名为图像识别处理器的那个程序,应该知道如何识别jpg这种图像存储格式,能够从中解析出对自己来说有意义的信息;并且能够转换成自己进行处理的时候需要的元数据。

识别图像中的信息

确定如何获取原始的图像之后,要确定的是怎么样才能对图像进行识别和分析,这里要回到根本的探讨才能继续,要构建一个关于图像领域知识的信息架构,要明确需要输出的是什么。

其实图像识别,最重要要搞清楚的是,我们到底要用图像识别来做什么,这个问题可以很大,一直到人类的认知和行为,但是实现的过程中,还是要根据触手可及的应用,逐步的解决更加实际的问题;本质是图像领域知识的问题,但是先要搞清楚需要的输出是什么,寻找图片中的某种物品,判断是否对应物品;或者是找出某种模式,然后根据对应的模式,找出匹配特定模式的一系列图片;再或者根据图片中的场景,用文章来描述。除非是已经达到人类级别的认知,不然,就算是识别的基础算法和原理相通,还是要先弄清楚要输出什么。

简单的识别应用是OCR,识别有文字和数字的图像,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;这里的OCR程序并不知道自己翻译的计算机文字的意义是什么,只是匹配。

模式识别

OCR其实也可以算成是一种简单的判断图片中是否有某种物品,根据已经编写好并且存储起来的已知模式进行匹配,然后输出已知模式在存储系统中已经关联到的概念。不过是文字,数字都是有限的集合,而且本身模式化更简单和明确一些。但是,最终这个过程其实可以算作是最简化的图像识别,更复杂的应用,都可以在这个识别过程的各个环节中增加更复杂的解决方案。

物品则更加复杂,不同的颜色、形状、纹理、视角,都是需要考虑的因素,光是考虑单一因素,并不足以达到目标,而且要识别的物品千差万别,种类繁多,还有图片背景中周围物体等。所以在怎样识别模式这个环节,构建一个知识库就是一个很复杂的问题,在OCR中已经不是问题,但是在识别更广泛领域的图片,这种领域知识,元数据,就需要复杂的算法,还有精心设计的数据结构来出来,是一个需要能够根据经验,自动学习,不断自我完善的过程。

也就说,这里需要一个算法,从图像中,解析出一系列的模式来,这些模式中大部分是事先已经通过实践总结出来,并且每种不同模式如何识别,都有特定的过程来处理,处理出来的每种属性都会有自己的值,这些属性会在一个范围之内,而且不一定每个属性都有。这里如何分析原始图片的相关过程,假设已经是可以用的。

数据结构还需要能够自我扩展,根据已有的知识增加更多规则和模式,感觉已经来到机器学习了。

这篇文章就到此为止了,接下来应该抽空看一些相关的资料;甚至试着做点什么,看时间了。

你可能感兴趣的:(关于图像识别的一些业余思考)