儿童绘画的动感世界

前言

当初做这个东东只是想参加学校的科研立项,最初的设想是供儿童随意在画板上涂鸦,然后让儿童涂鸦的图案动起来,就例如说画一个球就会滚动,画一辆飞机就会飞起来。

前期

当初的设想很美好很强大,但真正构思时却发现这远远超出了我们的水平,光是基本图形,如直线,多边形,圆等的识别就已经让我们纠结了好久。

但既然选择了,无论做成什么样,还是要继续下去的。我们团队几个人开始研究关于基本图形的识别,记得大概好像耗费了一个月的时间吧。当时首先解决的是关于直线的识别,其实说起来也很简单,就是计算首末两点的距离,和整条直线点与点之间距离的和,前者除以后者,当结果大于某一个常数时就认为是直线。经过测试也认为这是可行的,识别率在经过不断调整那个常数后可以达到很高了,差不多90%以上了。

后来圆、多边形以及波浪线跟弧线的识别也都一一被攻破,当时还用MFC做了一个很简陋的画板来测试这些方法,可惜那个画板好像后来删掉了。

但光识别基本图形还不够,毕竟不可能只画这几样东西。我们做了一个设想,就是认定所有的图形,无论多复杂,都是由这些基本图形构成,只要我们能够统计出一幅图案由多少种基本图形构成,以及各种基本形的个数和它们的相对位置,即可以认定为它是或接近于哪幅图案。当然图案都由我们收集好,目前我们做不到说儿童想要画什么就出现什么样的动画,只能通过播放接近的flash来实现这个目的。图案也就是flash,我们收集了几百种flash,并统计他们的特征,也就是上面说的那几个值,并以特定的方式编写好一个配置脚本,识别时就是根据这个配置脚本来判定的(基本图形除外)。

正式版本

这个版本的界面就是上图,很简单,只有几个按钮,如清除画面,识别画图,截图和退出等。因为这是面向儿童的,觉得不应该有太多操作,应该尽可能简单,涂鸦时也不可选定画线大小和颜色等,这不是普通的画板!

下面两张图片是一个简单的示例:

涂鸦

涂鸦

识别后

识别后

其实这里有一个问题,就是基本图形只能一笔画完,不然就会被认定为其它基本元素。组合识别有时候也不是尽善人意,会出来一些令你摸不着头脑的动画。

最后

这里做得比较成功的还是关于基本图形的识别吧,至少可以保证很高的识别率,大都在90%以上。组合识别却有待改进,或者我们应该改变整个识别的思路,但至于怎么做,我们现在却都没有时间去考虑了,接下去都是要工作了,也许将来有时间和有能力来改善这个版本,我相信会是一个很好的东东。至少,它让你的构思动起来了,这不是很好玩吗?

标签: , ,
文章分类 Programming
One comment on “儿童绘画的动感世界
  1. Firm说道:

    确实,识别这个方面要做好不易。。

    [回复]

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*