Blood flow rates can be calculated using diffuse speckle contrast analysis in spatial and time domains. In the spatial domain analysis, a multi-pixel image sensor can be used to detect a spatial distribution of speckles in a sample caused by diffusion of light from a coherent light source that is blurred due to the movement of scatterers within the sample (e.g., red blood cells moving within a tissue sample). Statistical analysis of the spatial distribution can be used to calculate blood flow. In the time domain analysis, a slow counter can be used to obtain time-series fluctuations in light intensity in a sample caused by diffusion of light in the sample that is smoothened due to the movement of scatterers. Statistical analysis of the time-series data can be used to calculate blood flow.