当前位置: 首页 > news >正文

直线拟合例子 ,岭回归拟合直线

目录

直线拟合,算出离群点

岭回归拟合直线:


直线拟合,算出离群点

import cv2
import numpy as np# 输入的点
points = np.array([[51, 149],[122, 374],[225, 376],[340, 382],[463, 391],[535, 298],[596, 400],[689, 406],[821, 407]
], dtype=np.float32)# 使用 RANSAC 算法拟合直线,并返回内点和离群点
def fit_line_ransac(points, max_iters=1000, threshold=10):"""使用 RANSAC 算法拟合直线,并判断离群点:param points: 输入的点集,形状为 (N, 2):param max_iters: 最大迭代次数:param threshold: 内点阈值:return: 拟合直线的斜率和截距 (k, b), 内点索引, 离群点索引"""best_k, best_b = 0, 0best_inliers = []max_inliers = 0for _ in range(max_iters):# 随机选择两个点sample_indices = np.random.choice(len(points), 2, replace=False)sample = points[sample_indices]x1, y1 = sample[0]x2, y2 = sample[1]# 计算直线的斜率和截距if x1 == x2:  # 垂直线k = float('inf')b = x1else:k = (y2 - y1) / (x2 - x1)b = y1 - k * x1# 计算所有点到直线的距离distances = np.abs(k * points[:, 0] - points[:, 1] + b) / np.sqrt(k**2 + 1)# 统计内点inliers = np.where(distances < threshold)[0]# 更新最佳模型if len(inliers) > max_inliers:max_inliers = len(inliers)best_k, best_b = k, bbest_inliers = inliers# 离群点 = 所有点 - 内点outliers = np.setdiff1d(np.arange(len(points)), best_inliers)return (best_k, best_b), best_inliers, outliers# 使用 OpenCV 绘制点、拟合直线和内点/离群点
def draw_points_and_line(image, points, inliers, outliers, k, b, color_line=(255, 0, 0), color_inliers=(0, 255, 0), color_outliers=(0, 0, 255)):"""使用 OpenCV 绘制点、拟合直线和内点/离群点:param image: 背景图像:param points: 输入的点集:param inliers: 内点索引:param outliers: 离群点索引:param k: 直线斜率:param b: 直线截距:param color_line: 直线颜色 (BGR):param color_inliers: 内点颜色 (BGR):param color_outliers: 离群点颜色 (BGR)"""# 绘制内点for i in inliers:x, y = points[i]cv2.circle(image, (int(x), int(y)), 5, color_inliers, -1)# 绘制离群点for i in outliers:x, y = points[i]cv2.circle(image, (int(x), int(y)), 5, color_outliers, -1)# 绘制拟合直线x_min, x_max = int(np.min(points[:, 0])), int(np.max(points[:, 0]))y_min = int(k * x_min + b)y_max = int(k * x_max + b)cv2.line(image, (x_min, y_min), (x_max, y_max), color_line, 2)# 创建背景图像
image_width = 1000  # 图像宽度
image_height = 600  # 图像高度
background = np.zeros((image_height, image_width, 3), dtype=np.uint8)  # 黑色背景# 使用 RANSAC 算法拟合直线,并判断离群点
(k, b), inliers, outliers = fit_line_ransac(points)
print(f"RANSAC 拟合直线: y = {k:.2f}x + {b:.2f}")
print(f"内点索引: {inliers}")
print(f"离群点索引: {outliers}")# 绘制点、拟合直线和内点/离群点
draw_points_and_line(background, points, inliers, outliers, k, b)# 显示图像
cv2.imshow("RANSAC Line Fitting with OpenCV", background)
cv2.waitKey(0)
cv2.destroyAllWindows()# 保存图像
cv2.imwrite("ransac_line_fitting_opencv.jpg", background)

岭回归拟合直线:

import cv2
import numpy as np
from sklearn.linear_model import Ridge# 生成带噪声的点
np.random.seed(42)
num_points = 100
x = np.linspace(0, 10, num_points)
y = 2 * x + 1 + np.random.normal(0, 1, num_points)  # y = 2x + 1 + 噪声# 将 x 转换为二维数组(因为 sklearn 需要二维输入)
X = x.reshape(-1, 1)# 使用岭回归拟合直线
ridge = Ridge(alpha=1.0)  # alpha 是正则化强度
ridge.fit(X, y)# 获取拟合的斜率和截距
slope = ridge.coef_[0]
intercept = ridge.intercept_# 打印拟合结果
print(f"拟合直线方程: y = {slope:.2f}x + {intercept:.2f}")# 计算拟合直线的两个端点
x_min, x_max = 0, 10
y_min = slope * x_min + intercept
y_max = slope * x_max + intercept# 将点缩放到图像尺寸
scale = 40  # 缩放因子
image_width = 640
image_height = 480# 创建一个空白图像用于可视化
image = np.zeros((image_height, image_width, 3), dtype=np.uint8)# 绘制点
for xi, yi in zip(x, y):cv2.circle(image, (int(xi * scale), int(yi * scale)), 3, (0, 255, 0), -1)# 绘制拟合的直线
pt1 = (int(x_min * scale), int(y_min * scale))
pt2 = (int(x_max * scale), int(y_max * scale))
cv2.line(image, pt1, pt2, (0, 0, 255), 2)# 显示图像
cv2.imshow("Ridge Regression Line Fit", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

相关文章:

直线拟合例子 ,岭回归拟合直线

目录 直线拟合,算出离群点 岭回归拟合直线&#xff1a; 直线拟合,算出离群点 import cv2 import numpy as np# 输入的点 points np.array([[51, 149],[122, 374],[225, 376],[340, 382],[463, 391],[535, 298],[596, 400],[689, 406],[821, 407] ], dtypenp.float32)# 使用…...

Flutter android debug 编译报错问题。插件编译报错

下面相关内容 都以 Mac 电脑为例子。 一、问题 起因&#xff1a;&#xff08;更新 Android studio 2024.2.2.13、 Flutter SDK 3.27.2&#xff09; 最近 2025年 1 月 左右&#xff0c;我更新了 Android studio 和 Flutter SDK 再运行就会出现下面的问题。当然 下面的提示只是其…...

关于IPD流程的学习理解和使用

IPD&#xff08;Integrated Product Development&#xff0c;集成产品开发&#xff09;是一种系统化的产品开发流程和方法论&#xff0c;旨在通过跨职能团队的协作和并行工程&#xff0c;缩短产品开发周期&#xff0c;提高产品质量&#xff0c;降低开发成本。IPD 最初由美国 PR…...

C# 类(Class)

C# 类&#xff08;Class&#xff09; 概述 在C#编程语言中&#xff0c;类&#xff08;Class&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心概念之一。类是一种用户定义的数据类型&#xff0c;它包含了一组属性&#xff08;数据&#xff09;和方法&#xff08;…...

Jenkins pipline怎么设置定时跑脚本

目录 示例&#xff1a;在Jenkins Pipeline中设置定时触发 使用pipeline指令设置定时触发 使用Declarative Pipeline设置定时触发 使用Scripted Pipeline设置定时触发 解释Cron表达式 保存和应用配置 小结 在Jenkins中&#xff0c;定时跑脚本&#xff08;例如定时执行Pip…...

PostgreSQL模糊查询相关学习参考

PostgreSQL大数据量快速模糊检索实践_postgresql 模糊查询-CSDN博客文章浏览阅读1.5k次&#xff0c;点赞20次&#xff0c;收藏25次。注意&#xff1a; 本文内容于 2024-08-18 23:50:33 创建&#xff0c;可能不会在此平台上进行更新。。_postgresql 模糊查询https://blog.csdn.n…...

【电脑无法通过鼠标和键盘唤醒应该怎么办】

【电脑无法通过鼠标和键盘唤醒应该怎么办】 方法一(有时候不起作用):方法二(方法一无效时,使用方法二): 方法一(有时候不起作用): 方法二(方法一无效时,使用方法二):...

Java 大视界 -- Java 大数据中的数据脱敏技术与合规实践(60)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

Vue3.5 企业级管理系统实战(三):页面布局及样式处理 (Scss UnoCSS )

本章主要是关于整体页面布局及样式处理&#xff0c;在进行这一章代码前&#xff0c;先将前两章中的示例代码部分删除&#xff08;如Home.vue、About.vue、counter.ts、App.vue中引用等&#xff09; 1 整体页面布局 页面整体布局构成了产品的框架基础&#xff0c;通常涵盖主导…...

【xcode 16.2】升级xcode后mac端flutter版的sentry报错

sentry_flutter 7.11.0 报错 3 errors in SentryCrashMonitor_CPPException with the errors No type named terminate_handler in namespace std (line 60) and No member named set_terminate in namespace std 替换sentry_flutter版本为&#xff1a; 8.3.0 从而保证oc的…...

windows在命令行中切换盘符

一、问题描述 我们在使用windows的cmd&#xff08;命令行&#xff09;时&#xff0c;经常需要用cd命令在不同盘之间切换路径。但有时在不同盘之间切换时&#xff0c;会发现命令不起作用。 如下图所示&#xff0c;直接切换目录还是停留在原来的位置。 二、解决方法 首先切换盘符…...

亚博microros小车-原生ubuntu支持系列:11手指控制与手势识别

识别框架还是沿用之前的了MediaPipe Hand。 背景知识不摘重复&#xff0c;参见之前的&#xff1a;亚博microros小车-原生ubuntu支持系列&#xff1a;10-画笔-CSDN博客 手指控制 src/yahboom_esp32_mediapipe/yahboom_esp32_mediapipe/目录下新建文件10_HandCtrl.py&#xff…...

JAVA-快速排序

目录 一、快速排序基本思想 二、快速排序的实现 1.Hoare法找基准值 2.挖坑法 3.前后指针法(了解) 三、快速排序的优化 1.三数取中法 2.递归到小的子区间时&#xff0c;可以考虑使用插入排序 四、非递归的写法 五、时间空间复杂度 一、快速排序基本思想 快速排序是 H…...

日志收集Day003

1.索引模板 查看所有索引模板 GET 10.0.0.101:9200/_template 2.查看单个索引模板 GET 10.0.0.101:9200/_template/.monitoring-es 3.创建索引模板 POST 10.0.0.101:9200/_template/lxctp {"aliases": {"DBA": {},"SRE": {},"K8S&qu…...

基于quartz,刷新定时器的cron表达式

文章目录 前言基于quartz&#xff0c;刷新定时器的cron表达式1. 先看一下测试效果2. 实现代码 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&…...

数学大模型MAmmoTH:通过混合说明调整建立数学通才模型

向悦和陈文虎是该项目的主要作者。他们这个项目推出 MAmmoTH&#xff0c;这是一系列专为解决一般数学问题而定制的开源大型语言模型 (LLM)。 MAmmoTH 模型在 MathInstruct 上进行训练&#xff0c;MathInstruct 是我们精心策划的指令调整数据集。 MathInstruct 已编译 来自 13 个…...

Opencv学习

Long time no see!哈哈&#xff0c;假期终于有时间做一点自己喜欢的东西了 还是想说&#xff0c;每天花一点时间投在自己喜欢的事情上&#xff0c;或者专攻一些平时不学的方向&#xff0c;真的很酷&#xff01; 图片绘制 对于图像绘制&#xff0c;可以分为&#xff1a;图像创…...

python生成图片和pdf,快速

1、下载安装 pip install imgkit pip install pdfkit2、wkhtmltopdf工具包&#xff0c;下载安装 下载地址&#xff1a;https://wkhtmltopdf.org/downloads.html 3、生成图片 import imgkit path_wkimg rD:\app\wkhtmltopdf\bin\wkhtmltoimage.exe # 工具路径&#xff0c;安…...

剑指Offer|LCR 044.在每个树行中找最大值

LCR 044.在每个树行中找最大值 给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 示例 1&#xff1a; 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9] 解释:1/ \3 2/ \ \ 5 3 9 示例 2&#xff1a; 输入: root [1,2,3] 输出: [1,3] 解…...

PWM信号概述

什么是PWM信号&#xff1f; PWM&#xff08;Pulse-width modulation&#xff09;是脉冲宽度调制的缩写。 脉冲宽度调制是一种模拟信号电平数字编码方法。 脉冲宽度调制PWM是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式。所以根据面积等效法…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...