Correctly estimating fingerprint ridge orientation is an important task in fingerprint image processing. A successful orientation estimation algorithm can drastically improve the performance of tasks such as fingerprint enhancement, classification, and singular points extraction. Gradient-based orientation estimation algorithms are widely adopted in academic literature, but they cannot guarantee the correctness of ridge orientations. Even worse, they assign orientations to blocks with singular points. A novel and reliable orientation estimation algorithm is proposed in this paper. This algorithm runs in two phases. The first phase assigns reliable orientations to blocks with parallel structures and marks other blocks with noise, singular points, and minutiae as uncertain. Since most uncertain blocks marked in the first phase do have unique ridge orientations, the second phase of our algorithm restores the orientations of these uncertain blocks from their neighbor blocks orientations. Different from other orientation estimation algorithms, our algorithm leaves the blocks containing singular points and assigns reliable orientations to the other blocks. Detailed examples are given in this paper to show how our algorithm works. We use NIST-4 fingerprint database in our experiment to verify the superiority of our algorithm.