# Shot noise and centroid finding

Shot noise is a fluctuation that affects all light intensity measurements, including microscopic images recorded with a CCD camera. ^{[1]} It is a consequence of the discrete and stochastic nature of photon emission. Poisson statistics provide an excellent model for shot noise. The standard deviation of a Poisson-distributed random variable is equal to the square root of its average value. Thus, the lowest possible signal to noise ratio of an intensity measurement is equal to the square root of the average number of photons (intensity). The simulated images above show the effect of shot noise on the image of a fluorescent microsphere with a radius of 10 pixels for several values of intensity.

One method to estimate the position of a microsphere in an image is to compute an intensity-weighted centroid (similar to a center of mass calculation). Intensity-weighted centroids can provide locations accurate to a fraction of a pixel. Shot noise causes random variation in the pixel intensities, which affects the computed centroid. Even for a stationary particle, repeated centroid computations will exhibit random variation. Deriving an analytical expression for the variation is tedious. Happily, patient people with exceptional mathematical abilities have taken the time to do so. (See, for example, this reference: Jia, Jiankun Yang, and Xiujian Li. Minimum variance unbiased subpixel centroid estimation of point image limited by photon shot noise.). The variation in the centroid is approximately proportional to the square root of intensity.

As a result, the diffusion coefficient measured by taking intensity weighted centroids of a perfectly stationary particle will not be zero. The measured diffusion coefficient of a non stationary particle will be systematically increased.

Here is the code that generated the simulated images:

figure maximumIntensity = [1e6 1e4 1e2 1e1 1e0]; radius = 10; imageSize = [40 40]; for ii = 1:length(maximumIntensity) subplot(1, length(maximumIntensity), ii) imshow(poissrnd(SimulateFluorescentParticleImage(imageSize ./ 2, maximumIntensity(ii), radius, imageSize)) ... ./ maximumIntensity(ii)); title(['SNR = ' num2str(sqrt(maximumIntensity(ii)))]); end function [ OutputImage ] = SimulateFluorescentParticleImage( CentroidList, Intensity, Raduis, ImageSize ) numberOfParticles = size(CentroidList,1); OutputImage = zeros(ImageSize); if(length(Raduis) == 1) Radius = Raduis * ones(1, numberOfParticles); end if(length(Intensity) == 1) Intensity = Intensity * ones(1, numberOfParticles); end for ii=1:numberOfParticles OutputImage = OutputImage + DrawParticle(CentroidList(ii, 1), CentroidList(ii, 2), Radius(ii), Intensity(ii), ... ImageSize(1), ImageSize(2)); end end

- ↑ There are a few exotic methods, such as amplitude-squeezed light that reduce noise below the shot noise level.