Change blindness: significant changes are not noticed by the observer
goals: visual exploration, analysis and presentation
pipeline: data acquisition -> filtering -> visualization/mapping -> rendering/interaction
Sensory memory: Preattentive processing, "instinctive" perception
Short-term memory: seconds to minutes, limited capacity
Long-term memory: days to years, unlimited capacity
Weber's law: linear increase in subjective perception with logarithmic increase in stimulus intensity
Distinguish 200 colors (H), 500 gradations (S), 20 variation (V)
Two stages of visual perception:
Preattentive: automatic, parallel processing of visual featuresAttentive: serial processing, requires focus
Preatentive attributes: < 8 hues, <= 4 orientations, <= 4 sizes, <= 10 else
non-preatentive attributes: parallelism, juncture
Color: use high luminance contrast, avoid red-green combinations, only use max 5 colors
Best to worst mapping: position -> length -> angle/slope -> area -> luminance/saturation -> volume/curvature
Steven's area judgment scale:
Rule: map most important data to the most accurate visual attribute
Simple line Graphs: direct comparison, fine details BUT clutter, hard to distinguish time series
Stacked Graphs: time series destinguish BUT less vertivcal resolution, hard to compare time series
Small multiples: easy time series destinguish, easy to compare BUT less resolution per time, difficult to compare across time
Horiton Graphs: vertical resolution, quick min/max BUT steep learning curve, hard to compare
Quartils:
Parallel Coordinates: crossing lines -> negative correlation, parallel lines -> positive correlation
Derivative to a point
On Image:
-
forward derivative:$f'\rightarrow_x(x,y)=f(x,y) - f(x-1,y)$ - backward derivative:
$f'\leftarrow_x(x,y)=f(x,y) - f(x+1,y)$
Gradient:
Derivative to a point
On Image:
- forward derivative:
$\nabla f(x,y) = \left(f(x,y) - f(x-1,y), f(x,y) - f(x,y-1)\right)$
Hessian Matrix: First row is derivative to x then x y z, second row is derivative to y then x y z, third row is derivative to z then x y z
Type of critical point (
- local minimum:
$0 < \lambda_1 \leq \lambda_2 \leq \lambda_3$ - saddle point:
$\lambda_1 < 0 < \lambda_3$ - local maximum:
$\lambda_1 \leq \lambda_2 \leq \lambda_3 < 0$
Calculate eigenvalues:
$A - \lambda E$ $det(A - \lambda E) = 0$ $det(M_{2x2}) = a_{11}a_{22} - a_{12}a_{21}$ $det(M_{3x3}) = m_{11}m_{22}m_{33} + m_{12}m_{23}m_{31} + m_{13}m_{21}m_{32} - m_{13}m_{22}m_{31} - m_{12}m_{21}m_{33} - m_{11}m_{23}m_{32}$
Quadrangle Lemma: minimum, saddle, maximum, saddle
Jacobian Matrix: first row is derivative of u to x, y and z, second row is derivative of v to x, y and z and third row is derivative of w to x, y and z
Critical points:
- inflow behavior:
$Re(\lambda_i) < 0$ - outflow behavior:
$Re(\lambda_i) > 0$ - swirling behavior:
$Im(\lambda_1) = -Im(\lambda_2) \neq 0$
Poincaré Index: counterclockwise rotation of a vector, number of counterclockwise rotation of that vector
Divergence: sum of the diagonal elements of the Jacobian matrix
Laplacian: zweite ableitung nach x + zweite ableitung nach y + zweite ableitung nach z
Estemated divergence:
Curl:
Data reconstruction: get continuous data from discrete data
- set constant boxes based on the data
- interpolate the data in the boxes
Radial Basis Function:
Better:
- drawbacks: every sample point is used, so it is slow, new points need to be recalculated
One solution:
New formula:
- still have to calculate all again for new points
Triangulation: connect points with triangles, then interpolate the data in the triangles
- avoid long, thin triangles -> use Delaunay triangulation
- make circle around triangle, if another triangle has line inside, flip the line
Line-interpolation:
Triangle-interpolation:
Grid-interpolation:
-
linear:
$f(x,y)$ calculate 1D on x axis for value x, then use the result to calculate 1D on y axis for value y -
bilinear: f(x,y) calculate area of quadrangle
$xy$ ,$(1-x)y$ ,$x(1-y)$ ,$(1-x)(1-y)$ , then use the areas to calculate the value with values$f_{ij}$ of opposite corners
Marching cubes: distinguish which way diagonal is cut by calculating middle value
Connected Component Analysis: find connected components in a binary image and only keep the largest one
Smoothing:
-
Iterative smoothing: average the points with their neighbors
-
$x_i \leftarrow x_i + \lambda\sum_j \omega_{ij}(x_j - x_i)$ with$\omega_{ij}$ is the weight of point$j$ to point$i$ and$\lambda$ is the smoothing factor -
Combinatorial:
$\omega_{ij} = 1$ if$i$ and$j$ are neighbors, else 0 -
Laplace-Smoothing:
$\omega_{ij} = \frac{1}{N(i)}$ -> loses volume -
Laplace-Smoothing + HC: Add correction term to Laplace-Smoothing to keep volume
-
LowPass Filter: implementation of two laplace smoothing steps, with
$\lambda_1 > 0$ and$\lambda_2 < 0$ -
Mean value filter: average the normal vector of surfaces in the neighborhood
-
Median filter: average the normal vector of surfaces in the neighborhood, but only use the median value
Distance aware smoothing: Smooth more the further away from a certain point -> use distance as scaling factor
Maximum Intensity Projection: project the maximum value of a volume onto a 2D plane
- Interpolation: use linear interpolation to get the value from inside the voxel
- nearest neighbor: use the value of the nearest voxel
- Nyquist-Shannon Sampling Theorem: to avoid aliasing, sample at least twice the highest frequency of the signal ->
$< 0.5$ voxel size
Transfer function: map data values to colors and opacities
Gradients:
- forward difference: $\nabla f(x,y) = \begin{pmatrix} f(x + 1) - f(x) \ f(y+1) - f(y) \end{pmatrix}$
- backward difference: $\nabla f(x,y) = \begin{pmatrix} f(x) - f(x - 1) \ f(y) - f(y - 1) \end{pmatrix}$
- central difference: $\nabla f(x,y) = \frac{1}{2} \begin{pmatrix} f(x + 1) - f(x - 1) \ f(y + 1) - f(y - 1) \end{pmatrix}$
Types of projections:
- First-hit: only the first voxel that is hit by the ray is used
- average: average all voxels that are hit by the ray
- maximum intensity: use the maximum value of all voxels that are hit by the ray
- cvp, threshold: use first voxel that is above a certain threshold
- mida: local maximum of change of intensity along the ray
Surface normal:
Curvature Information:
-
$T=trace(G)$ sum of the diagonal elements of the matrix - $F = |G|F = \sqrt{G{11}^2 + \dots + G_{nn}^2}$
$\kappa_{1/2} = \frac{T \pm \sqrt{2F^2 - T^2}}{2}$
Isolines on triangles: on side
Covariant Derivative:
Contours vs crease lines:
- differences:
- view dependent: contours are view dependent, crease lines are view independent
- sharp edges: creases show sharp edges
- contours: crease lines are not contours
- similarities:
- order 1
- both no round edges
- both no bumps
- both show deformations
Evaluation: Schulze method, pairwise comparison, rank order
Streamlines: follow the arrows in once specific moment in time
Pathlines: follow the movement of a particle over time
Streaklines: connect particles that have passed through a point at a certain time, that is: connect all partlicles observed over time
Euler Integration:
- large errors
Runga Kutta 2nd order:
- euler step
- on way of euler step, go back to halfway point and calculate velocity at halfway point
- use velocity at halfway point to calculate new position from start position
Runga Kutta 4th order:
$k_1 = v(x_i) \cdot \Delta t$ $k_2 = v(x_i + \frac{1}{2}k_1) \cdot \Delta t$ $k_3 = v(x_i + \frac{1}{2}k_2) \cdot \Delta t$ $k_4 = v(x_i + k_3) \cdot \Delta t$
- euler step
- on way of euler step, go back to halfway point and calculate velocity at halfway
- from start position, go with new velocity ->
$k_2$ - at halfway point of
$k_2$ , calculate velocity and go to new position ->$k_3$ - at end of
$k_3$ , calculate velocity and go to new position ->$k_4$ - use all four velocities (in a certain ratio) to calculate new position
Streamline Integration: Draw streamlines with a minimum distance between them, if dinstace is reached, stop integration
How to find critical points:
- compute the gradient of the vector field and set it to zero
- use Jacobian matrix and the eigenvalues at the critical points to determine the type of critical point
Take noise image, calculate pathlines and then use the noise image to draw the streamlines with a certain opacity