基于python使用Robust最小二乘法和RANSAC方法作直线拟合

一、原理

1.Robust最小二乘法(Robust Least Squares Method)

        当数据中存在异常值时,最小二乘法的结果可能会受到较大的影响,导致模型的预测精度下降。为了增强对异常值的鲁棒性,Robust最小二乘法采用了不同的损失函数。传统的最小二乘法使用残差平方和作为损失函数,而Robust最小二乘法则使用对异常值不那么敏感的损失函数,如Huber损失、Tukey损失等。这些损失函数在残差较小时与残差平方和相似,但在残差较大时增长较慢,从而减小了异常值对参数估计的影响。

2.RANSAC方法(Random Sample Consensus,随机采样一致性)

        RANSAC方法是一种基于随机采样的迭代算法,主要用于从包含大量噪声和异常值(外点)的数据集中估计数学模型参数。其从数据集中随机选择一组样本点(对于直线拟合,通常需要两个点来确定一条直线),再使用选择的样本点来估计直线模型的参数(斜率和截距),并计算数据集中剩余点到估计直线的距离,将距离小于某个阈值的点视为内点。统计内点的数量,并评估当前模型的质量(通常以内点数量作为评估标准)。重复步骤多次(通常预设一个最大迭代次数),每次迭代都会生成一个新的模型,并选择内点数量最多的模型作为当前最佳模型。当达到最大迭代次数或当前最佳模型的质量不再显著提高时,算法终止,并输出最终的最佳模型。

二、代码

1.Robust最小二乘法

import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# robust最小二乘法函数
def robust_least_squares(x, y, degree, iterations, epsilon):
    # 初始化参数
    theta = np.zeros(degree + 1)
    m = len(x)
    # 添加偏置项(x^0 = 1)
    X = np.column_stack([np.power(x, i) for i in range(degree + 1)])
    # 迭代更新参数
    for _ in range(iterations):
        # 计算预测值
        y_pred = np.dot(X, theta)
        # 计算残差
        residuals = y - y_pred
        # 计算权重矩阵
        weights = np.diag(1 / (np.abs(residuals) + epsilon))  
        # 更新参数(使用加权最小二乘法)
        theta = np.linalg.inv(X.T @ weights @ X) @ X.T @ weights @ y
    
    return theta

# 读取图像并处理
image = cv2.imread('dot.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, binary = c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值