圖像預處理-圖像邊緣檢測(流程)

一.高斯濾波

????????因為圖像邊緣檢測就是把像素值有差異的地方提取出來,所以噪聲會有很大影響,因此需要對圖像進行平滑處理高斯濾波是流程中常用的方法。

二.計算圖像的梯度與方向

過程中通常使用sobel算子進行梯度計算,在OpenCV中,默認使用?G=|G(x)+G(y)|?來計算梯度值。

這個角度值其實是當前邊緣的梯度方向,若梯度方向不是0°、45°、90°、135°這種特定角度,那么就要用到插值算法來計算當前像素點在其方向上進行插值的結果,然后進行比較并判斷是否保留該像素點。

- 為-22.5°~22.5°,或-157.5°~157.5°,則認為邊緣為水平邊緣;

- 為22.5°~67.5°,或-112.5°~-157.5°,則認為邊緣為45°邊緣;

- 為67.5°~112.5°,或-67.5°~-112.5°,則認為邊緣為垂直邊緣;

- 為112.5°~157.5°,或-22.5°~-67.5°,則認為邊緣為135°邊緣;

三.非極大值抑制

????????經過第二步得到的邊緣不經過處理是沒辦法使用的,因為高斯濾波去噪邊緣會模糊,得到的邊緣像素點非常多,因此需要對其進行一些過濾操作,而非極大值抑制就是一個很好的方法。即檢查每個像素點的梯度方向上的相鄰像素,并保留梯度值最大的像素,將其他像素抑制為零

四.雙閾值篩選

經過非極大值抑制之后,我們還需要設置閾值來進行篩選。

????????當某一像素位置的幅值超過最高閾值時,該像素必是邊緣像素;當幅值低于最低閾值時,該像素必不是邊緣像素;幅值處于最高像素與最低像素之間時,如果它能連接到一個高于閾值的邊緣時,則被認為邊緣像素,否則就不會被認為是邊緣。

五.實現邊緣檢測的流程函數

edges = cv2.Canny(image, threshold1, threshold2)

- threshold1閾值,用于決定可能的邊緣點。

- threshold2閾值,用于決定強邊緣點。

- 即使讀到的是彩色圖也可以進行處理。

import cv2 as cvimg = cv.imread('../images/lvbo2.png')gray1 = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 手動進行高斯濾波再調用canny邊緣檢測
img2 = cv.GaussianBlur(img, (3, 3), 1)gray2 = cv.cvtColor(img2, cv.COLOR_BGR2GRAY)# 二值化處理方便觀察
ret, binary = cv.threshold(gray1, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
ret, binary1 = cv.threshold(gray2, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)# 利用內置高斯濾波器進行邊緣檢測
edge = cv.Canny(binary, 30, 70)
edge1 = cv.Canny(binary1, 30, 70)cv.imshow('edge', edge)
cv.imshow('edge1', edge1)
cv.waitKey(0)
cv.destroyAllWindows()

????????可以發現,提前手動進行去噪處理效果更好,雖然canny函數內置了高斯濾波,但根據要求進行去噪預處理可以得到更好的效果。

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

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

相關文章

ChatBEV:一種理解 BEV 地圖的可視化語言模型

25年3月來自上海交大、上海AI實驗室、同濟大學和MAGIC的論文“ChatBEV: A Visual Language Model that Understands BEV Maps”。 交通場景理解對于智能交通系統和自動駕駛至關重要,可確保車輛安全高效地運行。雖然 VLM 的最新進展已顯示出整體場景理解的前景&…

武裝Burp Suite工具:xia SQL自動化測試_插件

武裝Burp Suite工具:xia SQL自動化測試_插件 插件作者介紹:本插件僅只插入單引號,沒有其他盲注啥的,且返回的結果需要人工介入去判斷是否存在注入,如果需要所有注入都測試,請把burp的流量轉發到xray。 目錄…

線段樹講解(小進階)

目錄 前言 一、線段樹知識回顧 線段樹區間加減 區間修改維護: 區間修改的操作: 區間修改update: 線段樹的區間查詢 區間查詢: 區間查詢的操作: 遞歸查詢過程: 區間查詢query: 代碼&…

neo4j中節點內的名稱顯示不全解決辦法(如何讓label在節點上自動換行)

因為節點過多而且想讓節點中所有文字都顯示出來而放大節點尺寸 從neo4j中導出png,再轉成PDF來查看時,要看清節點里面的文字就得放大5倍才行 在網上看了很多讓里面文字換行的辦法都不行 然后找到一個比較靠譜的辦法是在要顯示的標簽內加換行符 但是我的節點上顯示的是…

SQL進階知識:五、存儲過程和函數

今天介紹下關于存儲過程和函數的詳細介紹,并結合MySQL數據庫提供實際例子。 在MySQL中,存儲過程(Stored Procedures)和函數(Functions)是數據庫編程的重要組成部分,它們可以封裝SQL語句&#xf…

CONDA:用于 Co-Salient 目標檢測的壓縮深度關聯學習(總結)

摘要 一 介紹 二 有關工作 三 提出的方法 圖2:我們的凝聚式深度關聯(CONDA)模型的整體流程圖。具體來說,凝聚式深度關聯(CONDA)模型首先利用圖像特征來計算超關聯。然后,全像素超關聯由對應誘…

node.js 實戰——(path模塊 知識點學習)

path 模塊 提供了操作路徑的功能 說明path. resolve拼接規范的絕對路徑path. sep獲取操作系統的路徑分隔符path. parse解析路徑并返回對象path. basename獲取路徑的基礎名稱path. dirname獲取路徑的目錄名path. extname獲得路徑的擴展名 resolve 拼接規范的絕對路徑 const…

Kimi做內容社區,劍指小紅書?

原創科技新知AI新科技組作者丨櫻木編輯丨江蘺 主編丨九黎 對于當前融資形勢并不明朗的大模型六小龍來說,該如何生存下去,似乎成了各家急需解決的問題。 根據PitchBook數據,今年一季度風險投資機構在中國AI領域共完成144筆交易,投…

opencv--圖像濾波

圖像濾波 含義 方法 噪聲是怎么產生的 線性濾波 概念 利用窗口對圖像中的像素進行加權求和的濾波方式。 圖像來源于小虎教程。 圖像的濾波是二維濾波的過程。 濾波器窗口: 濾波器窗口(也稱為卷積核或模板)是一個小的矩陣(通常為…

Java 實現SpringContextUtils工具類,手動獲取Bean

SpringContextUtils 工具類實現 下面是一個完整的 Spring 上下文工具類實現,用于從 Spring 容器中獲取 Bean。這個工具類考慮了線程安全、性能優化和易用性,并提供了多種獲取 Bean 的方式。 完整實現代碼 import org.springframework.beans.BeansExce…

基于 Vue 2 開發的分頁卡片列表組件(帶懶加載和點擊事件)

功能目標&#xff1a; CardList.vue 中支持分頁&#xff0c;每頁顯示指定數量的卡片。添加“加載中”動畫。支持懶加載&#xff1a;滾動到底部自動加載下一頁。點擊卡片的事件邏輯由 Card.vue 內部發出&#xff0c;并由 CardList 向上傳遞。 主頁面文件 Home.vue <templat…

【數據結構和算法】6. 哈希表

本文根據 數據結構和算法入門 視頻記錄 文章目錄 1. 哈希表的概念1.1 哈希表的實現方式1.2 哈希函數&#xff08;Hash Function&#xff09;1.3 哈希表支持的操作 2. Java實現 在前幾章的學習中&#xff0c;我們已經了解了數組和鏈表的基本特性&#xff0c;不管是數組還是鏈表…

【python】如何將文件夾及其子文件夾下的所有word文件匯總導出到一個excel文件里?

根據你的需求,這里提供一套完整的Python解決方案,支持遞歸遍歷子文件夾、提取Word文檔內容(段落+表格),并整合到Excel中。以下是代碼實現及詳細說明: 一個單元格一個word的全部內容 完整代碼 # -*- coding: utf-8 -*- import os from docx import Document import pand…

leetcode-位運算

位運算 371. 兩整數之和 題目 給你兩個整數 a 和 b &#xff0c;不使用 運算符 和 - &#xff0c;計算并返回兩整數之和。 示例 1&#xff1a; 輸入&#xff1a; a 1, b 2 輸出&#xff1a; 3 示例 2&#xff1a; 輸入&#xff1a; a 2, b 3 輸出&#xff1a; 5 提示&am…

飛帆控件:在編輯模式下額外加載的庫

飛帆是一個自由的控件設計平臺。在飛帆中&#xff0c;我們可以很方便地創建基于 Vue 2 組件的控件&#xff0c;并使用控件來搭建網頁。 他山之石&#xff0c;可以攻玉。在創建控件中&#xff0c;使用 js 、css 依賴庫能讓我們的控件更強大。 有些時候&#xff0c;在編輯模式下…

GPLT-2025年第十屆團體程序設計天梯賽總決賽題解(共計266分)

今天偶然發現天梯賽的代碼還保存著&#xff0c;于是決定寫下這篇題解&#xff0c;也算是復盤一下了 L1本來是打算寫的穩妥點&#xff0c;最后在L1-6又想省時間&#xff0c;又忘記了insert&#xff0c;replace這些方法怎么用&#xff0c;也不想花時間寫一個文件測試&#xff0c…

編碼轉換器

大批量轉換編碼 可以將整個工程文件夾從GB18030轉為UTF-8 使用Qt C制作 項目背景 比較老的工程&#xff0c;尤其是keil嵌入式的工程&#xff0c;其文本文件&#xff08;.c、.cpp、.h、.txt、……&#xff09;編碼為gb2312&#xff0c;這為移植維護等帶來了不便。現在uit-8用…

STL 核心模塊

很好&#xff01;你想深入 STL&#xff08;Standard Template Library&#xff09;和容器算法&#xff0c;是學習 C 非常關鍵的一步。下面我給你整理一份STL 容器 算法的入門指南&#xff0c;適合從零起步掌握這部分內容。 &#x1f31f; 一、STL 核心模塊 STL 分為三大塊&am…

2024沈陽區域賽,D - Dot Product Game

題目鏈接 樹狀數組求逆序對 #include<bits/stdc.h> using namespace std; using lllong long; typedef pair<int,int>PII; typedef priority_queue<int> upq; typedef priority_queue<int,vector<int>,greater<int>> dpq; const int M99…

簡易博客點贊系統實現

簡易博客點贊系統 好久沒寫 Java 了&#xff0c;整個簡單的項目進行康復訓練。 基于 Spring Boot SSM MySQL Mybatis-Plus Knife4j Swagger 的一個簡易博客點贊系統 開源地址&#xff1a;https://github.com/FangMoyu/simple-thumb 功能 登錄獲取當前登錄用戶獲取博客…