|||
早先,矢量场的可视化使用的是箭头,表现出一些点上流线切矢量的大小。这种理论上直观的图像看起来其实一点也不直观。如果你看过这种图的话,会有一种感觉,只有箭头能够收尾相连形成一些流线的时候,图看起来才比较直观。但是这不总能实现,尤其是某些点的切矢量比较大的情况。
前段时间,组里的领导开会的时候看到了一张图,看起来就像油画一样,能看到背景图片,同时又能看到一些纹理,这些纹理就代表了磁场。一直以来都不知道这种图是怎么实现的,直到昨天问了Carl。他给了一个幻灯片,里面提到,这种方法叫做Line Integral Convolution,字面意思是线积分卷积。上网搜了一下,其实这种方法也不新,上世纪末就在计算机图形学中出现了,只不过天文学后知后觉,最近才有人引入。不过看了很多文档才终于明白原理。简单说,就是用一种在沿流线方向比较长,横截方向比较短的“波束”对图像(通常是白噪声)进行平滑(滤波),然后就可以得到一些“流线段”。这是一种非常聪明的方法。
搞清楚了原理,写出程序来并不难,但是还是想偷懒。上网查了一下有没有IDL程序,确实有,不过是把C程序包装了一下(https://github.com/mgalloy/mglib)。下载下来总是出错。也有C写的程序(http://www.cs.utah.edu/~wmartin/cs523project/),但是编译不过。最终还是找到了python的解决方案(http://wiki.scipy.org/Cookbook/LineIntegralConvolution),这个程序包依赖于Cython,在Windows下总是安装不成功,倒是在Linux下比较干脆,可以生成图片,步骤如下:
python setup.py
python lic_demo.py
在想到在Linux下运行之前,我尝试对这个程序包中的核心程序lic.py进行了改写,实现了算法,不过效果稍微差一些,但是也算有点成就感吧。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-22 15:13
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社