# FRAP analysis in ImageJ: mobile fraction and half-time, step by step

> FRAP in ImageJ: bleach, reference and background ROIs, Multi Measure, double normalisation, an exponential recovery fit, then the mobile fraction and t½.

Published 2026-11-06 by LabCanvas team. https://www.labcanvas.com/blog/frap-analysis-mobile-fraction

![ImageJ FRAP analysis of a synthetic cell: frames before the bleach, just after it and recovered, with the bleach, cell and background ROIs, and the Curve Fitting result of an exponential recovery (mobile fraction 0.80, half-time 2.78 s)](https://www.labcanvas.com/blog/imagej/frap-analysis-mobile-fraction-cover.webp)

To analyse FRAP in ImageJ, draw three ROIs (the **bleached spot**, the **whole cell** as reference and a **background** area), add them to the ROI Manager, and use **More › Multi Measure** to get their mean intensity in every frame. Double normalise the bleach-spot curve, fit the recovery with **Analyze › Tools › Curve Fitting…** (**Exponential Recovery**, \(y = a(1 - e^{-bt}) + c\)), and read off:

$$\text{mobile fraction}\ M_\mathrm{f} = \frac{a}{1 - c}$$

$$\text{half-time}\ t_{1/2} = \frac{\ln 2}{b}$$

On the worked example below ImageJ gives \(M_\mathrm{f} = 0.80\) and \(t_{1/2} = 2.78\ \mathrm{s}\) (fit R² 0.9999), against a true 0.8 and 2.77 s.

> **What you need:** ImageJ 1.x or Fiji (every command here is in both). A FRAP time-lapse as one stack with a few frames before the bleach, and the frame interval. The example is a synthetic FRAP movie (60 frames at 0.5 s, 160 × 160 pixels, 0.1 µm per pixel, bleached after frame 5) made for practice, with a known mobile fraction (0.8) and recovery rate (0.25 s⁻¹). Time: about 20 minutes.

## What the mobile fraction and t½ mean

In FRAP (fluorescence recovery after photobleaching) you bleach the fluorescent protein in a small spot and watch fresh, unbleached protein move back in.

- The **half-time (t½)** is how long the spot takes to recover half of what it will recover. Shorter means faster exchange or diffusion.
- The **mobile fraction (Mf)** is the share of the bleached protein that is replaced. If the spot comes back to 80% of the way between the post-bleach level and the pre-bleach level, \(M_\mathrm{f} = 0.8\); the other 0.2 is the **immobile fraction**, protein bound in place for the length of the experiment.

## How do I measure FRAP in ImageJ? Step by step

### Step 1: Open the movie and find the bleach

Click **File › Open…** and choose the movie. Step through it with the slider and note the last frame before the bleach (frame 5 here) and the first frame after it (frame 6, where the spot is dark). Check the frame interval under **Image › Properties…** (0.5 s here).

![ImageJ window with the synthetic FRAP movie at frame 6, the bleached spot dark](https://www.labcanvas.com/blog/imagej/frap-analysis-mobile-fraction-step1-open.webp "Step 1 in ImageJ 1.54f: frame 6 of the synthetic FRAP movie, the first after the bleach. The bleached spot is dark 1; the slider shows frame 6 of 60 2.")

### Step 2: Draw the three ROIs and add them to the ROI Manager

Open **Analyze › Tools › ROI Manager…**. Then draw each region and press **t** to add it:

1. **bleach**: the **Oval** tool, a circle exactly on the bleached spot (draw it on the first post-bleach frame, where you can see it).
2. **cell**: the whole cell, as reference. Trace it with the **Freehand** tool, or threshold frame 1 (**Image › Adjust › Threshold…**, Otsu, Dark background) and **Edit › Selection › Create Selection**.
3. **background**: a square outside the cell, away from other cells.

Select each entry and click **Rename…** to call them bleach, cell and background; the names become the column titles.

![ImageJ FRAP image with bleach, cell and background ROIs, and the ROI Manager listing them](https://www.labcanvas.com/blog/imagej/frap-analysis-mobile-fraction-step2-rois.webp "Step 2: the bleach spot 1, the whole cell as reference 2 and a background square 3, each added with t and renamed in the ROI Manager 4.")

### Step 3: Measure the mean only

Choose **Analyze › Set Measurements…** and tick **Mean gray value** only (untick Area and the rest), so the table stays readable. Click **OK**.

![ImageJ Set Measurements dialog with only Mean gray value ticked](https://www.labcanvas.com/blog/imagej/frap-analysis-mobile-fraction-step3-set-measurements.webp "Step 3: Analyze › Set Measurements… with only Mean gray value ticked 1, then OK 2.")

### Step 4: Multi Measure

Click in the ROI Manager's list without selecting anything (or click **Deselect**), then **More »** and **Multi Measure**.

![ImageJ ROI Manager with the More menu open and Multi Measure highlighted](https://www.labcanvas.com/blog/imagej/frap-analysis-mobile-fraction-step4-more-menu.webp "Step 4: ROI Manager › More » › Multi Measure 1.")

### Step 5: Set the Multi Measure options

Tick **Measure all 60 slices** and **One row per slice**, leave **Append results** unticked, and click **OK**.

![ImageJ Multi Measure dialog with Measure all 60 slices and One row per slice ticked](https://www.labcanvas.com/blog/imagej/frap-analysis-mobile-fraction-step5-multi-measure.webp "Step 5: Measure all 60 slices 1 and One row per slice 2, then OK 3. The note confirms a table with 3 columns.")

### Step 6: Read the raw intensities

The Results table has one row per frame and one column per ROI: **Mean(cell)**, **Mean(bleach)** and **Mean(background)**. At frame 6 the bleach column drops from about 1854 to 671.

![ImageJ Results table from Multi Measure with Meancell, Meanbleach and Meanbackground per frame](https://www.labcanvas.com/blog/imagej/frap-analysis-mobile-fraction-step6-results.webp "Step 6: the Results table, one column per ROI 1. The bleach spot falls from 1854.1 at frame 5 to 670.8 at frame 6 2.")

### Step 7: Double normalise

Open **Plugins › New › Macro**, paste the macro below, set **nPre** (frames before the bleach) and **dt** (seconds per frame), and click **Run**. It adds a **Time (s)** and a **Norm** column to the Results table and plots the normalised curve.

```
// FRAP double normalisation (run on the Results table from Multi Measure)
nPre = 5;      // frames before the bleach
dt = 0.5;      // seconds per frame
n = nResults;
F = Table.getColumn("Mean(bleach)");
R = Table.getColumn("Mean(cell)");
B = Table.getColumn("Mean(background)");
Fpre = 0; Rpre = 0;
for (i = 0; i < nPre; i++) { Fpre += F[i] - B[i]; Rpre += R[i] - B[i]; }
Fpre /= nPre; Rpre /= nPre;
for (i = 0; i < n; i++) {
  setResult("Time (s)", i, i * dt);
  setResult("Norm", i, (Rpre / (R[i] - B[i])) * ((F[i] - B[i]) / Fpre));
}
updateResults();
Plot.create("FRAP", "Time (s)", "Normalised intensity");
Plot.add("circle", Table.getColumn("Time (s)"), Table.getColumn("Norm"));
Plot.setLimits(0, n * dt, 0, 1.1);
Plot.show();
```

![ImageJ macro editor with the normalisation macro, the Results table with a Norm column, and the plot of the normalised recovery](https://www.labcanvas.com/blog/imagej/frap-analysis-mobile-fraction-step7-normalise.webp "Step 7: the macro in Plugins › New › Macro 1 adds a Norm column 2. The plot shows 1.0 before the bleach 3, 0.33 just after it 4 and a plateau near 0.86 5.")

The formula, for each frame \(t\) (\(F\) = bleach spot, \(R\) = whole cell, \(B\) = background, "pre" = the mean over the frames before the bleach):

$$I_\mathrm{norm}(t) = \frac{R_\mathrm{pre} - B_\mathrm{pre}}{R(t) - B(t)} \times \frac{F(t) - B(t)}{F_\mathrm{pre} - B_\mathrm{pre}}$$

The second factor scales the spot to its own pre-bleach level. The first corrects for fluorescence lost from the whole cell, both in the bleach and through imaging. This is the double normalisation of Phair, Gorski and Misteli (2004).

### Step 8: Fit the recovery

Copy the **Time (s)** and **Norm** columns from the first post-bleach frame (frame 6) to the end, and subtract the time of frame 6 so the recovery starts at 0 s. Choose **Analyze › Tools › Curve Fitting…**, delete the example numbers, paste the two columns, choose **Exponential Recovery** from the list, and click **Fit**.

![ImageJ Curve Fitting window with the post-bleach data pasted and Exponential Recovery chosen](https://www.labcanvas.com/blog/imagej/frap-analysis-mobile-fraction-step8-curve-fitting.webp "Step 8: Analyze › Tools › Curve Fitting…: time since the bleach and Norm pasted 1, Exponential Recovery chosen 2, then Fit 3.")

### Step 9: Read a, b and c

ImageJ plots the fit and lists the parameters of \(y = a(1 - e^{-bx}) + c\): \(c\) is the level just after the bleach, \(a\) is how much comes back, \(a + c\) is the plateau and \(b\) is the rate.

![ImageJ Curve Fitting result: an exponential recovery through the normalised FRAP data](https://www.labcanvas.com/blog/imagej/frap-analysis-mobile-fraction-step9-fit.webp "Step 9: the fit gives a = 0.53603 and b = 0.24966 s⁻¹ 1, c = 0.33016 and R² = 0.9999 2; the plateau is a + c = 0.866 3.")

## The worked example: Mf and t½ by hand

Part of the Results table (background-subtracted pre-bleach means: \(F_\mathrm{pre} - B_\mathrm{pre} = 1756.4\), \(R_\mathrm{pre} - B_\mathrm{pre} = 1488.5\)):

| Frame | Time (s) | Mean(bleach) | Mean(cell) | Mean(background) | Norm |
|---|---|---|---|---|---|
| 1 | 0.0 | 1878.3 | 1609.7 | 108.4 | 0.999 |
| 5 | 2.0 | 1854.1 | 1585.5 | 108.8 | 1.002 |
| 6 | 2.5 | 670.8 | 1543.1 | 108.6 | 0.332 |
| 7 | 3.0 | 770.8 | 1538.5 | 109.4 | 0.392 |
| 8 | 3.5 | 861.3 | 1532.1 | 109.8 | 0.448 |
| 11 | 5.0 | 1071.6 | 1516.4 | 109.9 | 0.580 |
| 16 | 7.5 | 1272.3 | 1488.1 | 110.9 | 0.715 |
| 21 | 10.0 | 1357.4 | 1461.2 | 110.3 | 0.782 |
| 31 | 15.0 | 1405.1 | 1408.5 | 109.9 | 0.845 |
| 60 | 29.5 | 1291.1 | 1266.5 | 109.4 | 0.865 |

Frame 6, worked through:

$$\frac{1488.5}{1543.1 - 108.6} \times \frac{670.8 - 108.6}{1756.4} = 1.038 \times 0.320 = \mathbf{0.332}$$

From the fit (Step 9):

- \(F_0\) (just after the bleach) \(= c = \mathbf{0.330}\)
- \(F_\infty\) (plateau) \(= a + c = 0.536 + 0.330 = \mathbf{0.866}\)
- **Mobile fraction** \(= (F_\infty - F_0) / (1 - F_0)\) \(= a / (1 - c)\) \(= 0.536 / 0.670 = \mathbf{0.80}\); immobile fraction 0.20
- **t½** \(= \ln 2 / b = 0.693 / 0.2497 = \mathbf{2.78\ s}\)

The sample was made with \(M_\mathrm{f} = 0.8\) and \(k = 0.25\ \mathrm{s}^{-1}\) (\(t_{1/2} = 2.77\ \mathrm{s}\)), so ImageJ recovers both.

## Why the reference ROI matters: single vs double normalisation

The raw bleach-spot intensity, divided only by its own pre-bleach level (single normalisation), mixes recovery with bleaching from imaging. Here the whole cell fades 0.4% per frame, so the single-normalised curve rises, peaks near 15 s and then falls:

![ImageJ plot of the reference, single-normalised and double-normalised FRAP curves](https://www.labcanvas.com/blog/imagej/frap-analysis-mobile-fraction-single-vs-double.webp "ImageJ 1.54f plot of the example: the whole-cell reference fades through the movie grey; the single-normalised curve peaks and falls red; the double-normalised curve reaches a flat plateau at 0.866 blue.")

| Normalisation | Mf | t½ (s) |
|---|---|---|
| Single (spot only) | 0.60 | 1.73 |
| Double (spot and whole-cell reference) | 0.80 | 2.78 |
| True value of the sample | 0.80 | 2.77 |

Without the reference, both numbers are wrong: the fit catches the early rise and treats the fading as a lower plateau.

## Pitfalls

- **Too few pre-bleach frames.** Take at least 3 to 5; Fpre is their mean.
- **A bleach ROI bigger or smaller than the bleached spot.** Draw it on the first post-bleach frame, the size of the dark spot.
- **The cell moves.** Check the ROIs on the last frame. Register the stack first if the cell drifts.
- **Reference not the whole cell.** The reference must contain the whole pool that exchanges with the spot (the whole nucleus for a nuclear protein).
- **Fitting the pre-bleach frames.** Fit from the first post-bleach frame, with time starting at 0 there.
- **A bad single exponential fit.** If the residuals curve, the protein may have two populations; try a double exponential (a custom fit in Curve Fitting) and say so.
- **t½ is not a diffusion coefficient.** Converting t½ to D needs a model for the spot size and bleach profile (for a circular spot, Soumpasis-type formulas). Report t½ unless you fit such a model.

## Reporting it

> FRAP was analysed in ImageJ 1.54f. Mean intensities of the bleached region, the whole cell and a background region were measured in every frame (ROI Manager, Multi Measure), double normalised (Phair et al. 2004) to the mean of [5] pre-bleach frames, and the recovery fitted with I(t) = a(1 − e^(−bt)) + c. Mobile fraction = a/(1 − c); t½ = ln2/b. Values are mean ± SD of [n] cells from [3] experiments.

Cite ImageJ (Schneider et al. 2012). Show the mean normalised curve ± SD with the fit, and Mf and t½ per cell as points.

## Switch to LabCanvas: FRAP in a few clicks

[LabCanvas Image Analysis](https://www.labcanvas.com/analysis.html) has a guided FRAP assay in the browser: no macro, no copying columns between windows.

1. Open the FRAP movie (or click **Try it on a sample** for the same synthetic cell) and go to **Assays › FRAP recovery**.
2. **Bleach**: the first frame after the bleach is found automatically (change it if needed).
3. **Regions**: the **Bleached spot**, **Reference (whole cell)** and **Background** are found for you, or taken from ROIs you draw.
4. **Recovery**: the curve is double normalised and fitted with \(I(t) = I_0 + A \cdot (1 - e^{-kt})\); read the mobile and immobile fraction, t½, k and R², and send the table to Graphs.

![FRAP recovery in LabCanvas Image Analysis](https://www.labcanvas.com/analysis-examples/frap.webp "FRAP recovery: Mobile fraction 0.8, recovery half-time 2.77 s, fit R² 0.9999.")

On the same movie LabCanvas gives **mobile fraction 0.8 and t½ 2.77 s (R² 0.9999)**; ImageJ above gave 0.80 and 2.78 s.

Why switch for FRAP:

- **A guided assay instead of a macro**: bleach frame, regions, double normalisation and the fit in one panel, with the regions drawn on the image.
- **Results straight to Graphs** for comparing cells and conditions, with a methods sentence to copy.
- **Nothing to install**, and every measurement is checked in [more than 4,000 automated tests](https://www.labcanvas.com/image-analysis-validation).

Fiji stays better for models beyond a single exponential (reaction–diffusion fits, two populations) through scripts, and for reading .czi, .nd2 or .lif directly; LabCanvas needs those as OME-TIFF.

[Open Image Analysis](https://www.labcanvas.com/analysis.html): free with a LabCanvas account (downloading files is part of LabCanvas Pro). ImageJ and Fiji are independent open-source projects; LabCanvas is not affiliated with them.

## References

- Phair RD, Gorski SA, Misteli T (2004). Measurement of dynamic protein binding to chromatin in vivo, using photobleaching microscopy. *Methods in Enzymology* 375, 393–414. [doi:10.1016/s0076-6879(03)75025-3](https://doi.org/10.1016/s0076-6879(03)75025-3)
- Rapsomaniki MA, Kotsantis P, Symeonidou IE, Giakoumakis NN, Taraviras S, Lygerou Z (2012). easyFRAP: an interactive, easy-to-use tool for qualitative and quantitative analysis of FRAP data. *Bioinformatics* 28, 1800–1801. [doi:10.1093/bioinformatics/bts241](https://doi.org/10.1093/bioinformatics/bts241)
- Schneider CA, Rasband WS, Eliceiri KW (2012). NIH Image to ImageJ: 25 years of image analysis. *Nature Methods* 9, 671–675. [doi:10.1038/nmeth.2089](https://doi.org/10.1038/nmeth.2089)

## Frequently asked questions

### How do I calculate the mobile fraction in FRAP?

\(M_\mathrm{f} = \frac{F_\infty - F_0}{F_\mathrm{pre} - F_0}\), where \(F_\mathrm{pre}\) is the normalised intensity before the bleach, \(F_0\) just after it and \(F_\infty\) the plateau. With double-normalised data (\(F_\mathrm{pre} = 1\)) and a fit \(y = a(1 - e^{-bt}) + c\), \(F_0 = c\) and \(F_\infty = a + c\), so \(M_\mathrm{f} = a/(1 - c)\). On the example here \(a = 0.536\) and \(c = 0.330\), so \(M_\mathrm{f} = 0.536 / 0.670 = 0.80\).

### How do I get the FRAP half-time?

Fit the recovery after the bleach with a single exponential, \(y = a(1 - e^{-bt}) + c\) (Exponential Recovery in ImageJ's Curve Fitting). The half-time is \(t_{1/2} = \ln 2 / b\). On the example \(b = 0.2497\ \mathrm{s}^{-1}\), so \(t_{1/2} = 0.693 / 0.2497 = 2.78\ \mathrm{s}\).

### What is double normalisation in FRAP?

It corrects the bleach-spot intensity for the background and for the fluorescence lost while imaging and in the bleach itself: \(I_\mathrm{norm}(t) = \frac{R_\mathrm{pre} - B_\mathrm{pre}}{R(t) - B(t)} \times \frac{F(t) - B(t)}{F_\mathrm{pre} - B_\mathrm{pre}}\), with \(F\) the bleach spot, \(R\) a reference region (the whole cell) and \(B\) the background. It is described by Phair, Gorski and Misteli (2004) and used by tools such as easyFRAP.

### Why do I need a reference ROI in FRAP?

Imaging itself bleaches the sample a little in every frame, and the bleach removes part of the cell's fluorescence. Without a reference, the recovery curve peaks and then falls. On our example, leaving the reference out gives a mobile fraction of 0.60 and a half-time of 1.73 s instead of 0.80 and 2.78 s.

### Is there a FRAP plugin for ImageJ?

Plain ImageJ needs no plugin: the ROI Manager, Multi Measure and Analyze › Tools › Curve Fitting cover it, with a few lines of macro for the normalisation. Fiji update sites and standalone tools such as easyFRAP add batch normalisation and fitting.

### Is there an easier way without installing ImageJ?

LabCanvas Image Analysis has a guided FRAP recovery assay in the browser: it finds the bleach frame and the three regions, double normalises, fits the recovery and reports the mobile fraction and t½. It is free with a LabCanvas account.

## Related links

- [ImageJ ROI Manager](https://www.labcanvas.com/blog/imagej-roi-manager): Multi Measure and saving ROIs
- [Measure fluorescence intensity in ImageJ](https://www.labcanvas.com/blog/measure-fluorescence-intensity-imagej): Mean, IntDen and background
- [Particle tracking and MSD](https://www.labcanvas.com/blog/particle-tracking-msd): Mobility from tracks instead of recovery
- [Calcium imaging: ΔF/F₀ traces](https://www.labcanvas.com/blog/calcium-imaging-delta-f-over-f): The other time-lapse intensity measurement
- [Image Analysis: the complete guide](https://www.labcanvas.com/blog/image-analysis-complete-guide): Every tool and assay in LabCanvas
