色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用Python和OpenCV進行圖像拼接

新機器視覺 ? 來源:新機器視覺 ? 作者:新機器視覺 ? 2022-10-26 15:59 ? 次閱讀

圖像拼接是計算機視覺中最成功的應用之一。如今,很難找到不包含此功能的手機或圖像處理API。在本文中,我們將討論如何使用Python和OpenCV進行圖像拼接。也就是,給定兩張共享某些公共區(qū)域的圖像,目標是“縫合”它們并創(chuàng)建一個全景圖像場景。當然也可以是給定多張圖像,但是總會轉換成兩張共享某些公共區(qū)域圖像拼接的問題,因此本文以最簡單的形式進行介紹。

本文主要的知識點包含一下內容:

關鍵點檢測

局部不變描述符(SIFT,SURF等)

特征匹配

使用RANSAC進行單應性估計

透視變換

我們需要拼接的兩張圖像如下:

特征檢測與提取

給定上述一對圖像,我們希望將它們縫合以創(chuàng)建全景場景。重要的是要注意,兩個圖像都需要有一些公共區(qū)域。當然,我們上面給出的兩張圖像時比較理想的,有時候兩個圖像雖然具有公共區(qū)域,但是同樣還可能存在縮放、旋轉、來自不同相機等因素的影響。但是無論哪種情況,我們都需要檢測圖像中的特征點。

關鍵點檢測

最初的并且可能是幼稚的方法是使用諸如Harris Corners之類的算法來提取關鍵點。然后,我們可以嘗試基于某種相似性度量(例如歐幾里得距離)來匹配相應的關鍵點。眾所周知,角點具有一個不錯的特性:角點不變。這意味著,一旦檢測到角點,即使旋轉圖像,該角點仍將存在。

但是,如果我們旋轉然后縮放圖像怎么辦?在這種情況下,我們會很困難,因為角點的大小不變。也就是說,如果我們放大圖像,先前檢測到的角可能會變成一條線!

總而言之,我們需要旋轉和縮放不變的特征。那就是更強大的方法(如SIFT,SURF和ORB)。

關鍵點和描述符

諸如SIFT和SURF之類的方法試圖解決角點檢測算法的局限性。通常,角點檢測器算法使用固定大小的內核來檢測圖像上的感興趣區(qū)域(角)。不難看出,當我們縮放圖像時,該內核可能變得太小或太大。為了解決此限制,諸如SIFT之類的方法使用高斯差分(DoD)。想法是將DoD應用于同一圖像的不同縮放版本。它還使用相鄰像素信息來查找和完善關鍵點和相應的描述符。

首先,我們需要加載2個圖像,一個查詢圖像和一個訓練圖像。最初,我們首先從兩者中提取關鍵點和描述符。通過使用OpenCV detectAndCompute()函數(shù),我們可以一步完成它。請注意,為了使用detectAndCompute(),我們需要一個關鍵點檢測器和描述符對象的實例。它可以是ORB,SIFT或SURF等。此外,在將圖像輸入給detectAndCompute()之前,我們將其轉換為灰度。

def detectAndDescribe(image, method=None):
    """
    Compute key points and feature descriptors using an specific method
    """


    assert method is not None, "You need to define a feature detection method. Values are: 'sift', 'surf'"


    # detect and extract features from the image
    if method == 'sift':
        descriptor = cv2.xfeatures2d.SIFT_create()
    elif method == 'surf':
        descriptor = cv2.xfeatures2d.SURF_create()
    elif method == 'brisk':
        descriptor = cv2.BRISK_create()
    elif method == 'orb':
        descriptor = cv2.ORB_create()


    # get keypoints and descriptors
    (kps, features) = descriptor.detectAndCompute(image, None)


    return (kps, features)

我們?yōu)閮蓚€圖像都設置了一組關鍵點和描述符。如果我們使用SIFT作為特征提取器,它將為每個關鍵點返回一個128維特征向量。如果選擇SURF,我們將獲得64維特征向量。下圖顯示了使用SIFT,SURF,BRISK和ORB得到的結果。

使用ORB和漢明距離檢測關鍵點和描述符

使用SIFT檢測關鍵點和描述符

使用SURF檢測關鍵點和描述符

使用BRISK和漢明距離檢測關鍵點和描述符

特征匹配

如我們所見,兩個圖像都有大量特征點。現(xiàn)在,我們想比較兩組特征,并盡可能顯示更多相似性的特征點對。使用OpenCV,特征點匹配需要Matcher對象。在這里,我們探索兩種方式:暴力匹配器(BruteForce)和KNN(k最近鄰)。

BruteForce(BF)Matcher的作用恰如其名。給定2組特征(來自圖像A和圖像B),將A組的每個特征與B組的所有特征進行比較。默認情況下,BF Matcher計算兩點之間的歐式距離。因此,對于集合A中的每個特征,它都會返回集合B中最接近的特征。對于SIFT和SURF,OpenCV建議使用歐幾里得距離。對于ORB和BRISK等其他特征提取器,建議使用漢明距離。我們要使用OpenCV創(chuàng)建BruteForce Matcher,一般情況下,我們只需要指定2個參數(shù)即可。第一個是距離度量。第二個是是否進行交叉檢測的布爾參數(shù)。具體代碼如下:

def createMatcher(method,crossCheck):

“Create and return a Matcher Object”

if method == ‘sift’ or method == ‘surf’:

bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=crossCheck)

elif method == ‘orb’ or method == ‘brisk’:

bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=crossCheck)

return bf

交叉檢查布爾參數(shù)表示這兩個特征是否具有相互匹配才視為有效。換句話說,對于被認為有效的一對特征(f1,f2),f1需要匹配f2,f2也必須匹配f1作為最接近的匹配。此過程可確保提供更強大的匹配功能集,這在原始SIFT論文中進行了描述。

但是,對于要考慮多個候選匹配的情況,可以使用基于KNN的匹配過程。KNN不會返回給定特征的單個最佳匹配,而是返回k個最佳匹配。需要注意的是,k的值必須由用戶預先定義。如我們所料,KNN提供了更多的候選功能。但是,在進一步操作之前,我們需要確保所有這些匹配對都具有魯棒性。

比率測試

為了確保KNN返回的特征具有很好的可比性,SIFT論文的作者提出了一種稱為比率測試的技術。一般情況下,我們遍歷KNN得到匹配對,之后再執(zhí)行距離測試。對于每對特征(f1,f2),如果f1和f2之間的距離在一定比例之內,則將其保留,否則將其丟棄。同樣,必須手動選擇比率值。

本質上,比率測試與BruteForce Matcher的交叉檢查選項具有相同的作用。兩者都確保一對檢測到的特征確實足夠接近以至于被認為是相似的。下面2個圖顯示了BF和KNN Matcher在SIFT特征上的匹配結果。我們選擇僅顯示100個匹配點以清晰顯示。

使用KNN和SIFT的定量測試進行功能匹配

在SIFT特征上使用暴力匹配器進行特征匹配

需要注意的是,即使做了多種篩選來保證匹配的正確性,也無法完全保證特征點完全正確匹配。盡管如此,Matcher算法仍將為我們提供兩幅圖像中最佳(更相似)的特征集。接下來,我們利用這些點來計算將兩個圖像的匹配點拼接在一起的變換矩陣。

這種變換稱為單應矩陣。簡而言之,單應性是一個3x3矩陣,可用于許多應用中,例如相機姿態(tài)估計,透視校正和圖像拼接。它將點從一個平面(圖像)映射到另一平面。

估計單應性

隨機采樣一致性(RANSAC)是用于擬合線性模型的迭代算法。與其他線性回歸器不同,RANSAC被設計為對異常值具有魯棒性。

像線性回歸這樣的模型使用最小二乘估計將最佳模型擬合到數(shù)據。但是,普通最小二乘法對異常值非常敏感。如果異常值數(shù)量很大,則可能會失敗。RANSAC通過僅使用數(shù)據中的一組數(shù)據估計參數(shù)來解決此問題。下圖顯示了線性回歸和RANSAC之間的比較。需要注意數(shù)據集包含相當多的離群值。

我們可以看到線性回歸模型很容易受到異常值的影響。那是因為它試圖減少平均誤差。因此,它傾向于支持使所有數(shù)據點到模型本身的總距離最小的模型。包括異常值。相反,RANSAC僅將模型擬合為被識別為點的點的子集。

這個特性對我們的用例非常重要。在這里,我們將使用RANSAC來估計單應矩陣。事實證明,單應矩陣對我們傳遞給它的數(shù)據質量非常敏感。因此,重要的是要有一種算法(RANSAC),該算法可以從不屬于數(shù)據分布的點中篩選出明顯屬于數(shù)據分布的點。

估計了單應矩陣后,我們需要將其中一張圖像變換到一個公共平面上。在這里,我們將對其中一張圖像應用透視變換。透視變換可以組合一個或多個操作,例如旋轉,縮放,平移或剪切。我們可以使用OpenCV warpPerspective()函數(shù)。它以圖像和單應矩陣作為輸入。

# Apply panorama correction
width = trainImg.shape[1] + queryImg.shape[1]
height = trainImg.shape[0] + queryImg.shape[0]


result = cv2.warpPerspective(trainImg, H, (width, height))
result[0:queryImg.shape[0], 0:queryImg.shape[1]] = queryImg


plt.figure(figsize=(20,10))
plt.imshow(result)


plt.axis('off')
plt.show()

如我們所見,結果中包含了兩個圖像中的內容。另外,我們可以看到一些與照明條件和圖像邊界邊緣效應有關的問題。理想情況下,我們可以執(zhí)行一些處理技術來標準化亮度,例如直方圖匹配,這會使結果看起來更真實和自然一些。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • API
    API
    +關注

    關注

    2

    文章

    1502

    瀏覽量

    62070
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84720

原文標題:使用OpenCV進行圖像全景拼接

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    一個月速成python+OpenCV圖像處理

    適用于哪些場景,然后通過Python編寫代碼來實現(xiàn)這些算法,并應用于實際項目中,實現(xiàn)圖像的檢測、識別、分類、定位、測量等目標。本文將介紹一個高效學習Python+O
    的頭像 發(fā)表于 11-29 18:27 ?141次閱讀
    一個月速成<b class='flag-5'>python+OpenCV</b><b class='flag-5'>圖像</b>處理

    OpenCV教程之OpenCV圖像閾值處理

    閾值的基本概念是為了簡化圖像進行分析。當我們將圖像轉換為灰度圖像時,必須記住灰度圖像仍然至少有255個值。閾值是將所有內容轉換為白色或黑色
    的頭像 發(fā)表于 11-16 10:16 ?265次閱讀
    <b class='flag-5'>OpenCV</b>教程之<b class='flag-5'>OpenCV</b><b class='flag-5'>圖像</b>閾值處理

    如何用OpenCV的相機捕捉視頻進行人臉檢測--基于米爾NXP i.MX93開發(fā)板

    提供了一個非常簡單的接口,用于相機捕捉一個視頻(我用的電腦內置攝像頭) 1、安裝python3-opencv apt install python3-opencv 2、查看攝像頭支持的格式與分辨率
    發(fā)表于 11-15 17:58

    手寫圖像模板匹配算法在OpenCV中的實現(xiàn)

    OpenCV中的模板匹配是支持基于NCC相似度查找的,但是不是很好用,一個主要的原因是查找最大閾值,只能匹配一個,自己比對閾值,又導致無法正確設定閾值范圍,所以問題很多。于是我重新寫了純Python版本的NCC圖像模板匹配的代碼
    的頭像 發(fā)表于 11-11 10:12 ?250次閱讀
    手寫<b class='flag-5'>圖像</b>模板匹配算法在<b class='flag-5'>OpenCV</b>中的實現(xiàn)

    使用Python進行圖像處理

    下面是一個關于使用Python在幾行代碼中分析城市輪廓線的快速教程。
    的頭像 發(fā)表于 11-07 10:14 ?228次閱讀
    使用<b class='flag-5'>Python</b><b class='flag-5'>進行</b><b class='flag-5'>圖像</b>處理

    OpenCV圖像識別C++代碼

    安裝OpenCV庫 首先,您需要在您的計算機上安裝OpenCV庫。您可以從OpenCV官網下載預編譯的庫或從源代碼編譯。安裝完成后,確保將OpenCV的頭文件和庫文件添加到您的項目中。
    的頭像 發(fā)表于 07-16 10:42 ?2050次閱讀

    opencv圖像識別有什么算法

    OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件庫,提供了大量的圖像處理和計算機視覺相關的算法。以下是一些常見的OpenCV
    的頭像 發(fā)表于 07-16 10:40 ?1062次閱讀

    opencv-pythonopencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件庫,它提供了大量的圖像和視頻處理功能。OpenCV-Python
    的頭像 發(fā)表于 07-16 10:38 ?1216次閱讀

    opencv的主要功能有哪些

    OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺庫,提供了大量的計算機視覺算法和工具。以下是OpenCV的主要功能: 圖像處理
    的頭像 發(fā)表于 07-16 10:35 ?1567次閱讀

    labview全景圖像拼接

    本人是個小白一直在求labview的兩張或多張圖片拼接,就像相機全景一樣,但是一直都找不到。網上只有一個垂直的拼接,但是我想要個橫向的拼接。不過我又找到了一個圖像旋轉的程序。我想兩個結
    發(fā)表于 03-08 09:45

    請問CX3是否可以實現(xiàn)兩個camera的圖像拼接

    CX3 是否可以實現(xiàn)兩個camera的圖像拼接
    發(fā)表于 02-29 08:20

    如何實現(xiàn)PIL和OpenCV之間圖像數(shù)據的轉換呢?

    PIL圖像數(shù)據格式轉換成OpenCV圖像數(shù)據格式
    的頭像 發(fā)表于 02-25 13:43 ?1231次閱讀

    itop-RK3588開發(fā)板機器視覺開發(fā)OpenCV-Python的安裝

    itop-RK3588開發(fā)板機器視覺開發(fā)OpenCV-Python的安裝
    的頭像 發(fā)表于 01-26 15:18 ?4198次閱讀
    itop-RK3588開發(fā)板機器視覺開發(fā)<b class='flag-5'>OpenCV-Python</b>的安裝

    如何使用Python進行圖像識別的自動學習自動訓練?

    如何使用Python進行圖像識別的自動學習自動訓練? 使用Python進行圖像識別的自動學習和自
    的頭像 發(fā)表于 01-12 16:06 ?594次閱讀

    使用圖像處理庫OpenCV從攝像頭獲取數(shù)據并在PyQt5上顯示出來

    OpenCV能夠處理圖像、視頻、深度圖像等各種類型的視覺數(shù)據
    的頭像 發(fā)表于 01-05 17:32 ?2600次閱讀
    使用<b class='flag-5'>圖像</b>處理庫<b class='flag-5'>OpenCV</b>從攝像頭獲取數(shù)據并在PyQt5上顯示出來
    主站蜘蛛池模板: 欧美精品久久久久久久久大尺度| 日日摸夜夜添无码AVA片| 超碰在线视频 免费| 久久re视频这里精品一本到99| 久久精品亚洲牛牛影视| 玄幻全黄h全肉后宫| 4虎最新网址| 久久婷婷五月综合色情| 一日本道伊人久久综合影| 九九热只有精品| 曰韩一本道高清无码av| 国内一级一级毛片a免费| 亚洲国产成人私人影院| 99久久香蕉| 男男高h浪荡受h| xart欧美一区在线播放| 日本一二三区在线视频| 中文字幕亚洲欧美在线视频| 久久艹影院| 2017最新伦理伦理片67| 女人高潮了拔出来了她什么感觉| 小莹的性荡生活| 国产视频a在线观看v| 亚洲欧美国产旡码专区| 丰满少妇69激懒啪啪无码| 久久4k岛国高清一区二区| 亚洲性夜夜色综合网站| 久久这里只精品热在线18| 97久久无码精品AV| 日韩精品一区二区三区色欲AV | 无码毛片内射白浆视频| 国产婷婷色一区二区三区在线| 女生下面免费看| 一本道mw高清码二区三区| 快穿之H啪肉| 一二三区乱码不卡手机版| 久青草国产在线视频亚瑟影视| 亚洲AV福利天堂一区二区三| 九色PORNY丨视频入口| 99九九精品视频| 无限资源在线完整高清观看1|