上一篇博客介绍了实现的原理以及自己的使用JS实现的版本,其实在一开始自己并不是使用JS使用,而使用MATLAB,最后实现的效果不是很好(运行时间还是相对较长),但是自己还是从中学到了诸如MATLAB程序优化等方面的知识。
一开始使用了Matlab,因为感觉MATLAB比较擅长矩阵运行,可能在图像的操作上有优势,但是用起来后傻眼了,MATLAB可以将多边形绘制到figure,但是没有办法取得绘制出来的图像的像素信息,这样子的话我就没有办法和原图像进行比较,已确定当前的适应度值是多少,程序也就没有办法再进行下去。
当时想到的解决办法就是利用矩阵,自己在矩阵上画图,这样就复杂了很多: 1. 首先先要要根据两个点,在矩阵上连接成一条直线(这儿要用到一点图形学上的方法); 2. 然后将各条线组合成一个多边形,并将多边形围成的区域着色(这一步还好,不用在去学习图形学的知识了(^_^),直接使用imfill
函数就好了); 3. 最后一步,要将各个多边形图像层叠起来,形成一个图像,这里要理解alpha(透明度)的概念,并理解有透明度的图像在叠加时像素的计算方式(其中f指前景,b指背景,α为alpha值,参见维基百科):
这样才算基本完成了绘制图像( ̄o ̄) . z Z,而其他地方的逻辑基本跟JS版本的相同。
代码地址 github
未完待续
新闻热点
疑难解答