def rectify_image(image, clip_factor=6, algorithm='independent',
reestimate=False):
"""Rectified image with vanishing point computed using ransac.
Parameters
----------
image: ndarray
Image which has to be rectified.
clip_factor: float, optional
Proportion of image in multiples of image size to be retained if gone
out of bounds after homography.
algorithm: one of {'3-line', 'independent'}
independent ransac algorithm finds the orthogonal vanishing points by
applying ransac twice.
3-line algorithm finds the orthogonal vanishing points together, but
assumes knowledge of focal length.
reestimate: bool
If ransac results are to be reestimated using least squares with
inlers. Turn this off if getting bad results.
Returns
-------
warped_img: ndarray
Rectified image.
"""
if type(image) is not np.ndarray:
image = io.imread(image)
# Compute all edgelets.
edgelets1 = compute_edgelets(image)
if algorithm == 'independent':
# Find first vanishing point
vp1 = ransac_vanishing_point(edgelets1, 2000, threshold_inlier=5)
if reestimate:
vp1 = reestimate_model(vp1, edgelets1, 5)
# Remove inlier to remove dominating direction.
edgelets2 = remove_inliers(vp1, edgelets1, 10)
# Find second vanishing point
vp2 = ransac_vanishing_point(edgelets2, 2000, threshold_inlier=5)
if reestimate:
vp2 = reestimate_model(vp2, edgelets2, 5)
elif algorithm == '3-line':
focal_length = None
vp1, vp2 = ransac_3_line(edgelets1, focal_length,
num_ransac_iter=3000, threshold_inlier=5)
else:
raise KeyError(
"Parameter 'algorithm' has to be one of {'3-line', 'independent'}")
# Compute the homography and warp
warped_img = compute_homography_and_warp(image, vp1, vp2,
clip_factor=clip_factor)
return warped_img
评论列表
文章目录