Reading the amplitude values of a FFT in ImageJ
Looking at the source code, the power spectrum image is using a logarithmic scale, adjusted based on the image's dynamic range such that the minimum value (not less than 1) gives a value of 1 and the maximum value gives a value of 254:

if (min&lt;1.0)
    min = 0f;
else
min = (float)Math.log(min);
max = (float)Math.log(max);
scale = (float)(253.0/(max-min));

...
if (r&lt;1f)
    r = 0f;
else
r = (float)Math.log(r);
ps[base+col] = (byte)(((r-min)*scale+0.5)+1);


Making a broad assumption that at least one of those darker pixel is a null would imply that the computed min is close to 0. With this assumption we can proceed to find max as follows:

$$
\begin{align}
   32 &amp;= \left\lfloor \ln(3.858) \frac{253}{\ln(r_\max)} + 1.5 \right\rfloor \\
   31 &amp;\approx \frac{253 \ln(3.858)}{\ln(r_\max)} \\
   \ln(r_\max) &amp;\approx \frac{253\ln(3.858)}{31} \\
   \ln(r_\max) &amp;\approx 11.02 \\
   r_\max &amp;\approx 61020
\end{align}
$$

Since most of the image is white, I would expect a large spike at the 0 frequency point with an amplitude near $NM = 256^2 = 65536$ (where $N$ and $M$ are the width and height of the image). So $r_\max \approx 61020$ is quite plausible.

So for this image (and this image only, since different images would have a different dynamic range), the approximate scaling would be:

$$
\begin{align}
\mbox{value} &amp;\approx \left\lfloor 22.96 \ln(\sqrt{X_\text{Re}^2 + X_\text{Im}^2}) + 1.5 \right\rfloor \\
  &amp;\approx \left\lfloor 11.48 \ln(X_\text{Re}^2 + X_\text{Im}^2) + 1.5 \right\rfloor
\end{align}
$$