Described herein is an algorithm to remove decorrelation noise due to bulk motion in optical coherence tomography angiography (OCTA). OCTA B-frames are divided into segments within which the bulk motion velocity could be assumed constant. This velocity is recovered using linear regression of decorrelation versus the logarithm of reflectance in axial lines (A-lines) identified as bulk tissue by percentile analysis. The fitting parameters are used to calculate a reflectance-adjusted threshold for bulk motion decorrelation. Below this threshold, voxels are identified as non-flow tissue, and their flow values are set to zeros. Above this threshold, the voxels are identified as flow voxels and bulk motion velocity is subtracted from each using a nonlinear decorrelation-velocity relationship. Compared to the median-subtraction method, the bulk motion subtraction algorithm described herein improves angiogram signal-to-noise ratio, contrast, vessel density repeatability, and bulk motion noise cleanup, while preserving the connectivity of the vascular networks in the angiogram.