fullseye

What Fullseye can do

Language: 日本語 · English

An index organised by what you want to do, not by operator name. One entry is one file under docs/capabilities/, and every entry is tied to operators that exist and to an example that actually runs — tests/test_capabilities.py checks each operator name against all four public tiers and each example against the files on disk, so a capability claim with nothing behind it cannot survive.

To add one: write docs/capabilities/<id>.md and run py -3.11 tools/gen_capabilities_index.py (this index is generated — do not edit it by hand).

Currently 16 capabilities

Measure (4)

Put measurements on the Earth (ECEF and geodetic)

Convert between geodetic (latitude, longitude, height) and Earth-centred Cartesian (ECEF) coordinates. The round-trip floor measures 6.4e-12 degrees in latitude and 8.5e-07 m in height (worst case over 4000 points).

Operators: dem_geodetic_to_ecef, dem_ecef_to_geodetic

Runnable: poc_geodetic_height_frames, dem_geodesy_tour

Measure dimensions from an image, below the pixel

Locate edges along a measurement line from the intensity gradient, at sub-pixel resolution, and read a dimension as the distance between paired edges. Unlike counting thresholded pixels, the answer does not move when the threshold does.

Operators: measure_pos, measure_pairs, blob_label, blob_select

Runnable: poc_dimensional_inspection, poc_screw_thread_metrology

Slope, flow and line of sight on a terrain

From a height grid: slope, aspect, viewshed and flow direction. Each has a closed form to check against, so an implementation error shows up as a number.

Operators: dem_slope, dem_aspect, dem_viewshed, dem_flow_direction

Runnable: poc_dem_terrain, dem_terrain_analysis_tour

Turn a 3-D scan into a volume

Compute a signed volume from a closed mesh, a voxel count from a labelled region, or the material between two surfaces from a height grid. Gaps can be filled by interpolation, and how far that interpolation reached is reported separately.

Operators: mesh_volume, vol_rle_volume, interp_scattered, dem_slope

Runnable: poc_stockpile_volume, poc_lidar_terrain_change

Detect (2)

Segment regions, select them, and count

Label connected components, select them by area, shape or position, and count them. Touching objects can be separated with a watershed.

Operators: blob_label, blob_select, blob_count, watersheds

Runnable: poc_cell_counting, poc_particle_sizing, poc_real_coin_metrology

Find small point-like targets and locate them below the pixel

Pick local maxima above a robustly estimated background plus k sigma, and return sub-pixel centroids. The name is astronomical but the method is domain-neutral: drifting objects, small defects, fluorescent puncta, particles.

Operators: star_detect, peak_subbin, find_peaks, noise_sigma

Runnable: poc_search_sweep_width, poc_astro_photometry

Shape (2)

Reconstruct slices from projections (CT)

Forward parallel-beam projection to a sinogram, filtered back-projection to a slice or a volume, and the injection and correction of ring artefacts and beam hardening. The reconstructed volume can be turned straight into a mesh.

Operators: radon_transform, fbp_volume, ring_artifact_remove, marching_cubes

Runnable: poc_ct_fidelity, poc_ct_void_morphology

Carve a solid out of silhouettes (visual hull)

From the foreground masks of several calibrated cameras, carve out a voxel volume that always contains the object. No learned model, no depth sensor.

Operators: synthesize_silhouette, carve, visual_hull, carve_look_at

Runnable: space_carving, poc_livestock_body_volume

Light and colour (2)

Measure colour (XYZ / Lab / colour difference)

From spectral reflectance or RGB, compute CIE XYZ and Lab, then colour differences under CIE76 or CIEDE2000. The difference can also be returned as a per-pixel map.

Operators: rgb_to_lab, xyz_to_lab, delta_e_2000, cie_xyz_from_wavelength

Runnable: poc_white_balance, poc_pigment_unmixing

Compute reflection, refraction and interference

Fresnel reflectance, thin-film interference colour, grating colour, and vector-form refraction with a per-ray total-internal-reflection mask — with the dispersion of real glasses.

Operators: fresnel_dielectric, thin_film_reflectance, grating_rgb, refract_rays

Runnable: glass_and_mirror_optics, appearance_structural_colour

Waves and signals (2)

Beamform for direction, separate range from velocity

Form beams from an array snapshot to get directions of arrival, and build a range-Doppler map from an FMCW return, mapping detections back to metres and metres per second.

Operators: beamform_delay_sum, beamform_doa, range_doppler_map, range_doppler_peaks

Runnable: poc_multibeam_bathymetry, poc_bev_sensor_fusion

Diagnose faults from vibration and sound

Envelope spectra, cepstra, octave bands and the characteristic frequencies of a rolling-element bearing. The frequencies follow from the geometry, so which peak to look at is decided before measuring, not after.

Operators: signal_features, envelope_spectrum, bearing_defect_frequencies, octave_spectrum, spectrum

Runnable: poc_bearing_diagnosis, poc_rail_corrugation

Compose (1)

Align and stack

Align a sequence by voting for the translation, resample sub-pixel, and stack. Point clouds are aligned with ICP.

Operators: frame_align, drizzle_resample, icp_point2point_3d, interp_scattered

Runnable: poc_astro_photometry, poc_registration_basin

Show (3)

Turn results into figures people can read

Panel grids, dimension and pointer annotations, height pseudo-colour, and a full SDF renderer — all from Fullseye operators, so a result becomes a figure without a plotting library in between.

Operators: annotate_figure_grid, colorize_height, render_beauty

Runnable: poc_colormap_readability, poc_dem_terrain

Draw lines and regions without knowing the background colour

Draw a polyline or a region in the inverse of whatever is underneath, so the overlay stays visible without knowing the background. draw="margin" outlines instead of filling. The one real failure mode — mid-grey, where the complement equals the original — is measured rather than assumed: annotate_invert_visibility reports the per-pixel WCAG contrast, and the drawing ops warn (or refuse) when the mark would be invisible.

Operators: annotate_invert, annotate_invert_path, annotate_invert_visibility

Runnable: annotate_paper_tour

Put text and tables exactly where you want them on an image

Place text on an image where you actually want it: nine-way anchors, translucent plates, wrapping, and — along a polyline — slanted, vertical (upright=True), multi-line (\n), start/centre/end alignment and a perpendicular offset. Colour, plus synthetic bold and italic. annotate_table turns a tab-separated string into a table whose column widths are measured with the real font at the requested size, with a font-size-proportional column gap, automatic right-alignment for numeric columns and a translucent plate. Every one has a *_layout twin that returns the geometry so you can check the placement before drawing.

Operators: text_box, annotate_text_path, annotate_text_path_layout, annotate_table, annotate_table_layout, measure_text

Runnable: annotate_paper_tour