System designHow-to

Accumulate multiple light stripes in one image with a long exposure

One long exposure can collect every scanned light-sheet stripe onto a single frame. Timing, global shutter, signal budget and a worked 100-step example.

LumaSpec Vision9 min read Share on LinkedIn

On this page 10 sections
  1. 01How one long exposure collects every stripe
  2. 02Choose a camera that integrates through the whole scan
  3. 03Wire the timing so one trigger spans the whole scan
  4. 04Worked example: a 100-step staircase
  5. 05Set the signal budget before the real run
  6. 06Run it and check the result
  7. 07Common mistakes
  8. 08When stacking frames beats one exposure
  9. 09The decision and the next step
  10. 10Questions

A scanned light sheet paints the sample stripe by stripe, and the live view proves it: every frame catches a few bright lines while the rest of the field stays dark. The fix is not faster triggering — it is one exposure that outlasts the whole staircase, so the sensor adds every sheet position onto a single frame. This guide is for anyone driving a galvo or scan head from a DAQ and capturing on a machine-vision camera. You will size the exposure, pick a sensor that integrates cleanly, budget the signal so nothing saturates, and check the result before the real run.

How one long exposure collects every stripe

During an exposure, each pixel's photodiode turns every photon that reaches it into charge, whenever it arrives. A stripe that sits on a pixel for 1 ms deposits one dose of charge; a later pass over the same pixel adds another. The rule is superposition: charge sums, it never overwrites. The image read out at the end is the sum of every illumination interval inside the exposure window, which is why a 100-step staircase captured in one exposure arrives as one image instead of 100.

One long integration also beats stacking separate frames on noise. Software stacking adds read noise once per frame; a single integration collects it once. The cost is commitment: you cannot discard a bad stripe after the fact.

T_exposure = R × (N_steps × t_step + t_flyback) + t_margin Signal per pixel = R × signal of one pass (linear until full well) Max frame rate ≈ 1000 / T_exposure (fps, T_exposure in ms)

R is the number of sweeps inside the one exposure. With R = 1 and the sheet sweeping the field once, each pixel is lit once and the image shows one dose per pixel. Raise R and the sum grows linearly — N passes over a pixel give N times one pass's signal — until a pixel reaches full well. That full-well ceiling is the saturation budget later in this guide.

If your camera is an interline-transfer CCD, the same rule applies: the electronic shutter exposes all pixels together and shifts the charge out afterwards, so a long triggered exposure accumulates the scan exactly like a global-shutter CMOS.

Choose a camera that integrates through the whole scan

Two properties matter: an exposure long enough to cover the scan, and pixels that start integrating together. Global-shutter sensors reset and expose every row at once, so nothing is missed in the opening milliseconds. Rolling-shutter sensors reset row by row; the reset sweep takes roughly rows × row time, which on common machine-vision CMOS lands anywhere from a few milliseconds to a few tens of milliseconds at full resolution. A stripe that arrives while rows are still resetting never accumulates on them, so a scan that starts at the trigger edge loses or lopsides its first stripes. The global vs rolling shutter guide shows the mechanism frame by frame.

The workaround on a rolling sensor is a timing offset: hold the first galvo step until the reset sweep has passed, then run the staircase. The cleaner answer is a global shutter.

The MV-CU020-90GC pairs a 2.5 MP global-shutter sensor with GigE on a C-mount, a compact fit for a trigger-driven integration rig. The MV-CH120-11UC gives 12 MP resolution on USB3, also with a global shutter, when you want more pixels across the sheet.

Area scan camerasHikrobot MV-CU020-90GC 2.5 MP Area Scan Camera, GigE, GMAX4002, ColorMV-CU020-90GC
Sensor format
1/1.7"
Lens mount
C-mount
Interface
GigE
Resolution
Up to 3 MP
$309.00View partBuild a system with it
Area scan camerasHikrobot MV-CH120-11UC 12 MP Area Scan Camera, USB3, IMX304, High-speed version, ColorMV-CH120-11UC
Sensor format
1.1"
Lens mount
C-mount
Interface
USB3
Resolution
12 MP
$2,339.00 · quotedView and quoteBuild a system with it

For fluorescence work, filter the camera finder by mono sensor — machine-vision cameras are offered in mono and color, and mono suits fluorescence. The area scan cameras category lists every series.

Wire the timing so one trigger spans the whole scan

  1. Turn the camera's auto exposure and auto gain off. The budget below assumes fixed exposure and fixed gain.
  2. Set the camera to one exposure per trigger: frame-start trigger in, exposure timed by the camera, not by the pulse width.
  3. Compute T_exposure from the formula above and enter it on the camera, working with a 10 % margin.
  4. Generate the camera trigger and the galvo staircase from the same DAQ clock. Fire the trigger at t0 and start the first dwell about 1 ms later; small closed-loop galvo moves settle in a few hundred microseconds, so 1 ms is comfortable margin.
  5. Keep the camera out of free-run during capture. A free-running camera grabs whatever part of the scan happens to be in flight, which is exactly the few-stripes-per-frame picture you are replacing.
  6. For R sweeps, add the flyback time of every sweep to the exposure before you set it.

If the first triggered frame comes back black, the exposure started before the camera was ready. The first frame dark guide sorts out the two usual causes.

Worked example: a 100-step staircase

Scan geometry: 100 steps at 1 ms dwell, so one sweep is 100 ms. Exposure for a single sweep with a 10 % margin: 110 ms. The sensor and interface would allow more frames per second, but the exposure sets the ceiling: 1000 / 110 ≈ 9 fps. The scan sets the pace, not the interface.

Signal calibration: trigger one step with a 1 ms exposure and measure the stripe. On an example rig the bright core reads 800 counts on a 12-bit camera, full scale 4,096 counts. One sweep lights each crossed pixel once, so the uniform image sits at 800 counts, about 20 % of full scale. The sample is dim, so repeat the sweep inside the same exposure.

Three sweeps: T = 3 × (100 + 10) + 10 = 340 ms, ceiling 1000 / 340 ≈ 2.9 fps, signal 3 × 800 = 2,400 counts, which is 59 % of full scale — headroom left for laser drift.

Four sweeps: T = 4 × 110 + 10 = 450 ms, ceiling 1000 / 450 ≈ 2.2 fps, signal 4 × 800 = 3,200 counts, which is 78 % of full scale — under the 80 % line at 3,277 counts, but with no margin left.

The decision: run three sweeps as computed, or four with the laser trimmed to about 90 %, which lands at 3,200 × 0.9 ≈ 2,880 counts, 70 % of full scale. The counts here are one rig's example; measure your own single-step stripe and let the 80 % line pick R.

Set the signal budget before the real run

  • Check saturation on the brightest pixel, not the region mean. Saturation is per pixel, and one hot pixel clipping makes the sum non-linear; the pixel maximum is the go/no-go, the mean is for dose arithmetic.
  • Keep gain fixed and low. Gain amplifies the electronic signal, noise included, and eats headroom without adding light. Buy dose with sweeps, dwell or laser power.
  • Block room light. At 340 ms of exposure, ordinary lab lighting integrates too and lifts the whole frame; capture inside a blackout box or a dimmed room.
  • Dark current adds a small uniform offset over sub-second exposures on machine-vision CMOS. Take a dark frame at the same exposure and subtract it — the dark frame subtraction guide covers how many frames to average.

Run it and check the result

  • Histogram before you spend the sample: brightest pixel at or below 80 % of full scale, no pixel pinned at the ceiling.
  • Stripe count equals step count in the calibration pass. Missing steps mean the exposure ended early — recheck flyback and margin.
  • Uniformity along the swept axis after a full sweep: pixels with the same dwell should sit at the same counts. Uneven stripes trace to unequal dwell, galvo settling, a clipped first or last step, or scatter along the illumination path — light-sheet rigs flatten scatter stripes by pivoting the sheet at the sample (light sheet fluorescence microscopy).
  • Read back the exposure the camera actually applied per frame; the per-frame exposure metadata guide shows how to confirm it from the image stream.

Common mistakes

  • Auto exposure left on: the camera shortens the exposure by itself and the few-stripes frame returns.
  • A trigger per step when you meant one per scan: that yields 100 separate frames — a stacking technique, not an accumulation.
  • Exposure sized from dwell alone: forget flyback and margin and the tail of the scan falls outside the frame.
  • Free-run capture instead of a single trigger, so frame boundaries land mid-scan.
  • The mean used for the saturation check, so one saturated pixel hides inside a healthy average.
  • A frame-rate surprise on GigE: exposure drags the frame rate down harder than raw arithmetic suggests — the GigE frame rate guide works through why.

When stacking frames beats one exposure

  • A sample so dim it needs seconds of dose: one integration must hold everything inside a single full well, while stacked shorter frames reach the same total dose and let you drop a bad sweep before summing. The frame averaging guide covers stacking on fixed-frame-rate cameras.
  • Anything moving in the field: a 340 ms integration blurs it beyond recovery, while short frames can be aligned and summed.
  • Brightness that drifts between sweeps: per-frame stacking exposes the drift; one integration bakes it into the image.

The decision and the next step

Commit to four numbers and the technique works: exposure = scan + flyback + 10 % margin, a global shutter or a reset-sweep offset, brightest pixel at or below 80 % of full scale, and R chosen from the measured per-pass dose. On the 100-step example that reads 110 ms for one sweep, 340 ms for three, a 2.2 to 2.9 fps ceiling, and a laser trim if a fourth sweep pushes past 78 % of full scale.

To specify hardware around the rig, size camera and lens together in the configurator, or browse the systems topic page for the neighbouring timing guides.

Questions

Can a rolling-shutter camera still accumulate the scan?

Yes, if you gate the scan. Start the staircase only after the sensor's reset sweep has crossed all rows — rows × row time, a few to a few tens of milliseconds at full resolution on machine-vision CMOS. Stripes landing during that window fall on rows that have not started integrating and are lost; everything after it accumulates normally. A global-shutter camera removes the offset, which is why it is the default here.

How do I recompute exposure when the scan grows?

Multiply steps by dwell, add flyback per sweep, add about 10 % margin. A 200-step scan at 0.5 ms with one 10 ms flyback needs 200 × 0.5 + 10 = 110 ms of scan, so set about 120 ms of exposure. Re-run the single-step calibration afterwards: dwell per pass sets the per-pass dose, and the saturation budget follows from it.

Why are my accumulated stripes unevenly bright?

Uneven brightness usually traces to one of four things: unequal dwell per step, galvo settling that varies with step size, a trigger offset that clips the first or last step, or scatter and absorption along the illumination path. The first three are timing problems — equalize dwell, add settling margin, recheck the trigger offset. Scatter needs an optical fix, not a timing one.

Does camera gain work like repeating the sweep?

No. Repeating a sweep adds photons, which is real signal. Gain amplifies the electronic signal after the fact — light response and noise together — and it consumes the same headroom you reserved for the sweeps. Keep gain at its lowest fixed setting and buy dose with sweeps, longer dwell or more laser power.

What limits the frame rate during a long exposure?

The exposure itself: a 340 ms integration plus readout gives roughly 1000 / 340 ≈ 2.9 fps. On GigE the drop is steeper than raw arithmetic suggests because bandwidth and exposure interact; the guide above works through that. For a volume scan, budget cycle time as exposure plus readout for every frame, multiplied by the number of sweeps.