## Design Indaba as a Good Resource for Data Visualization

I came across the website Indaba Design (http://www.designindaba.com), a website/blog showcasing hundreds of interesting design. The things that interest me most about this website are approaches people proposed to visualize complex data and novel ideas to represent data in more aesthetic way.

Since I’m now working on functional MRI (fMRI) for brain image, I’m interested in how we can visualize time series of 3D brain fMRI data, which you can think of as 3D video of brain. As of now, I found that visualize such data on monitor is not very convenient, and “Shadowless“, an interesting work of Makoto Tojiki, sparks me some ideas to present the 4D video.

Another favorite work is the integrated public transportation map by Henning and Williams, where the complex routes are represented in much simpler and more aesthetic way.

## Plot 3D ellipsoid

Plot 3D Gaussian distribution? The harder part is to plot the 3D ellipsoid which can be done by calculating the axes (radii) of the ellipsoid from its eigenvalues. Simultaneously, We will get its corresponding eigenvectors which tells how to rotate the ellipsoid. The function ellipsoid(.) can plot canonical ellipsoid, and hence we need to rotate the canonical ellipsoid using the eigenvectors. That is it. Here are some codes adapted from Rajiv Singh’s version.

% plot 3D ellipsoid % developed from the original demo by Rajiv Singh % http://www.mathworks.com/matlabcentral/newsreader/view_thread/42966 % 5 Dec, 2002 13:44:34 % Example data (Cov=covariance,mu=mean) is included. Cov = [1 0.5 0.3 0.5 2 0 0.3 0 3]; mu = [1 2 3]'; [U,L] = eig(Cov); % L: eigenvalue diagonal matrix % U: eigen vector matrix, each column is an eigenvector % For N standard deviations spread of data, the radii of the eliipsoid will % be given by N*SQRT(eigenvalues). N = 1; % choose your own N radii = N*sqrt(diag(L)); % generate data for "unrotated" ellipsoid [xc,yc,zc] = ellipsoid(0,0,0,radii(1),radii(2),radii(3)); % rotate data with orientation matrix U and center mu a = kron(U(:,1),xc); b = kron(U(:,2),yc); c = kron(U(:,3),zc); data = a+b+c; n = size(data,2); x = data(1:n,:)+mu(1); y = data(n+1:2*n,:)+mu(2); z = data(2*n+1:end,:)+mu(3); % now plot the rotated ellipse % sc = surf(x,y,z); shading interp; colormap copper h = surfl(x, y, z); colormap copper title('actual ellipsoid represented by mu and Cov') axis equal alpha(0.7)

## Comparing 2 text files

Most of the time when you want to compare 2 text files, you might get used to using the command

diff old.tex new.tex

in terminal. Recently, I just found a program to do the job beautifully and, most importantly, FREE. Try ExamDiff, it works pretty well for me.

## Conditional Random Fields (CRFs) and Voxel on LIDAR

I found some interesting papers using over-segmented data (voxel) concept and CRF with terrestrial LIDAR point cloud.

Volumetric Visualization of Multiple-return Lidar Data: Using Voxels by Jason Stoker [link]

Discriminative Learning of Markov Random Fields for Segmentation of 3D Scan Data by D. Anguelov, B. Taskar, V. Chatalbashev, D. Koller, D. Gupta, G. Heitz, and A. Ng. (CVPR2005)

Conditional Random Field for 3D point clouds with Adaptive Data Reduction by E. H. Lim and D. Suter (CW2007)

Multi-scale Conditional Random Fields for Over-segmented Irregular 3D Point Clouds Classification by E. H. Lim and D. Suter (CVPR2008)

3D terrestrial LIDAR classifications with super-voxels and multi-scale Conditional Random Fields by E. H. Lim and D. Suter (CVPR2008)

Shape-based Recognition of 3D Point Clouds in Urban Environments by Aleksey Golovinskiy et al (ICCV2009)

## Plot Shaded 2D Gaussian with Contour in MATLAB

Download the MATLAB code here and run. The code has a lot of comments and easy to understand.