国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python數(shù)字圖像處理基礎(chǔ)(九)——特征匹配

這篇具有很好參考價值的文章主要介紹了python數(shù)字圖像處理基礎(chǔ)(九)——特征匹配。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

蠻力匹配(ORB匹配)

Brute-Force匹配非常簡單,首先在第一幅圖像中選取一個關(guān)鍵點然后依次與第二幅圖像的每個關(guān)鍵點進行(描述符)距離測試,最后返回距離最近的關(guān)鍵點.

對于BF匹配器,首先我們必須使用**cv2.BFMatcher()**創(chuàng)建 BFMatcher 對象。它需要兩個可選的參數(shù):

  • normType:它指定要使用的距離測量,默認(rèn)情況下,它是cv2.NORM_L2,它適用于SIFT,SURF等(cv2.NORM_L1也在那里)。對于基于二進制字符串的描述符,如ORB,BRIEF,BRISK等,應(yīng)使用cv2.NORM_HAMMING,使用漢明距離作為度量,如果ORB使用WTA_K == 3or4,則應(yīng)使用cv2.NORM_HAMMING2。
  • crossCheck:默認(rèn)值為False。如果設(shè)置為True,匹配條件就會更加嚴(yán)格,只有到A中的第i個特征點與B中的第j個特征點距離最近,并且B中的第j個特征點到A中的第i個特征點也是最近時才會返回最佳匹配,即這兩個特征點要互相匹配才行

兩個重要的方法是BFMatcher.match()BFMatcher.knnMatch(), 第一個返回最佳匹配, 第二種方法返回k個最佳匹配,其中k由用戶指定.

使用cv2.drawMatches()來繪制匹配的點,它會將兩幅圖像先水平排列,然后在最佳匹配的點之間繪制直線。如果前面使用的BFMatcher.knnMatch(),現(xiàn)在可以使用函數(shù)cv2.drawMatchsKnn為每個關(guān)鍵點和它的個最佳匹配點繪制匹配線。如果要選擇性繪制就要給函數(shù)傳入一個掩模.

一對一匹配 BFMatcher.match()

import numpy as np
import cv2
from matplotlib import pyplot as plt

img1 = cv2.imread('./image/girl1.jpg')
img2 = cv2.imread('./image/girl2.jpg')

sift = cv2.SIFT_create()

# kp代表特征點 des每個點對應(yīng)特征向量
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)

bf = cv2.BFMatcher(crossCheck=True)  # 可選對象crossCheck

# 1對1匹配
matches = bf.match(des1, des2)
matches = sorted(matches, key=lambda x: x.distance)  # 排序,通過距離來度量

img3 = cv2.drawMatches(img1, kp1, img2, kp2, matches[:30], None, flags=2)  # matches[:10] 距離前十的給顯示出來,即顯示十條匹配線

cv2.imshow('img', img3)
cv2.waitKey(0)
cv2.destroyAllWindows()

python數(shù)字圖像處理基礎(chǔ)(九)——特征匹配,數(shù)字圖像處理,python,opencv,開發(fā)語言,計算機視覺

k對最佳匹配 BFMatcher.knnMatch()

import numpy as np
import cv2
from matplotlib import pyplot as plt

img1 = cv2.imread('./image/girl1.jpg')
img2 = cv2.imread('./image/girl2.jpg')

sift = cv2.SIFT_create()

# kp代表特征點 des每個點對應(yīng)特征向量
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)

# k對最佳匹配
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2)

good = []
for m, n in matches:
    # 過濾方法
    if m.distance < 0.75 * n.distance:
        good.append([m])

img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good, None, flags=2)

cv2.imshow('img', img3)
cv2.waitKey(0)
cv2.destroyAllWindows()

python數(shù)字圖像處理基礎(chǔ)(九)——特征匹配,數(shù)字圖像處理,python,opencv,開發(fā)語言,計算機視覺

RANSAC算法

蠻力匹配是一種簡單而直觀的匹配方法,適用于小規(guī)模的特征點匹配。通過比較所有可能的特征點對,找到最佳匹配。而RANSAC算法則通過隨機采樣和一致性檢驗,從包含噪聲的數(shù)據(jù)中估計出正確的模型參數(shù),對于一些存在噪聲和異常值的情況,RANSAC能夠更穩(wěn)健地估計模型。

利用RANSAC算法計算變換矩陣

RANSAC是"RANdom SAmple Consensus"(隨機一致采樣)的縮寫。該方法是用來找到正確模型來擬合帶有噪聲數(shù)據(jù)的迭代方法。給定一個模型,例如點集之間的單應(yīng)性矩陣。基本的思想是:數(shù)據(jù)中包含正確的點和噪聲點,合理的模型應(yīng)該能夠在描述正確數(shù)據(jù)點的同時摒棄噪聲點。

此外還有ORB匹配、SIFT的特征匹配、基于FLANN的匹配器的匹配,等等

全景圖像拼接

全景圖像拼接是將多張圖像拼接成一張全景圖的任務(wù)。在這個過程中,特征點匹配和單應(yīng)性矩陣估計是關(guān)鍵的步驟。你提到的使用SIFT找到特征點,并通過單應(yīng)性矩陣將圖像進行變換,是一種常見的方法。這樣可以在不同視角或位置拍攝的圖像中找到對應(yīng)的特征點,從而實現(xiàn)拼接。

通過SIFT找特征點

關(guān)于單應(yīng)性矩陣(H矩陣):

利用兩個圖像中至少四個特征點能夠求解一個單應(yīng)性矩陣(homography matrix),然后用這個單應(yīng)性矩陣能夠?qū)D像1中的某個坐標(biāo)變換到圖像2中對應(yīng)的位置。然而,矩陣的推導(dǎo)是來自于相機在不同位姿拍攝同一個三維平面,所以使用opencv計算單應(yīng)性矩陣的時候前提是兩個圖像對應(yīng)區(qū)域必須是同一平面。

當(dāng)進行全景圖像拼接時,常常需要使用RANSAC算法估計單應(yīng)性矩陣。下面是一個簡單的示例代碼,其中包括特征點匹配、RANSAC算法和全景圖像拼接的步驟。

import cv2
import numpy as np

def find_keypoints_and_descriptors(image):
    # 使用SIFT算法找到圖像的關(guān)鍵點和描述符
    sift = cv2.SIFT_create()
    kp, des = sift.detectAndCompute(image, None)
    return kp, des

def match_keypoints(des1, des2):
    # 使用BFMatcher進行特征點匹配
    bf = cv2.BFMatcher()
    matches = bf.knnMatch(des1, des2, k=2)
    
    # 使用比值測試排除不好的匹配
    good = []
    for m, n in matches:
        if m.distance < 0.75 * n.distance:
            good.append(m)
    
    return good

def ransac_homography(matches, kp1, kp2, reproj_thresh=4.0):
    # 將匹配的關(guān)鍵點轉(zhuǎn)換為numpy數(shù)組
    src_pts = np.float32([kp1[m.queryIdx].pt for m in matches]).reshape(-1, 1, 2)
    dst_pts = np.float32([kp2[m.trainIdx].pt for m in matches]).reshape(-1, 1, 2)
    
    # 使用RANSAC算法估計單應(yīng)性矩陣
    H, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, reproj_thresh)
    
    return H

def stitch_images(image1, image2, H):
    # 將圖像1進行透視變換,將其疊加到圖像2上
    rows1, cols1 = image1.shape[:2]
    rows2, cols2 = image2.shape[:2]
    warp_img1 = cv2.warpPerspective(image1, H, (cols1 + cols2, rows2))
    warp_img1[:rows2, :cols2] = image2
    
    return warp_img1

if __name__ == "__main__":
    # 讀取兩張圖像
    img1 = cv2.imread('image1.jpg')
    img2 = cv2.imread('image2.jpg')
    
    # 找到關(guān)鍵點和描述符
    kp1, des1 = find_keypoints_and_descriptors(img1)
    kp2, des2 = find_keypoints_and_descriptors(img2)
    
    # 進行特征點匹配
    matches = match_keypoints(des1, des2)
    
    # 使用RANSAC估計單應(yīng)性矩陣
    H = ransac_homography(matches, kp1, kp2)
    
    # 進行全景圖像拼接
    result = stitch_images(img1, img2, H)
    
    # 顯示拼接結(jié)果
    cv2.imshow('Panorama', result)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

為了達到更好的拼接效果,可能需要使用更復(fù)雜的圖像配準(zhǔn)和融合技術(shù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-805210.html


到了這里,關(guān)于python數(shù)字圖像處理基礎(chǔ)(九)——特征匹配的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • python數(shù)字圖像處理基礎(chǔ)(五)——Canny邊緣檢測、圖像金字塔、圖像分割

    python數(shù)字圖像處理基礎(chǔ)(五)——Canny邊緣檢測、圖像金字塔、圖像分割

    梯度是什么? 梯度就是變化的最快的那個方向 edge = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]]) 第一個參數(shù)是需要處理的原圖像,該圖像必須為單通道的灰度圖; 第二個參數(shù)是閾值1; 第三個參數(shù)是閾值2。 原理步驟 1)使用高斯濾波器,以平滑圖像,濾除噪

    2024年01月18日
    瀏覽(28)
  • python數(shù)字圖像處理基礎(chǔ)(二)——圖像基本操作、滑動條、鼠標(biāo)操作

    python數(shù)字圖像處理基礎(chǔ)(二)——圖像基本操作、滑動條、鼠標(biāo)操作

    import cv2 import numpy as np import matplotlib.pyplot as plt 圖像讀取 cv2.MREAD_COLOR: 彩色圖像 或用1 cv2.IMREAD_GRAYSCALE:灰度圖像 或用0 img = cv2.imread(‘cat.jpg’, cv2.IMREAD_GRAYSCALE) 等同于: img = cv2.imread(‘cat.jpg’, 0) 圖像的顯示,也可以創(chuàng)建多個窗口 cv2.imshow(‘img’, img) 等待時間,毫秒級,0表示

    2024年01月18日
    瀏覽(28)
  • OpenCV數(shù)字圖像處理實戰(zhàn)二:模板匹配(C++)

    OpenCV數(shù)字圖像處理實戰(zhàn)二:模板匹配(C++)

    (1)首先需要一個模板圖像 T(子圖像)和一個待檢測的圖像(源圖像 S) (2)在待檢測圖像從左到右,從上到下計算模板圖像與重疊子圖像的匹配度,匹配度越高,兩者相同的可能性越大。 3.1 單模板匹配 注意:result的長寬正好是(原圖-模板圖)的長寬,result圖中白亮程

    2024年02月15日
    瀏覽(22)
  • python數(shù)字圖像處理基礎(chǔ)(八)——harris角點檢測、圖像尺度空間、SIFT算法

    python數(shù)字圖像處理基礎(chǔ)(八)——harris角點檢測、圖像尺度空間、SIFT算法

    原理 Harris 角點檢測是一種用于在圖像中檢測角點的算法。角點是圖像中局部區(qū)域的交叉點或者突出的特征點。Harris 角點檢測算法旨在尋找圖像中對于平移、旋轉(zhuǎn)和尺度變化具有不變性的角點。 該算法通過計算圖像中每個像素點的灰度值的變化,來識別角點。具體來說,Ha

    2024年01月19日
    瀏覽(37)
  • python數(shù)字圖像處理基礎(chǔ)(七)——直方圖均衡化、傅里葉變換

    python數(shù)字圖像處理基礎(chǔ)(七)——直方圖均衡化、傅里葉變換

    均衡化原理 圖像均衡化是一種基本的圖像處理技術(shù),通過更新圖像直方圖的像素強度分布來調(diào)整圖像的全局對比度。這樣做可以使低對比度的區(qū)域在輸出圖像中獲得更高的對比度。 簡單理解:改變圖像對比度,讓色彩更豐富,灰度值直方圖:瘦高 - 均衡 本質(zhì)上,直方圖均衡

    2024年01月18日
    瀏覽(29)
  • 數(shù)字信號與圖像處理實驗三:圖像處理基礎(chǔ)與圖像變換

    數(shù)字信號與圖像處理實驗三:圖像處理基礎(chǔ)與圖像變換

    ? 通過本實驗加深對數(shù)字圖像的理解,熟悉MATLAB中的有關(guān)函數(shù);應(yīng)用DCT對圖像進行變換;熟悉圖像常見的統(tǒng)計指標(biāo),實現(xiàn)圖像幾何變換的基本方法。 ? 選擇兩幅圖像,讀入圖像并顯示,同時使用Matlab計算圖像的大小,灰度平均值、協(xié)方差矩陣、灰度標(biāo)準(zhǔn)差和相關(guān)系數(shù)。 DC

    2024年02月04日
    瀏覽(24)
  • OpenCV-Python中的圖像處理-模板匹配

    OpenCV-Python中的圖像處理-模板匹配

    使用模板匹配可以在一幅圖像中查找目標(biāo) 函數(shù): cv2.matchTemplate(), cv2.minMaxLoc() 模板匹配是用來在一副大圖中搜尋查找模版圖像位置的方法。 OpenCV 為我們提供了函數(shù): cv2.matchTemplate()。和 2D 卷積一樣,它也是用模板圖像在輸入圖像(大圖)上滑動,并在每一個位置對模板圖像

    2024年02月12日
    瀏覽(23)
  • 數(shù)字圖像處理MATLAB大作業(yè):基礎(chǔ)版

    數(shù)字圖像處理MATLAB大作業(yè):基礎(chǔ)版

    本次程序共分為10個功能點: 第一個功能點是實現(xiàn)彩色圖像的灰度化、灰度圖像的二值化及圖像的灰度變化。 第二個功能點是實現(xiàn)圖像的代數(shù)運算及邏輯運算。 第三個功能點是基于直方圖修正的圖像增強。 第四個功能點是基于空間域去實現(xiàn)圖像平滑和提取圖像邊緣。 第五個

    2024年02月05日
    瀏覽(22)
  • 彩色圖像處理之彩色圖像直方圖處理的python實現(xiàn)——數(shù)字圖像處理

    彩色圖像處理之彩色圖像直方圖處理的python實現(xiàn)——數(shù)字圖像處理

    彩色圖像的直方圖處理是一種重要的圖像處理技術(shù),用于改善圖像的視覺效果,增強圖像的對比度,或為后續(xù)的圖像處理任務(wù)(如圖像分割、特征提?。┳鰷?zhǔn)備。彩色圖像通常由紅色(R)、綠色(G)、藍色(B)三個顏色通道組成,因此彩色圖像的直方圖處理相比單色圖像更

    2024年01月23日
    瀏覽(25)
  • 《數(shù)字圖像處理-OpenCV/Python》連載:形態(tài)學(xué)圖像處理

    《數(shù)字圖像處理-OpenCV/Python》連載:形態(tài)學(xué)圖像處理

    本書京東 優(yōu)惠購書鏈接 https://item.jd.com/14098452.html 本書CSDN 獨家連載專欄 https://blog.csdn.net/youcans/category_12418787.html 形態(tài)學(xué)圖像處理是基于形狀的圖像處理,基本思想是利用各種形狀的結(jié)構(gòu)元進行形態(tài)學(xué)運算,從圖像中提取表達和描繪區(qū)域形狀的結(jié)構(gòu)信息。形態(tài)學(xué)運算的數(shù)學(xué)原

    2024年02月19日
    瀏覽(113)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包