def plot_epipolar_line(p1, p2, F, show_epipole=False):
""" Plot the epipole and epipolar line F*x=0
in an image given the corresponding points.
F is the fundamental matrix and p2 are the point in the other image.
"""
lines = np.dot(F, p2)
pad = np.ptp(p1, 1) * 0.01
mins = np.min(p1, 1)
maxes = np.max(p1, 1)
# epipolar line parameter and values
xpts = np.linspace(mins[0] - pad[0], maxes[0] + pad[0], 100)
for line in lines.T:
ypts = np.asarray([(line[2] + line[0] * p) / (-line[1]) for p in xpts])
valid_idx = ((ypts >= mins[1] - pad[1]) & (ypts <= maxes[1] + pad[1]))
plt.plot(xpts[valid_idx], ypts[valid_idx], linewidth=1)
plt.plot(p1[0], p1[1], 'ro')
if show_epipole:
epipole = compute_epipole(F)
plt.plot(epipole[0] / epipole[2], epipole[1] / epipole[2], 'r*')
评论列表
文章目录