計算機視覺(十):ROI

什么是感興趣區域(ROI)?

在計算機視覺中,**感興趣區域(ROI)**指的是圖像中包含我們想要分析、處理或識別的目標或特征的特定子集。就像我們在閱讀一本書時會聚焦于某個重要的段落,計算機視覺系統在處理圖像時,也會將注意力集中到圖像中對任務最有價值的區域,而非整個圖像。

使用ROI的主要目的是提高效率減少計算負擔。通過僅處理ROI,我們可以:

  • 加速處理速度:減少需要處理的數據量。
  • 提高精度:通過排除背景噪聲和無關信息,更精確地識別和分析目標。
  • 節省內存:只需加載和存儲圖像的特定部分。

ROI的類型和表示方法

ROI可以有多種形狀和表示方式,最常見的是:

  • 矩形(Bounding Box):這是最常用、最簡單的ROI形式,通過左上角和右下角的坐標(或左上角坐標和寬度、高度)來定義。這在目標檢測任務中非常普遍。
  • 多邊形(Polygon):當目標形狀不規則時,多邊形ROI可以更精確地圈定目標,如在分割或某些特殊檢測任務中。
  • 圓形(Circle):常用于檢測圓形物體,如螺栓、圓形標志等。
  • 掩模(Mask):一個二進制圖像,與原圖大小相同,其中ROI區域的像素值為1(或255),其余區域為0。這在**實例分割(Instance Segmentation)**中尤為重要,因為它能精確到像素級別地分割出目標。

ROI在計算機視覺中的核心應用

ROI在計算機視覺的多個子領域扮演著至關重要的角色:

目標檢測 (Object Detection)

目標檢測的任務是識別圖像中所有感興趣的物體,并用**邊界框(Bounding Box)**標記出它們的位置。在這里,ROI是核心概念。

  • R-CNN (Region-based Convolutional Neural Networks) 系列算法(如R-CNN, Fast R-CNN, Faster R-CNN)是典型的基于ROI的方法。這些算法首先通過**區域提議網絡(Region Proposal Network, RPN)**在圖像中生成大量的潛在ROI,然后對這些ROI進行分類和邊界框回歸,以確定它們是否包含目標。
  • **無提議(Proposal-free)**的算法,如YOLO(You Only Look Once)和SSD(Single Shot Detector),雖然不明確生成ROI,但它們在特征圖上劃分網格,每個網格負責預測其所包含的目標,這種思想在本質上也是對圖像區域進行局部關注。

圖像分割 (Image Segmentation)

圖像分割將圖像中的每個像素都分類。在實例分割中,ROI的作用尤為明顯。

  • Mask R-CNN 是實例分割領域的代表性算法。它在Faster R-CNN的基礎上,增加了一個用于預測**掩模(Mask)**的分支。對于每個檢測到的ROI,該網絡不僅預測其類別和位置,還生成一個像素級別的掩模,精確地分割出目標。

人臉識別與分析 (Face Recognition and Analysis)

在人臉識別系統中,第一步通常是人臉檢測,即在圖像中定位人臉的位置并用一個矩形框(ROI)將其框起來。

  • 一旦確定了人臉ROI,后續的步驟,如面部對齊(Face Alignment)特征提取身份識別,都只在ROI內部進行,極大地簡化了計算,并提高了識別的準確性。
  • 同樣,在情感分析年齡、性別識別等任務中,也都是先定位人臉ROI,再進行后續的分析。

視頻監控與跟蹤 (Video Surveillance and Tracking)

在視頻監控中,ROI可以用于行人檢測車輛跟蹤異常行為分析

  • 通過在視頻流中持續追蹤某個目標的ROI,可以實現穩定、高效的目標跟蹤。例如,一旦檢測到一個移動的車輛,系統就會在每一幀中只在車輛的ROI附近進行搜索,而不是掃描整個畫面。

ROI的提取和選擇

提取ROI的方法多種多樣,這取決于具體的應用和算法:

  • 傳統方法
    • 滑動窗口(Sliding Window):在圖像上以固定步長移動一個窗口,每個窗口都作為一個潛在的ROI。這種方法計算量大,效率低。
    • 基于輪廓或邊緣檢測:通過Canny、Sobel等算子提取圖像中的邊緣,再根據邊緣信息尋找封閉區域作為ROI。
  • 基于深度學習的方法
    • 區域提議網絡 (RPN):這是目前主流的方法,它能在訓練中學習如何有效地生成高質量的ROI,大大優于傳統的滑動窗口方法。
    • 注意力機制 (Attention Mechanism):在一些最新的網絡架構中,注意力機制可以讓網絡自動“關注”到圖像中重要的區域,這本質上也是一種動態的ROI選擇。

opencv實現ROI

import cv2
import numpy as np# 1. 讀取圖像
image = cv2.imread('test.jpg')# 檢查圖像是否成功讀取
if image is None:print("錯誤:無法讀取圖像。請檢查文件路徑是否正確。")exit()# 獲取圖像的尺寸
height, width = image.shape[:2]
print(f"原始圖像尺寸:寬 {width},高 {height}")# 2. 定義ROI的坐標
x_start, y_start = 100, 100
x_end, y_end = 300, 300# 3. 裁剪ROI
roi = image[y_start:y_end, x_start:x_end]
roi_height, roi_width = roi.shape[:2]
print(f"裁剪的ROI尺寸:寬 {roi_width},高 {roi_height}")# 4. 在原圖上畫出ROI區域的紅色矩形框
image_with_roi = image.copy()
cv2.rectangle(image_with_roi, (x_start, y_start), (x_end, y_end), (0, 0, 255), 3)# 5. 創建一個全黑的背景圖像,用于放置ROI
black_background = np.zeros(image.shape, dtype=np.uint8)# 將ROI粘貼到背景圖像上 (偏移 50,50)
paste_x, paste_y = 50, 50
black_background[paste_y : paste_y + roi_height, paste_x : paste_x + roi_width] = roi# 在粘貼的ROI旁邊加文字說明
cv2.putText(black_background, "Extracted ROI", (paste_x, paste_y - 10),cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)# 6. 放大ROI圖像,方便觀察細節
roi_zoomed = cv2.resize(roi, (roi_width * 2, roi_height * 2), interpolation=cv2.INTER_CUBIC)# 7. 顯示結果
cv2.imshow('Original Image (with ROI marked)', image_with_roi)
cv2.imshow('Extracted ROI (Zoomed x2)', roi_zoomed)
cv2.imshow('ROI on Black Background', black_background)# 等待按鍵,然后關閉所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

執行效果:

在這里插入圖片描述

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

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

相關文章

Jenkins 構建 Node 項目報錯解析與解決——pnpm lockfile 問題實戰

在使用 Jenkins 自動化構建 Node.js 項目時,經常會遇到類似報錯: ERR_PNPM_OUTDATED_LOCKFILE? Cannot install with "frozen-lockfile" because pnpm-lock.yaml is not up to date with package.json Error: Cannot find module node_module…

Kafka在多環境中安全管理敏感

1. 配置提供者是什么? 配置提供者(ConfigProvider)是一類按需“拉取配置”的組件:應用讀取配置時,按約定的占位符語法去外部來源(目錄、環境變量、單一 properties 文件、你自定義的來源……)取…

編程工具的演進邏輯:從Python IDLE到Arduino IDE的深度剖析

引言:工具進化的本質 在編程學習與開發的道路上,我們總會與各種各樣的工具相遇。一個有趣的現象是,無論是初學者的第一款工具Python IDLE,還是硬件愛好者常用的Thonny和Arduino IDE,它們都自稱“集成開發環境”(IDE)。這背后隱藏著怎樣的邏輯? 本文將帶你深入分析這三…

p10k configure執行報錯: ~/powerlevel10k/config/p10k-lean.zsh is not readable

[ERROR] p10k configure: ~/powerlevel10k/config/p10k-lean.zsh is not readable 背景 我移動了Powerlevel10k文件夾的位置,導致p10k configure命令找不到powerlevel10k文件夾的位置。 原來Powerlevel10k的位置:~/powerlevel10k 移動后Powerlevel10k的位…

Java 學習筆記(進階篇3)

1. 美化界面關鍵邏輯 1:// 相對路徑:直接從項目的 src 目錄開始寫,不包含 D:\ 和個人名字 ImageIcon bg new ImageIcon("src/image/background.png"); JLabel background new JLabel(bg);這兩行代碼是 Swing 中加載并顯示圖片的經…

BFD 概述

BFD簡介1.BFD:Bidirectional Forwarding Detection,雙向轉發檢查概述:毫秒級鏈路故障檢查,通常結合三層協議(如靜態路由、vrrp、 ospf、 BGP等)實現鏈路故障快速切換。作用:① 檢測二層非直連故障② 加快三層協議收斂底…

【嵌入式DIY實例-ESP32篇】-Flappy Bird游戲

Flappy Bird游戲 文章目錄 Flappy Bird游戲 1、游戲介紹 2、硬件準備與接線 3、代碼實現 《Flappy Bird》游戲以其引人入勝的玩法和簡約的設計風靡全球。本文將探討如何使用 OLED SSD1306 顯示屏和 ESP32 微控制器重現這款經典游戲。這個 DIY 項目不僅充滿樂趣,也是學習編程和…

[數據結構——lesson2.順序表]

目錄 學習目標 引言 1.什么是線性表? 2.什么是順序表? 2.1概念及結構 2.2 接口實現 2.2.1順序表的功能 1.順序表的初始化 2.打印數據 3.尾插數據 (1)檢查空間 (2)插入數據 4.尾刪數據 5.頭插數據 6.頭刪數據 7.數據查找 8.指定位置數據…

ChatGPT大模型訓練指南:如何借助動態代理IP提高訓練效率

隨著人工智能技術的飛速發展,ChatGPT等大型語言模型(LLM)已成為科技界和產業界關注的焦點。模型的訓練過程耗時、耗資源且對網絡環境要求極高。尤其是在需要模擬真實用戶行為、進行大規模數據爬取或分布式訓練的場景下,單一IP地址…

Docker 學習筆記(六):多容器管理與集群部署實踐

Docker Docker-compose 單個 Dockerfile 可定義單容器應用,但日常工作中,Web 項目等常需 Web 服務、數據庫、負載均衡等多容器配合,手動按序啟停容器會導致維護量大、效率低。 Docker Compose 是高效的多容器管理工具,通過單個 do…

C++類和對象初識

面向過程 1.1 面向過程特點 1.2 通俗解釋:煮方便面 1.3 面向過程實現代碼 1.4 特點總結面向對象 2.1 面向對象特點 2.2 通俗解釋:對象協作思維 2.3 面向對象實現代碼 2.4 特點總結面向對象和面向過程總結C 面向對象介紹 4.1 面向對象三大基本特征封裝&am…

C++ Int128 —— 128位有符號整數類實現剖析

🧠 C Int128 —— 128位有符號整數類實現剖析 引用:openppp2/ppp/Int128.h 🏗? 1. 存儲結構設計 #mermaid-svg-2JDFsdz6MTbX253D {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-sv…

【C 語言生成指定范圍隨機數(整數 + 小數):原理、實現與避坑指南】

概述 在 C 語言開發中,生成指定范圍的隨機數是高頻需求(如游戲隨機道具、數據模擬、測試用例生成等)。但很多新手會卡在 “范圍控制”“隨機數重復”“小數生成” 等問題上。本文結合實戰場景,從原理到代碼詳細講解如何生成 1100、…

一個簡單的langgraph agent系統

本文基于langgraph的預制件 Agent Chat UI和《搭建一個本地langgraph服務》中的本地服務構建一個簡單的agent系統。 說明:Agent Chat UI需要nodejs版本18及以上,而nodejs18需要的glibc版本為2.28,本人使用操作系統為ubuntu18.04,g…

通過SSH來推送本地文件夾到Github

配置SSH git使用SSH配置, 初始需要以下三個步驟 使用秘鑰生成工具生成rsa秘鑰和公鑰 將rsa公鑰添加到代碼托管平臺 將rsa秘鑰添加到ssh-agent中,為ssh client指定使用的秘鑰文件 具體操作如下: 第一步:檢查本地主機是否已經存在…

視頻轉webp批量處理工具哪個好?這里有答案

你是不是也遇到過這樣的困擾:手機里存滿了精彩的短視頻,想做成動圖分享到社交媒體,卻發現轉換后的GIF文件巨大無比,畫質還慘不忍睹?要怎么把手機視頻轉webp,才能既保持高清畫質,又能大幅減小文件…

【Fastjson】Fastjson2 在不同 Modules 模塊包下,@JSONField name映射無法反序列化的 BUG 及解決

問題:在使用 alibaba fastjson2 做 JSONField 字段名映射時,在同模塊包下 Flink Jar 任務正常映射,本地測試正常映射,但是將兩個模塊包上傳至 Flink Cluster 之后,出現反序列化異常,子模塊無法反序列化父模…

Go語言基礎---數據類型間的故事

Go語言基礎—數據類型間的故事 目錄 前言基本數據類型 整形字節特殊整形unsafe.Sizeof數字字面量語法浮點型布爾值字符串byte和rune類型 運算符 算術運算符關系運算符邏輯運算符位運算符賦值運算符 前言 Go語言是Google開發的一種靜態強類型、編譯型語言。Go語言語法與C相近…

dedecms軟件等級★號改成圖片圖標顯示的辦法

我們在用到dedecms織夢的軟件模型&#xff0c;在調用軟件星級的時候&#xff0c;要把默認的星號改為圖片&#xff0c;這個要怎么操作呢&#xff1f;1、軟件模型管理里面-字段管理-字段配置softrankislink一行改為&#xff1a;<field:softrank itemname軟件等級 typeint isnu…

windows下安裝claude code+國產大模型glm4.5接入(無需科學上網)

下載安裝node.js https://nodejs.org/en/download 安裝版.msi 直接下載安裝即可 免安裝版.zip 1.解壓下載的壓縮包 2.創建數據緩存存儲目錄cache和全局安裝工具目錄global 3.配置環境變量 【我的電腦】右鍵選中【屬性】-> 找到【高級系統設置】-> 右下角【環境變量…