視覺分析之邊緣檢測算法

9.1 Roberts算子

Roberts算子又稱為交叉微分算法,是基于交叉差分的梯度算法,通過局部差分計算檢測邊緣線條。

常用來處理具有陡峭的低噪聲圖像,當圖像邊緣接近于正45度或負45度時,該算法處理效果更理想。

其缺點是對邊緣的定位不太準確,提取的邊緣線條較粗。

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt # 讀取圖像
img = cv.imread('bridge.png', cv.COLOR_BGR2GRAY)
# cv.COLOR_BGR2GRAY將BGR圖像轉換為灰度圖像
rgb_img = cv.cvtColor(img, cv.COLOR_BGR2RGB)# 灰度化處理圖像
grayImage = cv.cvtColor(img, cv.COLOR_BGR2GRAY)# Roberts算子的兩個卷積核kernelx和kernely,分別用于檢測水平和垂直方向的邊緣。
kernelx = np.array([[-1, 0], [0, 1]], dtype=int)
kernely = np.array([[0, -1], [1, 0]], dtype=int)# 使用cv.filter2D函數對灰度圖像進行卷積操作,得到水平和垂直方向的梯度圖像。
x = cv.filter2D(grayImage, cv.CV_16S, kernelx)
y = cv.filter2D(grayImage, cv.CV_16S, kernely)# 將卷積后的圖像數據轉換為絕對值,并轉換為uint8類型,以便于顯示。
absX = cv.convertScaleAbs(x)
absY = cv.convertScaleAbs(y)
# 將兩個方向的梯度圖像融合,得到最終的Roberts算子邊緣檢測圖像。
Roberts = cv.addWeighted(absX, 0.5, absY, 0.5, 0)# 顯示圖形
titles = ['src', 'Roberts operator']
images = [rgb_img, Roberts]for i in range(2):# 使用matplotlib的subplot和imshow函數顯示原始圖像和Roberts算子處理后的圖像plt.subplot(1, 2, i + 1), plt.imshow(images[i], 'gray')plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()

Sobel算子邊緣檢測
Sobel算子(索貝爾算子)利用像素上、下、左、右鄰域的灰度加權算法,根據在邊緣點處達到極值這一原理進行邊緣檢測。

該方法不但產生較好的檢測效果,而且對噪聲具有平滑作用,可以提供較為精確的邊緣方向信息。缺點是Sobel算子并沒有將圖像的主題和背景嚴格區分開。

使用Sobel邊緣檢測算子提取圖像邊緣的過程大致可以分為以下三個步驟:

提取x方向的邊緣,x方向一階Sobel邊緣檢測算子如下圖1所示;
提取y方向的邊緣,y方向一階Sobel邊緣檢測算子如下圖2所示;
綜合兩個方向的邊緣信息得到整幅圖像的邊緣。

import cv2 as cv
import matplotlib.pyplot as plt# 讀取圖像
img = cv.imread('bridge.png', cv.COLOR_BGR2GRAY)
rgb_img = cv.cvtColor(img, cv.COLOR_BGR2RGB)# 灰度化處理圖像
grayImage = cv.cvtColor(img, cv.COLOR_BGR2GRAY)# 使用cv.Sobel函數計算圖像的水平和垂直方向的梯度
# cv.CV_16S指定數據類型為16位有符號整數。
x = cv.Sobel(grayImage, cv.CV_16S, 1, 0)
y = cv.Sobel(grayImage, cv.CV_16S, 0, 1)# 將計算得到的梯度圖像轉換為絕對值,并轉換為uint8類型,以便顯示。
absX = cv.convertScaleAbs(x)
absY = cv.convertScaleAbs(y)
# 將水平和垂直方向的梯度圖像融合,得到最終的Sobel算子邊緣檢測圖像。
Sobel = cv.addWeighted(absX, 0.5, absY, 0.5, 0)# 用來正常顯示中文標簽
plt.rcParams['font.sans-serif'] = ['SimHei']# 顯示圖形
titles = ['原始圖像', 'Sobel 算子']
images = [rgb_img, Sobel]for i in range(2):plt.subplot(1, 2, i + 1), plt.imshow(images[i], 'gray')plt.title(titles[i])plt.xticks([]), plt.yticks([])plt.show()

示例:

LoG邊緣檢測算子
該算法首先對圖像做高斯濾波,然后求其拉普拉斯(Laplacian)二階導數,即圖像與Laplacian of the Gaussian function 進行濾波運算。

LoG算子也就是高斯拉普拉斯函數,常用于數字圖像的邊緣提取和二值化。首先對原始圖像進行最佳平滑處理,最大限度地抑制噪聲,再對平滑后的圖像求取邊緣。

該算法的主要思路和步驟:濾波、增強、檢測。

import cv2 as cv
import matplotlib.pyplot as plt# 讀取圖像
img = cv.imread("bridge.png")
rgb_img = cv.cvtColor(img, cv.COLOR_BGR2RGB)gray_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)# 先通過高斯濾波降噪
gaussian = cv.GaussianBlur(gray_img, (3, 3), 0)# 再通過拉普拉斯算子做邊緣檢測,cv.Laplacian函數計算圖像的二階導數
dst = cv.Laplacian(gaussian, cv.CV_16S, ksize=3)
LOG = cv.convertScaleAbs(dst)# 用來正常顯示中文標簽
plt.rcParams['font.sans-serif'] = ['SimHei']# 顯示圖形
titles = ['原始圖像', 'LOG 算子']
images = [rgb_img, LOG]for i in range(2):plt.subplot(1, 2, i + 1), plt.imshow(images[i], 'gray')plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()

示例:

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

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

相關文章

DuodooBMS源碼解讀之 sale_change模塊

銷售變更模塊用戶使用手冊 一、模塊概述 本擴展模塊主要包含兩個主要的 Python 文件:sale_change/report/sale_change_report.py 和 sale_change/wizard/sale_change_download.py,提供了銷售變更報表查看和銷售變更單下載的功能。以下是詳細的使用說明…

OpenCV形態學操作

1.1. 形態學操作介紹 初識: 形態學操作是一種基于圖像形狀的處理方法,主要用于分析和處理圖像中的幾何結構。其核心是通過結構元素(卷積核)對圖像進行掃描和操作,從而改變圖像的形狀和特征。例如: 腐蝕&…

力扣算法-1

力扣算法 1 兩數之和 給定一個整數數組nums和一個整數目標值target,請你在數組中找出和為目標值target的那兩個整數,返回他們的數組下標。 (1)暴力枚舉 (枚舉數組每一個數x,再尋找數組中是否存在 targe…

pyside6學習專欄(三):自定義QLabel標簽擴展類QLabelEx

標簽是界面設計中最常用的控件,本文演示了如何基于PySide6的QLabex控件類擴展定義QLabelEX類,以實現更少的編碼完成各種圖像、彩色文本、動畫的加載和顯示,豐富界面顯示 本示例演示了QLabel和其擴展類QLabelEx分別顯示文本、圖像、動畫的使用…

從0到1:固件分析

固件分析 0x01 固件提取 1、從廠商官網下載 例如D-link的固件: https://support.dlink.com/resource/products/ 2、代理或鏡像設備更新時的流量 發起中間人攻擊MITM #啟用IP轉發功能 echo 1 > /proc/sys/net/ipv4/ip_forward#配置iptables,將目…

使用 Spring Boot 和 Canal 實現 MySQL 數據庫同步

文章目錄 前言一、背景二、Canal 簡介三、主庫數據庫配置1.主庫配置2.創建 Canal 用戶并授予權限 四.配置 Canal Server1.Canal Server 配置文件2.啟動 Canal Server 五.開發 Spring Boot 客戶端1. 引入依賴2. 配置 Canal 客戶端3. 實現數據同步邏輯 六.啟動并測試七.注意事項八…

Linux系統配置阿里云yum源,安裝docker

配置阿里云yum源 需要保證能夠訪問阿里云網站 可以先ping一下看看(阿里云可能禁ping,只要能夠解析為正常的ip地址即可) ping mirrors.aliyun.com腳本 #!/bin/bash mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos…

后端開發:開啟技術世界的新大門

在互聯網的廣闊天地中,后端開發宛如一座大廈的基石,雖不直接與用戶 “面對面” 交流,卻默默地支撐著整個互聯網產品的穩定運行。它是服務器端編程的核心領域,負責處理數據、執行業務邏輯以及與數據庫和其他后端服務進行交互。在當…

銀河麒麟系統安裝mysql5.7【親測可行】

一、安裝環境 cpu:I5-10代; 主板:華碩; OS:銀河麒麟V10(SP1)未激活 架構:Linux 5.10.0-9-generic x86_64 GNU/Linux mysql版本:mysql-5.7.34-linux-glibc2.12-x86_64.ta…

從零開始學習PX4源碼9(部署px4源碼到gitee)

目錄 文章目錄 目錄摘要1.gitee上創建倉庫1.1 gitee上創建倉庫PX4代碼倉庫1.2 gitee上創建子倉庫2.固件在gitee部署過程2.1下載固件到本地2.2切換本地分支2.3修改.gitmodules內容2.4同步子模塊倉庫地址2.5同步子模塊倉庫地址更新(下載)子模塊3.一級子模塊和二級子模塊的映射關…

【回溯算法2】

力扣17.電話號碼的字母組合 鏈接: link 思路 這道題容易想到用嵌套的for循環實現,但是如果輸入的數字變多,嵌套的for循環也會變長,所以暴力破解的方法不合適。 可以定義一個map將數字和字母對應,這樣就可以獲得數字字母的映射了…

科普:“Docker Desktop”和“Docker”以及“WSL”

“Docker Desktop”和“Docker”這兩個概念既有緊密聯系,又存在一定區別: 一、聯系 核心功能同源:Docker Desktop 本質上是基于 Docker 核心技術構建的。Docker 是一個用于開發、部署和運行應用程序的開源平臺,它利用容器化技術…

Flutter 網絡請求與數據處理:從基礎到單例封裝

Flutter 網絡請求與數據處理:從基礎到單例封裝 在 Flutter 開發中,網絡請求是一個非常常見的需求,比如獲取 API 數據、上傳文件、處理分頁加載等。為了高效地處理網絡請求和數據管理,我們需要選擇合適的工具并進行合理的封裝。 …

虛擬表格實現全解析

在數據展示越來越復雜的今天,大量數據的渲染就像是“滿漢全席”——如果把所有菜肴一次性擺上桌,既浪費資源也讓人眼花繚亂。幸運的是,我們有兩種選擇: 自己動手:通過二次封裝 Element Plus 的表格組件,實…

QT 讀寫鎖

一、概述 1、讀寫鎖是一種線程同步機制,用于解決多線程環境下的讀寫競爭問題。 2、讀寫鎖允許多個線程同時獲取讀鎖(共享訪問),但只允許一個線程獲取寫鎖(獨占訪問)。 3、這種機制可以提高并發性能&…

2025 vue3面試題匯總,通俗易懂

一、基礎概念與核心特性 1. Vue3 相比 Vue2 的改進(通俗版) 問題:Vue3 比 Vue2 好在哪? 答案: 更快: Proxy 代理:Vue2 的響應式像“逐個監聽保險箱”(每個屬性單獨監聽&#xff0…

第5章:在LangChain中如何使用AI Services

這篇文章詳細介紹了 LangChain4j 中的 AI Services 概念,展示了如何通過高層次的抽象來簡化與大語言模型(LLM)的交互。AI Services 的核心思想是隱藏底層復雜性,讓開發者專注于業務邏輯,同時支持聊天記憶、工具調用和 …

二叉樹(數據結構)

二叉樹 二叉樹也是用過遞歸定義的結構 先序遍歷又稱前序遍歷 ?? ?? 按照先序遍歷的方法去手算處理這個二叉樹 ?? 先A B C 再 A B D E C(也就是把B換成BDE再放進去) 再 A B D E C F 看這個插入的方法要掌握像二叉樹這樣向一個…

機器學習筆記——常用損失函數

大家好,這里是好評筆記,公主號:Goodnote,專欄文章私信限時Free。本筆記介紹機器學習中常見的損失函數和代價函數,各函數的使用場景。 熱門專欄 機器學習 機器學習筆記合集 深度學習 深度學習筆記合集 文章目錄 熱門…

Wireshark使用介紹

文章目錄 Wireshark介紹Wireshark使用工作模式介紹1. 混雜模式(Promiscuous Mode)2. 普通模式(Normal Mode)3. 監視模式(Monitor Mode) 界面分區捕獲過濾器語法基本語法邏輯運算符高級語法使用示例捕獲過濾…