Необходимо реализовать генерацию зашумленных данных и поиск на них прямой с использованием алгоритма RANSAC
Для выполнения нужно реализовать 4 функции:
- generate_data -- генерация зашумленных данных
- compute_ransac_threshold -- вычисление порогового значения для оценки соответствия отдельной точки посчитанной модели
- compute_ransac_iter_count -- вычисление необходимого для сходимости количества итераций
- compute_line_ransac -- подбор параметров модели с использованием алгоритма RANSAC
def generate_data(
img_size: tuple, line_params: tuple,
n_points: int, sigma: float, inlier_ratio: float
) -> np.ndarray
Требуется:
Построить набор из n_points точек в области img_size, таких, что:
- inlier_ratio из них соответствовали бы модели line_params, но были бы зашумлены нормальным шумом с дисперсией sigma и нулевым матожиданием
- (1 - inlier_ratio) были бы равномерно распределены на области img_size (не соответствовали бы модели)
Параметры:
- img_size (WxH) -- размер прямоугольной области, в которой расположены все данные
- line_params (a, b, c) -- параметры прямой ax+by+c=0, которой должны соответстовать сгенерированные данные
- n_points -- требуемое количество точек
- sigma -- дисперсия нормального распределения шума для точек, соответствующих модели
- inlier_ratio -- доля точек (из всех), соответствующих модели
- data [out] -- зашумленный набор точек, соответствующих модели прямой
def compute_ransac_threshold(
alpha: float, sigma: float
) -> float
Требуется: Определить пороговое значение расстояния, по которому определяется, соответствует ли точка некоторой модели или нет
Параметры:
- alpha -- требуемая вероятность рассмотрения точки как соответствующей модели, если она действительно соответствует модели
- sigma -- дисперсия нормального распределения шума для точек, соответствующих модели
- threshold [out] -- пороговое значение для определения соответствия точки и модели
def compute_ransac_iter_count(
conv_prob: float, inlier_ratio: float
) -> int
Требуется: Определить количество итераций, необходимых RANSAC, чтобы сойтись с вероятностью conv_prob
Параметры:
- conv_prob -- вероятность, с которой алгоритм сойдется к модели, по которой построены данные
- inlier_ratio -- доля точек (из всех), соответствующих модели
- iter_count [out] -- необходимое количество итераций
def compute_line_ransac(
data: np.ndarray, threshold: float, iter_count: int
) -> tuple
Требуется: Реализовать алгоритм RANSAC для поиска модели прямой на полученных зашумленных данных
Параметры:
- data -- зашумленный набор точек, соответствующих модели прямой
- threshold -- пороговое значение для определения соответствия точки и модели
- iter_count -- необходимое количество итераций
- line [out] -- оценка параметров модели прямой