Getting Started
Supported formats: Bruker .asc, .txt, .opd, .opdx (White Light Interferometry surface data)
Loading: Drag-and-drop a file onto the canvas, or use File → Load File.
Keyboard Shortcuts
| Space / F | Fit view to data |
| + / − | Zoom in / out |
| 1–6 | Select tool (Pointer, Pan, P2P, Cross, Line Cut, Pick Z) |
| T | Toggle 3D view |
| D | Toggle dark theme |
| Ctrl+Z / Y | Undo / Redo |
Mouse Tools
| Pan | Drag to scroll view (middle-click or tool 2) |
| Measure P2P | Click two points → lateral distance + height difference |
| Cross | Click to set reference; hover shows live Δ XYZ |
| Line Cut | Click two points → Z profile graph below canvas |
| Pick Z | Click any pixel to zero the Z offset at that point |
File Management
File → Close File resets all data, ROIs, statistics and views. The colorbar width can be adjusted by dragging its left edge.
ROI Setup
Bump ROIs
Bump ROIs define the grid of analysis regions placed over the bump array. Each ROI extracts pixels for statistical computation.
| Shape | Circle, Square, or Octagon — determines which pixels fall inside the ROI |
| NX × NY | Number of columns and rows in the grid |
| Pitch X/Y | Center-to-center spacing in pixels |
| Size | Diameter/width of each ROI in pixels |
| Origin X0, Y0 | Top-left corner of the grid (first bump center) |
| Rotation | Grid tilt in degrees. Positive = clockwise. |
| Matrix Layout | Regular (rectangular grid) or Hexagonal (offset rows) |
| ROI Groups | Multiple independent bump grids can be defined and analysed separately or combined |
Background Region
The background region defines substrate pixels used as a reference for leveling, roughness, and volume/height calculations.
| Height Range | All pixels whose Z value falls between the selected low/high sliders are treated as background |
| ROI Matrix | Background defined by explicit rectangular ROIs (same grid-layout logic as bump ROIs). Useful when the background is not cleanly separable by Z range alone |
Background is used for: surface leveling, roughness, volume baseline, pass/fail height comparison.
3-Point Alignment Tool
Accessible via the 📐 3-Point Align button. Click three bumps:
- TL — top-left corner (blue marker)
- BL — bottom-left corner (red marker)
- BR — bottom-right corner (green marker)
The tool computes: rotation from the BL→BR angle, pitch X from the BL–BR distance / (NX−1), pitch Y from TL–BL distance / (NY−1), and origin from TL. NX × NY are read from the current grid fields.
Auto Detect Grid Wizard
The wizard automates bump grid detection in 5 steps:
- Blob Detection — scans the entire image for local maxima (bumps above background). Adjust Threshold % (fraction between background median and peak height) and Min Separation (minimum distance between detected centers in pixels). Blobs appear as circles on the image in real time.
- Select 3 Reference Blobs — click the top-left, bottom-left, and bottom-right corner blobs. Each click snaps to the nearest detected blob. The grid rotation is derived directly from the BL→BR angle, so the tilt of the array is captured precisely. You can drag a placed marker to re-snap it.
- Grid Parameters — the wizard auto-computes NX, NY, pitch X/Y, origin, and rotation from the 3 reference blobs and the full detected blob set. All fields are editable; the grid updates live as you type.
- ROI Size & Shape — set the bump ROI size and aspect ratio. The default is ≈35% of the estimated pitch.
- Apply — creates a new ROI group with the computed parameters and closes the wizard.
Rotation Convention
Rotation is stored in screen coordinates where positive = clockwise. The angle is computed as atan2(BR.y − BL.y, BR.x − BL.x) — no sign inversion is needed.
Display Settings
| Show Intensity | Renders the raw optical intensity channel instead of height data |
| Colormap | Grayscale, Viridis, Inferno, Plasma, Cool-Warm, Jet |
| Color Range | Sets the min/max Z mapped to the colormap; pixels outside are clipped |
| Z Scale | Vertical exaggeration factor in 3D view |
Saved Viewpoints
Click Save Current View to capture the current 2D/3D camera state, colormap range, ROI group, and line cut profile as a thumbnail. Click a thumbnail to restore. Double-click the label to rename. Check Report to include the image in the exported PDF report.
Z Offset
Adds a constant to all Z values (in µm). Use the ⊕Z button to interactively zero at a clicked pixel. This offset is part of the undo history.
Leveling & Z Reference
Zero Z Reference (pick from image)
Sets the global Z offset by clicking points on the image:
| 1-Point Offset | Z offset = −Z(click). Zeroes the surface at the clicked pixel. |
| 2-Point Average | Z offset = −mean(Z₁, Z₂). Averages two clicked pixels. |
| 3-Point Plane | Z offset = −mean(Z₁, Z₂, Z₃). For full tilt removal use Surface Leveling below. |
Surface Leveling
Fits a polynomial to all background pixels (range or ROI method) and subtracts the fitted surface from the entire image. This removes systematic tilt and curvature from the substrate. Undo restores the previous data exactly.
Plane — z = Ax + By + C
Minimises Σ(z − Ax − By − C)² over all background pixels. Solves the 3×3 normal equations:
[ Σx² Σxy Σx ] [A] [Σxz]
[ Σxy Σy² Σy ] [B] = [Σyz]
[ Σx Σy N ] [C] [Σz ]
Removes linear tilt in X and Y. Requires ≥3 background pixels.
2nd Order — z = Ax² + Bxy + Cy² + Dx + Ey + F
Extends the plane fit with quadratic terms. Solves a 6×6 system. Removes parabolic bowl/dome-shaped substrate curvature. Requires ≥10 background pixels for a robust fit.
3rd Order — z = Ax³ + Bx²y + Cxy² + Dy³ + Ex² + Fxy + Gy² + Hx + Iy + J
Adds cubic terms. Solves a 10×10 system. Removes more complex saddle or wave-like substrate warping. Requires ≥20 background pixels.
All polynomial fits use Gaussian elimination with partial pivoting. The more background pixels available, the more stable and accurate the fit.
Surface Analysis
All analyses are recomputed automatically whenever parameters change. Results are shown in the Analysis tab.
Background Roughness
Computed from all pixels in the selected background region (height range or ROI). Characterises the surface texture of the substrate.
| Ra | Arithmetic mean roughness: Ra = (1/N) Σ |zᵢ − z̄| |
| Rq | RMS roughness: Rq = √[(1/N) Σ (zᵢ − z̄)²] |
| Rz | Peak-to-valley height: Rz = z_max − z_min |
| Rp | Maximum peak above mean: Rp = z_max − z̄ |
| Rv | Maximum valley below mean: Rv = z̄ − z_min |
Background Warpage
Fits a best-fit plane z = Ax + By + C to all background pixels using their (x, y, z) positions. Quantifies the global tilt and bow of the substrate.
| BG Warpage | Peak-to-valley of the fitted plane evaluated over the background pixels: max(Ax+By+C) − min(Ax+By+C). Represents the total height variation attributable to substrate tilt/bow. |
| Tilt X / Y | Slope coefficients A, B converted to mrad: Tilt = (A or B) / pixel_size_µm. Tells you how many milliradians the substrate is tilted in each direction. |
| Residual Ra / Rq | Roughness computed on the residuals zᵢ − (Axᵢ + Byᵢ + C): the true surface texture after removing the tilt component. More meaningful than raw Ra when significant tilt is present. |
Bump Coplanarity
For each bump ROI, the mean Z value of all pixels inside the ROI is computed. Coplanarity is the peak-to-valley of these per-ROI means:
Coplanarity = max(mean_ROI) − min(mean_ROI)
A low coplanarity means all bumps are at a similar height (good for bonding uniformity). Requires ≥2 ROIs.
Bump Warpage
Fits a best-fit plane z = Ax + By + C through the centers of bump ROIs (using each ROI's mean height as z). The warpage is the peak-to-valley range of the fitted plane evaluated at those centers:
Warpage = max(A·xᵢ + B·yᵢ + C) − min(A·xᵢ + B·yᵢ + C)
Warpage differs from coplanarity: coplanarity is the raw spread of bump heights; warpage isolates the global bow component by fitting a plane first. Requires ≥3 ROIs.
Bump Volume
Estimates the material volume of each bump above the background mean:
V_bump = Σ (zᵢ − z̄_bg) · pixel_area [for zᵢ > z̄_bg]
V_air = Σ (z_max_bump − zᵢ) · pixel_area
pixel_area = (pixel_size in µm)². Both per-bump and total volumes are reported in µm³.
Statistics Panel
| Histogram | Distribution of bump ROI mean heights (red) and background pixel heights (blue) on the same axis |
| Stats | Per-pixel µ/σ across all bump ROI pixels; per-ROI mean µ/σ; background µ/σ and pixel count |
| ΔHeight | Each bump mean minus background mean: µ, σ, min, max of the height difference distribution |
Quality Control
Spec Limits
Upper (USL) and Lower (LSL) specification limits in µm. Each bump is compared to (bump mean − background mean). A bump passes if LSL ≤ ΔH ≤ USL; otherwise it fails and is highlighted with a solid red ring.
Outlier Detection
Bumps whose mean height deviates more than N×σ from the population mean are flagged with a dashed red ring. N is set by the Outlier Sigma field. This is independent of the spec limits.
Bump Height Map
A colour-coded grid (blue = low, red = high) showing the spatial distribution of per-ROI mean heights. Each cell corresponds to one bump ROI.
Export & Session
| Export CSV | Per-ROI statistics: ID, row/col position, mean, std, min, max, N pixels (µm) |
| Export PNG | Current 2D/3D view with all active overlays |
| Export Report | HTML report with saved viewpoint images, statistics tables, and analysis summaries |
| Save Session | Exports all parameters, raw data, and ROI groups as a JSON file for later reload |
| Load Session | Restores a previously saved JSON session |
3D View
Toggle 3D with the 3D button or press T. The surface is rendered with WebGL using per-pixel height as the Z coordinate.
| Rotate | Left-drag |
| Pan | Right-drag |
| Zoom | Scroll wheel |
| Z Scale | Slider in Display tab — exaggerates height differences |
| Projection | Perspective (natural) or Orthographic (no perspective distortion) |
| Preset Views | Top, Front, Side, or Reset camera from the View menu |
Saved viewpoints capture the 3D camera state too. The Save Current View button works identically in 3D mode.