(二)OpenCV——邊緣增強與檢測

邊緣增強與檢測是圖像處理中的核心技術,其核心目標是突出圖像中的不連續區域(邊緣),為后續的圖像分析提供基礎。

一、基本概念

邊緣本質上是圖像中灰度/顏色發生突變的區域,對應著:

  • 物體邊界

  • 表面方向改變

  • 材質變化

  • 光照不連續

邊緣增強通過強化這些突變區域,使邊緣更明顯;邊緣檢測則直接標識出邊緣位置。

二、核心作用

作用維度具體表現
特征提取為物體識別、圖像分割提供基礎特征(如SIFT、HOG等算法依賴邊緣)
數據壓縮邊緣信息可代替原始圖像進行存儲(如矢量圖轉換)
視覺增強醫療影像增強、老舊照片修復
三維重建通過多視圖邊緣匹配恢復三維結構
工業檢測零件尺寸測量、缺陷檢測(如裂紋、毛刺)

?三、邊緣增強與檢測技術矩陣

維度Sobel算子Scharr算子Laplacian算子Canny邊緣檢測
數學基礎一階導數近似一階導數優化二階導數多階段梯度分析
核結構示例[[-1,0,1],[-2,0,2],[-1,0,1]][[-3,0,3],[-10,0,10],[-3,0,3]][[0,1,0],[1,-4,1],[0,1,0]]無固定核(算法流程)
計算復雜度O(2MN)(可分離)O(2MN)(可分離)O(MN)O(6MN)(含高斯濾波+NMS)
邊緣響應特性中等寬度(~2px)細邊緣(~1.5px)雙線效應(~2px)單像素級邊緣
抗噪能力★★★☆☆★★★★☆★★☆☆☆(需預濾波)★★★★★(內置高斯濾波)
方向敏感性8方向(近似)16方向(更精確)各向同性全方向(梯度計算)
OpenCV實現cv2.Sobel(dx=1, dy=1, ksize=3)cv2.Scharr(ddepth=cv2.CV_32F)cv2.Laplacian(ksize=3)cv2.Canny(threshold1=50, threshold2=150)
特性抗噪較好,邊緣較粗方向精度比Sobel高30%對噪聲敏感,需配合高斯濾波強抗噪性,計算復雜度最高

四、Sobel算子

Sobel算子是一種離散微分算子,通過計算圖像灰度的一階梯度來檢測邊緣。其核心思想是:

  • 水平方向(Gx):檢測垂直邊緣

  • 垂直方向(Gy):檢測水平邊緣

  • 梯度幅值:綜合兩個方向的梯度強度

卷積核結構:

# X方向(垂直邊緣)
kernel_x = np.array([[-1, 0, 1],[-2, 0, 2],[-1, 0, 1]])# Y方向(水平邊緣)
kernel_y = np.array([[-1,-2,-1],[ 0, 0, 0],[ 1, 2, 1]])

權重分配:中心行/列的權重更高,增強對中心像素的敏感性。?

使用Sobel算子對lene進行邊緣檢測

import cv2
import numpy as np# 讀取圖像并轉換為灰度圖
image = cv2.imread('../lene.jpg', 0)# 使用Sobel算子計算x和y方向的梯度
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)# 計算總梯度
gradient_magnitude = cv2.magnitude(sobel_x, sobel_y)# 將梯度映射到8位范圍內
gradient_magnitude = np.uint8(255 * gradient_magnitude / np.max(gradient_magnitude))# 顯示結果
cv2.imshow('Original Image', image)
cv2.imshow('Sobel Edge Detection', gradient_magnitude)
cv2.waitKey(0)
cv2.destroyAllWindows()

運行后:

?五、Scharr算子

Scharr算子是Sobel算子的優化版本,通過改進核系數設計,顯著提升邊緣檢測的方向精度旋轉對稱性。其核心改進在于:

  • 核權重調整:增大中心行/列的權重差異

  • 數學推導:基于最小化角度誤差的優化目標函數

卷積核結構:

# X方向(垂直邊緣檢測)
scharr_x = np.array([[-3,  0,  3],[-10, 0, 10],[-3,  0,  3]])# Y方向(水平邊緣檢測)
scharr_y = np.array([[-3, -10, -3],[ 0,   0,  0],[ 3,  10,  3]])

使用Scharr算子對lene進行邊緣檢測

import cv2
import numpy as np# 讀取圖像并轉換為灰度圖
image = cv2.imread('../lene.jpg', 0)# 使用Scharr算子計算x和y方向的梯度
scharr_x = cv2.Scharr(image, cv2.CV_64F, 1, 0)
scharr_y = cv2.Scharr(image, cv2.CV_64F, 0, 1)# 計算總梯度
gradient_magnitude = cv2.magnitude(scharr_x, scharr_y)# 將梯度映射到8位范圍內
gradient_magnitude = np.uint8(255 * gradient_magnitude / np.max(gradient_magnitude))# 顯示結果
cv2.imshow('Original Image', image)
cv2.imshow('Scharr Edge Detection', gradient_magnitude)
cv2.waitKey(0)
cv2.destroyAllWindows()

運行結果:

關鍵優勢?

特性Scharr vs Sobel
方向精度角度誤差從Sobel的±7°降至±1°(提升86%)
邊緣響應邊緣寬度更細(約1.5像素 vs Sobel的2-3像素)
旋轉對稱性對45°方向邊緣的響應更一致
計算效率與Sobel相同(可分離卷積),實測耗時比Sobel多約15%

六、Laplacian算子

Laplacian算子是基于二階導數的邊緣檢測方法,通過尋找圖像灰度變化的拐點(零交叉點)來定位邊緣,其本質是計算圖像的拉普拉斯算子。

離散卷積核:

# 4鄰域版本(常用)
kernel_4 = np.array([[ 0, 1, 0],[ 1,-4, 1],[ 0, 1, 0]])# 8鄰域版本(對角增強)
kernel_8 = np.array([[ 1, 1, 1],[ 1,-8, 1],[ 1, 1, 1]])

使用Laplacian算子對lene進行邊緣檢測

import cv2
import numpy as np# 讀取圖像并轉換為灰度圖
image = cv2.imread('../lene.jpg', 0)# 在應用Laplacian算子之前進行高斯模糊
blurred = cv2.GaussianBlur(image, (3, 3), 0)
laplacian = cv2.Laplacian(blurred, cv2.CV_64F)# 將結果轉換回uint8類型
laplacian_abs = cv2.convertScaleAbs(laplacian)# 顯示結果
cv2.imshow('Original Image', image)
cv2.imshow('Laplacian Edge Detection', laplacian_abs)
cv2.waitKey(0)
cv2.destroyAllWindows()

運行結果:

?七、Canny邊緣檢測

Canny邊緣檢測是一種多階段優化算法,包含以下關鍵步驟:

  1. ?高斯濾波(去噪)

  2. 梯度計算(Sobel算子)

  3. 非極大抑制(NMS)

    1. 目的:保留梯度方向上的局部最大值,細化邊緣

    2. 方法:比較當前像素與其梯度方向上的相鄰像素

  4. 雙閾值檢測

閾值類型處理方式典型比例
強邊緣直接保留(>高閾值)高閾值 = 2.5×低閾值
弱邊緣僅當連接強邊緣時保留(低~高閾值)低閾值 = 圖像梯度中值×0.5

使用Canny對lene進行邊緣檢測

import cv2# 讀取圖像并轉換為灰度圖
image = cv2.imread('../lene.jpg', 0)# 高斯模糊降噪
blurred = cv2.GaussianBlur(image, (5, 5), 0)# 使用Canny進行邊緣檢測
edges = cv2.Canny(blurred, threshold1=50, threshold2=150)# 顯示結果
cv2.imshow('Original Image', image)
cv2.imshow('Canny Edge Detection', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

運行結果:

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

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

相關文章

018 進程控制 —— 進程等待

🦄 個人主頁: 小米里的大麥-CSDN博客 🎏 所屬專欄: Linux_小米里的大麥的博客-CSDN博客 🎁 GitHub主頁: 小米里的大麥的 GitHub ?? 操作環境: Visual Studio 2022 文章目錄進程控制 —— 進程等待1. 進程等待必要性2. 常用等待方法&#xf…

PHP password_hash() 函數

password_hash() 函數用于創建密碼的散列(hash)PHP 版本要求: PHP 5 > 5.5.0, PHP 7語法string password_hash ( string $password , int $algo [, array $options ] )password_hash() 使用足夠強度的單向散列算法創建密碼的散列(hash&…

理解Linux文件系統:從物理存儲到統一接口

目錄 一、狹義理解(物理層面) 二、廣義理解(Linux系統視角) 三、文件結構解析 四、系統實現機制 一、狹義理解(物理層面) 存儲特性:文件以二進制形式存儲在磁盤等永久性存儲介質中 介質特點…

前端接入海康威視攝像頭的三種方案

方案選擇?方案適用場景優缺點?Web SDK(3.0)??需要完整功能(PTZ控制、錄像回放)功能全,但需加載海康JS文件?RTSP轉Web播放?低延遲實時監控需后端轉碼(如FFmpeg轉HLS)?HTTP API?簡單截圖或…

openGL學習(Shader)

認識Shader在計算機圖形學中,Shader(著色器)是一種運行在 GPU(圖形處理單元)上的程序,用于控制圖形渲染過程中頂點和像素的處理。著色器是 OpenGL、Direct3D、Vulkan 等圖形 API 的核心組成部分&#xff0c…

webpack高級配置

一、了解webpack高級配置: 1、什么是webpack高級配置: 進行 Webpack 優化,讓代碼在編譯或者運行時性能更好 2、webpack優化從哪些方面入手: ① 提升開發體驗,增強開發和生產環境的代碼調試: 如果代碼編寫…

LLM表征工程還有哪些值得做的地方

LLM表征工程還有哪些值得做的地方 在大型語言模型(LLM)的表征工程領域,近年來涌現出多個具有突破性的創新方向,這些方法通過動態調整、多模態融合、結構化記憶增強等技術,顯著提升了模型的適應性、可解釋性和效率。 一、動態自適應表征:從靜態到動態的范式革新 傳統LL…

LabVIEW智能避障小車

?LabVIEW結合 NI、德州儀器(TI)、歐姆龍(Omron)等硬件,設計實現了一款具備智能避障、循跡功能的輪式機器人。系統支持手動操控與自主運行兩種模式,通過無線通信實時傳輸傳感器數據與圖像信息,在…

邏輯代數中的基本規則,代入規則和反演規則,對偶規則

本文探討了代入規則在邏輯等式中的應用,解釋了如何通過替換變量來保持等式的正確性,同時介紹了反演規則和對偶規則的概念。代入規則定義:在任何一個包含變量A的邏輯等式中,如果用另一個邏輯式代入式中的所有A位置,則等式依然成立反…

Javaweb使用websocket,請先連上demo好吧!很簡單的!

Javaweb使用websocket先看結構及效果MyWebSocketHandler用于處理消息WebSocketConfig用于配置建聯地址等SchedulerConfig必須配置這個MyWebSocketInterceptor建聯的攔截器SpringBootWebsocketApplication啟動類POM依賴展示效果源碼先看結構及效果 MyWebSocketHandler用于處理消…

文心大模型4.5開源測評:保姆級部署教程+多維度測試驗證

前言:國產大模型開源的破局時刻 2025年6月百度文心大模型4.5系列的開源,標志著國產AI從"技術跟跑"向"生態共建"的關鍵跨越。 文心大模型4.5是百度自主研發的新一代原生多模態基礎大模型,通過多個模態聯合建模實現協同優…

前端學習5:Float學習(僅簡單了解,引出flex)

一、Float基礎概念1. 設計初衷: float最初是為實現文字環繞圖片的效果(類似雜志排版),后來被開發者用來做頁面布局。2. 核心特性:使元素脫離普通文檔流(但仍在DOM中)元素會向左/右浮動&#xff…

08-自然壁紙實戰教程-視頻列表-云

08-自然壁紙實戰教程-視頻列表 前言 視頻列表頁面本質上也是一個數據展示的列表,不同之處在于之前是是展示壁紙,Image組件負責渲染,這里展示的是視頻,使用Video組件,另外視頻頁面也實現了下載的基本功能,…

SCI特刊征稿

我們團隊聯合北京工業大學研究團隊在SCI源刊CMC組織了特刊SI: Advanced Edge Computing and Artificial Intelligence in Smart Environment,主要收錄邊緣計算和人工智能方向的文章,歡迎領域專家和學者投稿,網址https://www.techscience.com/cmc/special…

DO,VO,DTO.....

在 Java 項目里(尤其是 Spring、MyBatis 這類框架),經常會看到一堆以 O 結尾的類:VO、DO、DTO、BO、POJO……它們本質上都是普通的 Java Bean(即 POJO),但職責和出現的位置不同。下面用“用戶下…

數據結構之并查集和LRUCache

系列文章目錄 數據結構之ArrayList_arraylist o(1) o(n)-CSDN博客 數據結構之LinkedList-CSDN博客 數據結構之棧_棧有什么方法-CSDN博客 數據結構之隊列-CSDN博客 數據結構之二叉樹-CSDN博客 數據結構之優先級隊列-CSDN博客 常見的排序方法-CSDN博客 數據結構之Map和Se…

UE5多人MOBA+GAS 21、給升龍添加連段攻擊,從角色的按下事件中傳遞事件給GA

文章目錄給升龍制作可連段緩存下一連段用普攻鍵來觸發升龍后續的連段在角色中發送按下普攻標簽事件在升龍中接收按下事件,觸發連段以及傷害和力量的傳遞最后在藍圖中設置一下升龍技能的完整代碼給升龍制作可連段 給升龍技能添加一些連段 緩存下一連段 緩存下一連…

基于光柵傳感器+FPGA+ARM的測量控制解決方案

基于光柵傳感器結合FPGA與ARM的測量控制解決方案,通過硬件協同分工實現高精度、實時性及多場景適應性:?? ?一、系統架構分工??傳感層(光柵傳感器)?采用光柵尺輸出正交脈沖信號,分辨率達0.5μm,精度1μ…

NW831NW910美光固態閃存NW887NW888

美光固態閃存深度解析:NW831、NW910、NW887、NW888系列全方位評測一、技術根基與架構創新美光NW系列固態閃存的技術突破源于其先進的G9 NAND架構,該架構采用5納米制程工藝和多層3D堆疊技術,在單位面積內實現了高達256層的存儲單元堆疊&#x…

reasense api 文檔

API 架構 英特爾實感(Intel RealSense?)API 提供對深度攝像頭流數據的配置、控制和訪問功能。該 API 支持通過高層級 API 快速啟用攝像頭基礎功能,或通過底層級 API 全面控制所有攝像頭設置。請根據需求選擇合適的 API: 高層級 P…