使用多边形绘制图像(MATLAB)
2017-02-08 16:54
453 查看
上一篇博客介绍了实现的原理以及自己的使用JS实现的版本,其实在一开始自己并不是使用JS使用,而使用MATLAB,最后实现的效果不是很好(运行时间还是相对较长),但是自己还是从中学到了诸如MATLAB程序优化等方面的知识。
一开始使用了Matlab,因为感觉MATLAB比较擅长矩阵运行,可能在图像的操作上有优势,但是用起来后傻眼了,MATLAB可以将多边形绘制到figure,但是没有办法取得绘制出来的图像的像素信息,这样子的话我就没有办法和原图像进行比较,已确定当前的适应度值是多少,程序也就没有办法再进行下去。
当时想到的解决办法就是利用矩阵,自己在矩阵上画图,这样就复杂了很多:
1. 首先先要要根据两个点,在矩阵上连接成一条直线(这儿要用到一点图形学上的方法);
2. 然后将各条线组合成一个多边形,并将多边形围成的区域着色(这一步还好,不用在去学习图形学的知识了(^_^),直接使用
3. 最后一步,要将各个多边形图像层叠起来,形成一个图像,这里要理解alpha(透明度)的概念,并理解有透明度的图像在叠加时像素的计算方式(其中f指前景,b指背景,α为alpha值,参见维基百科):
这样才算基本完成了绘制图像( ̄o ̄) . z Z,而其他地方的逻辑基本跟JS版本的相同。
代码地址 github
一开始使用了Matlab,因为感觉MATLAB比较擅长矩阵运行,可能在图像的操作上有优势,但是用起来后傻眼了,MATLAB可以将多边形绘制到figure,但是没有办法取得绘制出来的图像的像素信息,这样子的话我就没有办法和原图像进行比较,已确定当前的适应度值是多少,程序也就没有办法再进行下去。
当时想到的解决办法就是利用矩阵,自己在矩阵上画图,这样就复杂了很多:
1. 首先先要要根据两个点,在矩阵上连接成一条直线(这儿要用到一点图形学上的方法);
2. 然后将各条线组合成一个多边形,并将多边形围成的区域着色(这一步还好,不用在去学习图形学的知识了(^_^),直接使用
imfill函数就好了);
3. 最后一步,要将各个多边形图像层叠起来,形成一个图像,这里要理解alpha(透明度)的概念,并理解有透明度的图像在叠加时像素的计算方式(其中f指前景,b指背景,α为alpha值,参见维基百科):
这样才算基本完成了绘制图像( ̄o ̄) . z Z,而其他地方的逻辑基本跟JS版本的相同。
代码地址 github
MATLAB程序优化
未完待续相关文章推荐
- 使用Matlab绘制图像的rgb颜色空间和Lab颜色空间分量图和分量直方图
- 使用多边形绘制图像
- 由滤波器系数绘制尺度函数和小波函数图像的Matlab程序
- 使用matlab作为图表绘制工具--Matlab使用入门
- [C#]GDI+中使用BitBlt绘制图像到窗口失败
- 在wxWidgets中使用OpenCV绘制摄像头图像
- 使用matlab绘制数学函数
- 【图像】软件使用--matlab访问向量中的元素
- WPF中,如何使用图像API进行绘制而不是XAML?
- 使用 directfb绘制图像(draw image with directfb)
- 【转】Flex4 中skinclass使用Path绘制多边形
- 使用matlab绘制柱状图
- 使用Matlab进行图像处理
- 使用Window的DC把OpenCV读入的图像数据绘制出来
- 【Bing Map学习系列】(6)——如何使用Bing Maps Silverlight Control绘制多边形
- 在matlab内绘制函数图像
- 【转】由滤波器系数绘制尺度函数和小波函数图像的Matlab程序
- 在matlab内绘制函数图像
- WEB前端使用VML绘制多边形
- MATLAB基本的使用方法归纳(图像,矩阵及函数)