直線擬合例子 ,嶺回歸擬合直線

目錄

直線擬合,算出離群點

嶺回歸擬合直線:


直線擬合,算出離群點

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()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66933.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66933.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66933.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringCloud兩種注冊中心

SpringCloud 基本概念 系統架構 我們之前做的所有的項目都屬于單體架構&#xff0c;下面我們將要學習更適合大型項目的分布式架構 單體架構&#xff1a; 將業務的所有功能幾種在一個項目中開發&#xff0c;打成一個包部署。 優點&#xff1a;架構簡單、部署成本低 缺點&am…

SpringAI 搭建智能體(二):搭建客服系統智能體

在現代人工智能應用中&#xff0c;智能體&#xff08;Agent&#xff09; 是一個重要的概念&#xff0c;它的核心能力是自主性與靈活性。一個智能體不僅能夠理解用戶的需求&#xff0c;還能拆解任務、調用工具完成具體操作&#xff0c;并在復雜場景中高效運行。在本篇博客中&…

SVN客戶端使用手冊

目錄 一、簡介 二、SVN的安裝與卸載 1. 安裝&#xff08;公司內部一般會提供安裝包和漢化包&#xff0c;直接到公司內部網盤下載即可&#xff0c;如果找不到可以看下面的教程&#xff09; 2. 查看SVN版本 ?編輯 3. SVN卸載 三、SVN的基本操作 1. 檢出 2. 清除認證數據 3. 提交…

HTML 文本格式化詳解

在網頁開發中&#xff0c;文本內容的呈現方式直接影響用戶的閱讀體驗。HTML 提供了多種文本格式化元素&#xff0c;可以幫助我們更好地控制文本的顯示效果。本文將詳細介紹 HTML 中的文本格式化元素及其使用方法&#xff0c;幫助你輕松實現網頁文本的美化。 什么是 HTML 文本格…

衡量算法性能的量級標準:算法復雜度

今天開始數據結構的學習&#xff01;作為一大重點&#xff0c;拿出態度很重要&#xff0c;想要真實掌握&#xff0c;博客筆記自然少不了&#xff01;重點全部上色&#xff01;避免疏忽 下面我們從0基礎開始學習今天的第一節&#xff01;不用擔心看不懂&#xff0c;拒絕枯燥的理…

Spring Boot Starter介紹

前言 大概10來年以前&#xff0c;當時springboot剛剛出現并沒有流行&#xff0c;當時的Java開發者們開發Web應用主要是使用spring整合springmvc或者struts、iBatis、hibernate等開發框架來進行開發。項目里一般有許多xml文件配置&#xff0c;其中配置了很多項目中需要用到的Be…

Java面試題2025-Spring

講師&#xff1a;鄧澎波 Spring面試專題 1.Spring應該很熟悉吧&#xff1f;來介紹下你的Spring的理解 1.1 Spring的發展歷程 先介紹Spring是怎么來的&#xff0c;發展中有哪些核心的節點&#xff0c;當前的最新版本是什么等 通過上圖可以比較清晰的看到Spring的各個時間版本對…

Linux 切換到 Root 用戶的方式及差異詳解

在 Linux 系統中&#xff0c;切換到 root 用戶進行管理和操作是常見需求。不同的切換方法會影響環境變量、工作目錄以及加載的配置文件。本文將介紹幾種常用的切換方式及它們的特點。 切換到 Root 用戶的主要方式 1. sudo su 這是通過 sudo 提權后調用 su 切換到 root 用戶的…

虹科分享 | 汽車NVH小課堂之聽音辨故障

隨著車主開始關注汽車抖動異響問題&#xff0c;如何根據故障現象快速診斷異響來源&#xff0c;成了汽修人的必修課。 一個比較常用的方法就是靠“聽”——“聽音辨故障”。那今天&#xff0c;虹科Pico也整理了幾個不同類型的異響聲音&#xff0c;一起來聽聽看你能答對幾個吧 汽…

淺談Redis

2007 年&#xff0c;一位程序員和朋友一起創建了一個網站。為了解決這個網站的負載問題&#xff0c;他自己定制了一個數據庫。于2009 年開發&#xff0c;稱之為Redis。這位意大利程序員是薩爾瓦托勒桑菲利波(Salvatore Sanfilippo)&#xff0c;他被稱為Redis之父&#xff0c;更…

element tbas增加下拉框

使用Tabs 標簽頁的label插槽&#xff0c;嵌入Dropdown 下拉菜單&#xff0c;實現Tabs 標簽頁增加下拉切換功能 Tabs 標簽頁 tab-click"事件"&#xff08;這個事件當中到擁有下拉框的tab里時&#xff0c;可以存一下Dropdown 第一個菜單的id&#xff0c;實現點擊到擁有…

SQL-leetcode—1179. 重新格式化部門表

1179. 重新格式化部門表 表 Department&#xff1a; ---------------------- | Column Name | Type | ---------------------- | id | int | | revenue | int | | month | varchar | ---------------------- 在 SQL 中&#xff0c;(id, month) 是表的聯合主鍵。 這個表格有關…

【Address Overfitting】解決過擬合的三種方法

目錄 1. 收集更多數據實踐方法&#xff1a;適用場景&#xff1a;優缺點&#xff1a; 2. 特征選擇方法介紹&#xff1a;實踐示例&#xff1a;適用場景&#xff1a;優缺點&#xff1a; 3. 正則化&#xff08;Regularization&#xff09;正則化類型&#xff1a;實踐示例&#xff1…

面向通感一體化的非均勻感知信號設計

文章目錄 1 非均勻信號設計的背景分析1.1 基于OFDM波形的感知信號1.2 非均勻信號設計的必要性和可行性1.2 非均勻信號設計的必要性和可行性 3 通感一體化系統中的非均勻信號設計方法3.1 非均勻信號的設計流程&#xff08;1&#xff09;均勻感知信號設計&#xff08;2&#xff0…

【深度學習】搭建PyTorch神經網絡進行氣溫預測

第一步 數據加載與觀察 ①導包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import torch.optim as optim import warnings warnings.filterwarnings("ignore") %matplotlib inline ②加載數據 features pd.read_csv(…

ESP8266 NodeMCU與WS2812燈帶:實現多種花樣變換

在現代電子創意項目中&#xff0c;LED燈帶的應用已經變得極為廣泛。通過結合ESP8266 NodeMCU的強大處理能力和FastLED庫的高效功能&#xff0c;我們可以輕松實現多達100種燈帶變換效果。本文將詳細介紹如何使用Arduino IDE編程&#xff0c;實現從基礎到高級的燈光效果&#xff…

pycharm踩坑(1)

由于我重裝系統&#xff0c;導致我的pycharm需要進行重裝&#xff0c;因此我覺得需要記錄一下&#xff0c;pycharm的正確使用方法 漢化 漢化很重要&#xff0c;除非你從小就雙語教學&#xff0c;不然你看著那些英文就是會消耗大量的精力 我使用的pycharm版本是pycharm-commun…

#HarmonyOS篇:build-profile.json5里面配置productsoh-package.json5里面dependencies依賴引入

oh-package.json5 用于描述包名、版本、入口文件和依賴項等信息。 {"license": "","devDependencies": {},"author": "","name": "entry","description": "Please describe the basic…

OpenCV2D 特征框架 (11)特征檢測與描述用于檢測二值圖像中連通區域(即“斑點”或“blob”)的類cv::SimpleBlobDetector的使用

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::SimpleBlobDetector 是 OpenCV 中用于檢測二值圖像中連通區域&#xff08;即“斑點”或“blob”&#xff09;的類。這些連通區域可以是白色前…

關于deepin上運行Qt開發的程序

國產化替代是將來各單位的主流趨勢&#xff0c;探索自行開發應用程序在國產操作系統上正常運行是將來的主要工作之一。本文淺嘗gui程序在統信社區版——deepin上遇到的小問題。 使用Qt在deepin上做了一個類似gif的幀動畫彈窗&#xff0c;在編譯運行時&#xff0c;程序可以正常…