使用失真门户可视化时变数据

将数据可视化为快照或展示趋势和时间推移的序列图像的方法有很多。但利用交互式界面探究数据集之间时变关系的选择寥寥无几。本文演示了创建所谓“动态失真门户”所需的代码和技术,提供局部图像的时变可视化。此外,为保证在低速计算平台上有效实现可视化,而不牺牲有用性,本文也给出了相关方面的代码。文中展示的代码探究了各种数据集及其时变状况,从而提供了应用流模型和使用模式的新见解。

什么是 SDL? 什么是位块传输?

在这篇文章中,Simple DirectMedia Layer (SDL) 使您可以轻松地跨平台访问视频模式和输入设备。读者对 SDL 的基本内容以及双重缓冲、位块传输和其他 2-D 图像处理技术应有一定程度的了解。

bit blit (或 bitblt, blitting 等)即位块传输,维基百科将其定义为一种计算机图形操作,将若干位图模式通过“光栅处理器”合而为一。其名称源于 Xerox Alto 计算机的 BitBLT 机器指令,表示“位块传输”。

要求

硬件

要有效地利用本文的可视化算法,需要现代高速硬件。虽然本文在 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 
#include 
#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中国

        请点击此处查看全文

你可能感兴趣的:(Open,Source,immutable,animation,数据可视化,image,ibm,keyboard)