mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-27 23:08:44 +08:00
55f5103dd8
Modified travis_script.sh to account for the new structure of the gallery Added README.txt files in directories of gallery examples Fixed references to gallery images in user guide pages Fixed broken links
41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
"""
|
|
============================================
|
|
Robust 3D 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 LineModelND, 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, LineModelND, 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()
|