得益于林悦这些天的消停,陈星总算搞定了简易的数字图像处理。
【前置知识:卷积的应用】起初他对此百思不得其解。因为卷积运算的核心就是一堆的矩阵相乘,但他不明白这和图像数据如何关联起来。
把图像数据整理成矩阵数组倒不是什么难事。
小车摄像头拍摄到的画面是400X300,有十万多个像素点。这些像素点对应的RGB格式颜色数据,天生就组成了一副矩阵。
因为照片天生就是一副二维平面。如果把照片上的每个像素点改用6位16进制数字来表示,那照片就是矩阵本阵。而反过来,把一個矩阵的数字对应到具体的颜色,那矩阵也就成了照片。
所以,从数据形态上是很好理解和对应的。
而接下来卷积如何卷呢,矩阵和自己卷?这显然没有意义。
思来想去,陈星还是回到了问题的源头--检测区域边界。
检测边界,才是他此番折腾的最终目的,那自然一切都要围绕这一点来进行。而要检测边界,肯定是通过判断颜色变化来实现。因为分界处的颜色变化肯定是最激烈的。
一时半会儿想不到解决办法,陈星想到了求助github和Stack Overflow。
于是陈星偷偷跑了回网吧。只因微机课还要等。他也不是没有想到去邵静瑜办公室蹭网,但是他知道林悦正被“禁锢”在那里,自己还是少去招惹为好。
在网吧缭绕的烟雾,和游戏嘶吼的呐喊声中,陈星从开源项目OpenCV处找到了答案。
OpenCV是由Intel牵头创立的开源计算机视觉和机器学习软件库,人话讲就是:用来让计算机学习如何处理图像的。
这对陈星来说犹如久旱遇甘露。
虽然OpenCV是用C++写的,虽然陈星此刻还没接触过C++。可是谁叫C语言是C++它祖宗呢,懂了C语言基本就能看懂C++。会不会用是另外一码事,能看懂开源项目代码的逻辑才是最重要。
最后陈星只花了一个小时就明白了原理。
原来卷积在数字图像领域的应用有一个最重要的概念--卷积核。
对数字图像的处理过程,是用卷积核去和图像数据矩阵做卷积运算。而卷积核的取值则直接影响了运算的结果,只要卷积核取值得当,就能起到微分求导的效果。
所以,逻辑在这一刻完美闭环了。
根据AR的提示:【微分思想的一次完美运用。前置知识:卷积的应用。】
完整的逻辑链条如下:需要检测颜色变化程度,就需要用到微分思想,而微分思想的落地,则需要靠卷积核做卷积运算来实现。
陈星再次给了AR一巴掌。每次说话说一半,完全就是在考验他的智商。好在陈星意识到开源软件是一个巨大的宝库,遇事不决找开源。毕竟用Android刷机也是从开源软件处得到的启发。
念及Android,陈星就利用剩余的时间又去看了下AOSP项目进展情况。
很遗憾的是,谷歌官方虽然在项目介绍页宣称正在和大量的硬件设备厂家洽谈,可陈星没看到有任何具体的产品发行计划。那也就是说:Android始终还是在天上飞。
不过陈星有留意到:AOSP项目一直有在更新,且相关的文档和工具手册也在迭代中。万幸,这说明至少项目还好好活着。
自从和张浩东上次会面后,陈星有机会就会和对方QQ聊聊天。遇到一两句说不清的问题,则会直接采用发邮件。既是为了了解当前技术形势,也是为了保持感情联络。
陈星出于对Android当前困境的疑惑,于是就趁着还在网吧,给对方发了条留言。