CV(4)--邊緣提取和相機模型

前言

僅記錄學習過程,有問題歡迎討論

邊緣提取(涉及語義分割):

圖象的邊緣是指圖象局部區域亮度變化顯著的部分,也有正負之分,暗到亮為正

  • 求邊緣的幅度:sobel,Canny算子

  • 圖像分高頻分量和低頻分量,高頻分量就是灰度變化劇烈的地方(顯眼)

圖像銳化:目的是使圖像的邊緣更加清晰,細節部分更加突出,常用拉普拉斯變化核函數。

邊緣檢測的步驟:邊緣檢測就是提取高頻分量。在邊緣像素值會出現”跳躍“或者較大的變化

  1. 濾波:邊緣檢測的算法主要是基于圖像強度的一階和二階導數(為0,一階極值),但導數通常對噪聲很敏感,
    所以采用濾波減弱噪聲。常見的濾波方法主要有高斯濾波。
  2. 增強:增強邊緣的基礎是確定圖像各點鄰域強度的變化值并凸顯出顯著變化點。
  3. 檢測:經過增強的圖像,往往鄰域中有很多點的梯度值比較大,可以采用用閾值化方法來檢測方法來對這些點進行取舍。

Canny邊緣檢測算法:

  1. 灰度化后高斯濾波:消除噪聲
    高斯卷積核大小影響Canny檢測的性能,越大,檢測對噪聲敏感越低,定位誤差也會增大,5*5還行
  2. 檢測圖像的水平/垂直邊緣:計算梯度—Sobel算子
    用類似于[-1,0,1][-2,0,2][-1,0,1]的矩陣來求梯度的幅值,幅值較大的像素點的為邊緣
  3. 非極大值抑制:去除邊緣檢測帶來的雜散響應
    • 搜素局部最大值,抑制非極大值,去除冗余的邊緣。通俗就是找到像素局部最大值,其他值置為0,就可以剔除大部分非邊緣點。
    • 沿著梯度方向比較像素點的值,保留最大像素點
  4. 雙閾值檢測和連接邊緣:滯后閾值法
    • 大于高閾值為強邊緣,小于低閾值不是邊緣。介于中間是弱邊緣。
    • 閾值的選擇取決于給定輸入圖像的內容,和噪聲點的區別就是是否連續:

相機模型(實際就是坐標系轉化):

針孔相機模型存在四個坐標系:世界坐標系、攝像機坐標系、圖像物理坐標系和圖像像素坐標系。

  • 世界坐標系的坐標為Pw(Xw,Yw,Zw),
  • 對應的攝像機坐標系坐標為Po(x,y,z),–齊次方程做坐標系變化
  • 對應的圖像物理坐標系的坐標為P’(x’,y’),–相似三角的原理等比例
  • 對應的圖像像素坐標系的坐標為p(u,v)。–轉化為長度為像素單位!
    在這里插入圖片描述

在這里插入圖片描述

鏡頭畸變

  • 畸變是由于透鏡形狀和制造工藝的誤差造成的,分為徑向畸變和切向畸變。
  • 徑向畸變是由于透鏡形狀的曲線造成,分為枕形畸變和桶形畸變。
  • 切向畸變是由于透鏡制造工藝的誤差造成的,分為對稱畸變和非對稱畸變。
  • 可以通過透視變化(投影為新平面)來矯正畸變圖片
    通過4個點(兩組x,y)來確定關系,然后投影新平面圖片

Canny算法和透視變化

"""
1-實現canny算法2-實現透視變換
"""
import cv2
import numpy as np# 實現Canny
def CannyDemo(img, low, high):# 灰度化gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 高斯濾波blur = cv2.GaussianBlur(gray, (5, 5), 0)# 采用sobel 算子求梯度[x,y方向求梯度,找出變化最大的像素點]grad_x = cv2.Sobel(blur, cv2.CV_16S, 1, 0, ksize=3)grad_y = cv2.Sobel(blur, cv2.CV_16S, 0, 1, ksize=3)# 轉回uint8abs_grad_x = cv2.convertScaleAbs(grad_x)abs_grad_y = cv2.convertScaleAbs(grad_y)# 合并梯度dst = cv2.addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0)# 非極大值抑制dst = cv2.Canny(dst, low, high)return dst# 實現透視變化
def getWarpPerspectiveMatrix(img, dst):nums = img.shape[0]x = np.zeros((2 * nums, 8))  # x*warpMatrix=yy = np.zeros((2 * nums, 1))for i in range(0, nums):x_i = src[i, :]y_i = dst[i, :]x[2 * i, :] = [x_i[0], x_i[1], 1, 0, 0, 0,-x_i[0] * y_i[0], -x_i[1] * y_i[0]]y[2 * i] = y_i[0]x[2 * i + 1, :] = [0, 0, 0, x_i[0], x_i[1], 1,-x_i[0] * y_i[1], -x_i[1] * y_i[1]]y[2 * i + 1] = y_i[1]x = np.mat(x)# 用x.I求出x的逆矩陣,然后與y相乘,求出warpMatrixmatrix = x.I * y  # 求出a_11, a_12, a_13, a_21, a_22, a_23, a_31, a_32# 之后為結果的后處理matrix = np.array(matrix).T[0]matrix = np.insert(matrix, matrix.shape[0], values=1.0, axis=0)  # 插入a_33 = 1matrix = matrix.reshape((3, 3))return matrixif __name__ == '__main__':img = cv2.imread('lenna.png')# canny邊緣檢測# canny = CannyDemo(img, 50,150)# cv2.imshow('canny', canny)# cv2.waitKey(0)# 實現透視變化img1 = cv2.imread('photo1.jpg')src = np.float32([[207, 151], [517, 285], [17, 601], [343, 731]])dst = np.float32([[0, 0], [337, 0], [0, 488], [337, 488]])print(img.shape)# 生成透視變換矩陣;進行透視變換result = getWarpPerspectiveMatrix(src, dst)print("warpMatrix:")print(result)img_perspective = cv2.warpPerspective(img1, result, (337, 488))cv2.imshow("img_perspective", img_perspective)cv2.waitKey(0)

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

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

相關文章

【信息系統項目管理師】高分論文:論信息系統項目的整合管理(陽光信訪工作平臺)

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 正文一、明確目標,制定項目章程二、精心規劃,制定項目管理計劃三、細心嚴謹,指導和管理項目執行四、組織學習,管理項目知識五、多措并舉,對項目進行有效的監控六、規范流程,控制項目整體變更七、嚴謹高效…

智能技術引領未來:自動圖像標注的創新應用與發展

🍑個人主頁:Jupiter. 🚀 所屬專欄:傳知代碼 歡迎大家點贊收藏評論😊 目錄 概述算法原理核心邏輯效果演示使用方式參考文獻 參考文獻:需要本文的詳細復現過程的項目源碼、數據和預訓練好的模型可從該地址處獲…

C語言-排序

常見的排序算法分為以下四種,插入排序,選擇排序,交換排序,歸并排序。 一、插入排序 (一)直接插入排序 直接插入排序,將一段數組看做被分成已排序序列和未排序序列,排序過程是從未排序序列的元素開始&…

【Java筆記】LinkedList 底層結構

一、LinkedList 的全面說明 LinkedList底層實現了雙向鏈表和雙端隊列特點可以添加任意元素(元素可以重復),包括null線程不安全,沒有實現同步 二、LinkedList 的底層操作機制 三、LinkedList的增刪改查案例 public class LinkedListCRUD { public stati…

網管平臺(基礎篇):路由器的介紹與管理

路由器簡介 路由器(Router)是一種計算機網絡設備,它的主要作用是將數據通過打包,并按照一定的路徑選擇算法,將網絡傳送至目的地。路由器能夠連接兩個或更多個網絡,并根據信道的情況自動選擇和設定路由&…

排序算法(2):選擇排序

問題 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 選擇排序 選擇排序每次從待排序序列中選出最小(或最大)的元素,將其放到序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小(或最大)元素…

Tongweb8命令行使用收集(by lqw)

文章目錄 聲明對應版本修改thanos用戶密碼部署應用到默認實例節點相關操作新增節點(一般一個服務器ip只能裝一個節點)啟動節點(需確認節點沒有運行)停止節點刪除節點節點新增應用節點查看應用節點啟動應用節點停止應用節點卸載應用(謹慎操作,卸載后應用就沒有了,建議備份后…

Artec Leo3D掃描儀在重型機械設備定制中的應用【滬敖3D】

挑戰:一家加拿大制造商需要有效的方法,為富于變化且難度較高的逆向工程,快速、安全、準確地完成重型機械幾何采集。 解決方案:Artec Leo, Artec Studio, Geomagic for SOLIDWORKS 效果:Artec Leo三維掃描代替過去的手動…

Nginx 限制只能白名單 uri 請求的配置

實際生產項目中,大多數時候我們會將后端的 http 接口通過前置 nginx 進行反向代理,對互聯網用戶提供服務。往往我們后端服務所能提供的接口服務是大于互聯網用戶側的實際請求的接口地址數量的(例如后端服務一共有100個api接口,經過…

題海拾貝:力扣 141.環形鏈表

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《題海拾貝》 歡迎點贊&#xff0c;關注&#xff01; 1、題…

Vite快速構建Vue教程

步驟 1: 初始化項目目錄 創建一個名為 projects 的文件夾&#xff0c;作為存放所有 Vite 項目的根目錄。這個文件夾將容納多個獨立的 Vite 項目。 步驟 2: 創建 Vite 項目 右鍵點擊 projects 文件夾并選擇“在此處打開終端”或使用您偏好的代碼編輯器&#xff08;如 VSCode&…

深入理解 CSS 文本換行: overflow-wrap 和 word-break

前言 正常情況下&#xff0c;在固定寬度的盒子中的中文會自動換行。但是&#xff0c;當遇到非常長的英文單詞或者很長的 URL 時&#xff0c;文本可能就不會自動換行&#xff0c;而會溢出所在容器。幸運的是&#xff0c;CSS 為我們提供了一些和文本換行相關的屬性&#xff1b;今…

【NumPy進階】:內存視圖、性能優化與高級線性代數

目錄 1. 深入理解 NumPy 的內存視圖與拷貝1.1 內存視圖&#xff08;View&#xff09;1.1.1 創建視圖1.1.2 視圖的特點 1.2 數組拷貝&#xff08;Copy&#xff09;1.2.1 創建拷貝1.2.2 拷貝的特點 1.3 視圖與拷貝的選擇 2. NumPy 的優化與性能提升技巧2.1 向量化操作示例&#x…

HarmonyOS 5.0應用開發——屬性動畫

【高心星出品】 文章目錄 屬性動畫animateTo屬性動畫animation屬性動畫 屬性動畫 屬性接口&#xff08;以下簡稱屬性&#xff09;包含尺寸屬性、布局屬性、位置屬性等多種類型&#xff0c;用于控制組件的行為。針對當前界面上的組件&#xff0c;其部分屬性&#xff08;如位置屬…

機器學習支持向量機(SVM)算法

一、引言 在當今數據驅動的時代&#xff0c;機器學習算法在各個領域發揮著至關重要的作用。支持向量機&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;作為一種強大的監督學習算法&#xff0c;以其在分類和回歸任務中的卓越性能而備受矚目。SVM 具有良好的泛化…

介紹一款docker ui 管理工具

http://vm01:18999/main.html 管理員登陸賬號 jinghan/123456 ui啟動命令所在文件夾目錄 /work/docker/docker-ui 參考鏈接 DockerUI&#xff1a;一款功能強大的中文Docker可視化管理工具_docker ui-CSDN博客

Motrix WebExtension 使用教程

Motrix WebExtension 使用教程 項目地址:https://gitcode.com/gh_mirrors/mo/motrix-webextension 項目介紹 Motrix WebExtension 是一個瀏覽器擴展,用于與 Motrix 下載管理器集成。該擴展允許用戶通過 Motrix 下載管理器自動下載文件,而不是使用瀏覽器的原生下載管理器。…

前端(四)css選擇器、css的三大特性

css選擇器、css的三大特性 文章目錄 css選擇器、css的三大特性一、css介紹二、css選擇器2.1 基本選擇器2.2 組合選擇器2.3 交集并集選擇器2.4序列選擇器2.5屬性選擇器2.6偽類選擇器2.7偽元素選擇器 三、css三大特性3.1 繼承性3.2 層疊性3.3 優先級 一、css介紹 CSS全稱為Casca…

《探索視頻數字人:開啟未來視界的鑰匙》

一、引言 1.1視頻數字人技術的崛起 在當今科技飛速發展的時代&#xff0c;視頻數字人技術如一顆璀璨的新星&#xff0c;正逐漸成為各領域矚目的焦點。它的出現&#xff0c;猶如一場科技風暴&#xff0c;徹底改變了傳統的視頻制作方式&#xff0c;為各個行業帶來了前所未有的機…

【ETCD】[源碼閱讀]深度解析 EtcdServer 的 processInternalRaftRequestOnce 方法

在分布式系統中&#xff0c;etcd 的一致性與高效性得益于其強大的 Raft 協議模塊。而 processInternalRaftRequestOnce 是 etcd 服務器處理內部 Raft 請求的核心方法之一。本文將從源碼角度解析這個方法的邏輯流程&#xff0c;幫助讀者更好地理解 etcd 的內部實現。 方法源碼 …