def warp_image_by_interp_borders(edges, image):
left_edge, top_edge, right_edge, bottom_edge = edges
left_edge = left_edge[::-1, :]
bottom_edge = bottom_edge[::-1, :]
def _mapping_fcn(points):
map_x = (points[:, 0] / float(points[-1, 0]))
map_y = (points[:, 1] / float(points[-1, 1]))
top_mapping = np.array(np.round(map_x * (len(top_edge) - 1)), 'int')
bottom_mapping = np.array(np.round(map_x * (len(bottom_edge) - 1)), 'int')
left_mapping = np.array(np.round(map_y * (len(left_edge) - 1)), 'int')
right_mapping = np.array(np.round(map_y * (len(right_edge) - 1)), 'int')
map_x = np.array([map_x, map_x]).T
map_y = np.array([map_y, map_y]).T
p1s = (left_edge[left_mapping, :] * (1 - map_x)) + (right_edge[right_mapping, :] * map_x)
p2s = (top_edge[top_mapping, :] * (1 - map_y)) + (bottom_edge[bottom_mapping, :] * map_y)
return (p1s + p2s) / 2
d_top_edge = np.linalg.norm(top_edge[0, :] - top_edge[-1, :])
d_bottom_edge = np.linalg.norm(bottom_edge[0, :] - bottom_edge[-1, :])
d_left_edge = np.linalg.norm(left_edge[0, :] - left_edge[-1, :])
d_right_edge = np.linalg.norm(right_edge[0, :] - right_edge[-1, :])
d = int(np.ceil(max([d_top_edge, d_bottom_edge, d_left_edge, d_right_edge])))
return warp(image, _mapping_fcn, output_shape=(600, 600))
评论列表
文章目录