mirror of
https://github.com/wassname/scikit-image.git
synced 2026-08-20 12:50:52 +08:00
Adding LineModel3D for RANSAC, unit test and example.
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
"""
|
||||
=========================================
|
||||
Robust line model estimation using RANSAC
|
||||
=========================================
|
||||
|
||||
In this example we see how to robustly fit a 3D line model to faulty data using
|
||||
the RANSAC algorithm.
|
||||
|
||||
"""
|
||||
import numpy as np
|
||||
from matplotlib import pyplot as plt
|
||||
from mpl_toolkits.mplot3d import Axes3D
|
||||
from skimage.measure import LineModel3D, ransac
|
||||
|
||||
np.random.seed(seed=1)
|
||||
|
||||
# generate coordinates of line
|
||||
point = np.array([0, 0, 0], dtype='float')
|
||||
direction = np.array([1, 1, 1], dtype='float') / np.sqrt(3)
|
||||
xyz = point + 10 * np.arange(-100, 100)[..., np.newaxis] * direction
|
||||
|
||||
# add gaussian noise to coordinates
|
||||
noise = np.random.normal(size=xyz.shape)
|
||||
xyz += 0.5 * noise
|
||||
xyz[::2] += 20 * noise[::2]
|
||||
xyz[::4] += 100 * noise[::4]
|
||||
|
||||
# robustly fit line only using inlier data with RANSAC algorithm
|
||||
model_robust, inliers = ransac(xyz, LineModel3D, min_samples=2,
|
||||
residual_threshold=1, max_trials=1000)
|
||||
outliers = inliers == False
|
||||
|
||||
fig = plt.figure()
|
||||
ax = fig.add_subplot(111, projection='3d')
|
||||
ax.scatter(xyz[inliers][:, 0], xyz[inliers][:, 1], xyz[inliers][:, 2], c='b', marker='o', label='Inlier data')
|
||||
ax.scatter(xyz[outliers][:, 0], xyz[outliers][:, 1], xyz[outliers][:, 2], c='r', marker='o', label='Outlier data')
|
||||
ax.legend(loc='lower left')
|
||||
plt.show()
|
||||
Reference in New Issue
Block a user