将数据可视化为快照或展示趋势和时间推移的序列图像的方法有很多。但利用交互式界面探究数据集之间时变关系的选择寥寥无几。本文演示了创建所谓“动态失真门户”所需的代码和技术,提供局部图像的时变可视化。此外,为保证在低速计算平台上有效实现可视化,而不牺牲有用性,本文也给出了相关方面的代码。文中展示的代码探究了各种数据集及其时变状况,从而提供了应用流模型和使用模式的新见解。
|
要有效地利用本文的可视化算法,需要现代高速硬件。虽然本文在 1.8 GHz 的 IBM® ThinkPad 上开发,但考虑到逐像素纠正的可视化,建议采用更快的处理器和相关硬件数据通道。为保持有用性,本文算法考虑到“数据块绘图”效应,保证在低速硬件上仍然能够快速运行的同时,尽可能保持临时失真的作用。但也需要更高速的硬件,建议使用高性能显卡。
文章给出的代码兼容多种操作系统。本文使用的是 Linux®。如需按照本文研习,需用新版 Linux 并安装能够编译 C 程序的开发环境。还需要 SDL 和 SDL_image 库。此外,需用 mplayer 提取视频帧,按本文所开发应用程序使用的格式保存(参阅 参考资料)。
|
观看演示视频(参阅 参考资料)了解数据集时态可视化。请记住,背景图像选择静止还是活动对可视化的清晰度影响重大。本文向初学者推荐静止背景,因为静止背景上的图像发展比较容易与传统框架相整合。
数据源可以是自然现象视频、仿真,也可以是用户自建的图像序列。注意目录 temporal.images/ 中的文件,是暴风雨降水量反射率的雷达图像。
|
演示程序的全部功能都在 temporalVisualizer.c 这一个文件中实现。可按照本文的介绍逐步构建程序,也可直接下载全部源代码。清单 1 展示了程序的开头部分。
清单 1. temporalVisualizer.c 的 include 和 define 语句 //temporalVisualizer.c - display temporal distortion portals in video #include <stdio.h> #include <math.h> #include "SDL.h" #include "SDL_image.h" #define WIDTH 1024 // screen dimensions #define HEIGHT 768 #define MAX_IMAGES 110 // number of frames to read from disk #define PORTAL_DIA 50 // center distortion portal size // use 1 for per pixel correctness, multiples of ten for faster 'chunking' int chunkSize=1; int pixels[WIDTH][HEIGHT]; // frame number at each pixel coordinate int animateGrid[WIDTH][HEIGHT]; // record animation position at each pixel SDL_Surface *screen; // surface to display to user SDL_Event event; // keyboard, mouse event handling SDL_Surface* immutableImage; // base image to overwrite each frame SDL_Surface* frame[MAX_IMAGES]; // array of frames to animate SDL_Rect baseRect; // immutable image clipping rect SDL_Rect src; // current frame clipping rect int mouseX = 0; int mouseY = 0; int mouseIsDown = 0; int stopMainLoop = 0; |
所定义的变量大多用于程序中的各种函数。注意下列函数声明:
清单 2.函数定义本文转自IBM Developerworks中国
本文介绍了一种名为“动态失真门户”的可视化方法,该方法允许用户通过交互式界面探索数据集之间的时变关系。使用SDL库实现了这一可视化效果,并讨论了在不同硬件配置下的性能考量。
1896

被折叠的 条评论
为什么被折叠?



