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

學(xué)習(xí)筆記:Opencv實(shí)現(xiàn)圖像特征提取算法SIFT

這篇具有很好參考價(jià)值的文章主要介紹了學(xué)習(xí)筆記:Opencv實(shí)現(xiàn)圖像特征提取算法SIFT。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

2023.8.19

為了在暑假內(nèi)實(shí)現(xiàn)深度學(xué)習(xí)的進(jìn)階學(xué)習(xí),特意學(xué)習(xí)一下傳統(tǒng)算法,分享學(xué)習(xí)心得,記錄學(xué)習(xí)日常

SIFT的百科:

SIFT =?Scale Invariant Feature Transform,?尺度不變特征轉(zhuǎn)換

全網(wǎng)最詳細(xì)SIFT算法原理實(shí)現(xiàn)_ssift算法_Tc.小浩的博客-CSDN博客

在環(huán)境配置中要配置opencv:

pip install opencv-contrib-python

SIFT算法的三個(gè)計(jì)算步驟:

? 1,在DOG尺度空間中獲取特征點(diǎn);

? 2,關(guān)鍵點(diǎn)的方向估計(jì)(尋找主方向)

? 3,通過各關(guān)鍵點(diǎn)的特征向量(關(guān)鍵點(diǎn)的描述子生成)

進(jìn)行兩兩比較找出相互匹配的若干對特征點(diǎn),建立兩圖間景物間的對應(yīng)關(guān)系,可以基于SIFT實(shí)現(xiàn)圖像拼接

Code of SIFT and lena:

?注意你是否有l(wèi)ena.png圖像

import cv2 as cv

img = cv.imread('lena.png')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
sift = cv.xfeatures2d.SIFT_create()
# sift = cv.SIFT_create()
kp = sift.detect(gray, None)
img = cv.drawKeypoints(gray, kp, img)
cv.imshow("SIFT", img)
cv.imwrite('sift_keypoints.jpg', img)
cv.waitKey(0)
cv.destroyAllWindows()

Result is shown in these figrues : SIFT 提取了lena的特征點(diǎn)?

學(xué)習(xí)筆記:Opencv實(shí)現(xiàn)圖像特征提取算法SIFT,學(xué)習(xí),筆記,opencv學(xué)習(xí)筆記:Opencv實(shí)現(xiàn)圖像特征提取算法SIFT,學(xué)習(xí),筆記,opencv

?基于SIFT的圖片實(shí)現(xiàn)圖片拼接:

? ?代碼是Copy大神的,注意有兩個(gè)代碼,運(yùn)行第二個(gè)喔。代碼所用的圖片也附上!

import numpy as np
import cv2


class Stitcher:

    # 拼接函數(shù)
    def stitch(self, images, ratio=0.75, reprojThresh=4.0, showMatches=False):
        # 獲取輸入圖片
        (imageB, imageA) = images
        # 檢測A、B圖片的SIFT關(guān)鍵特征點(diǎn),并計(jì)算特征描述子
        (kpsA, featuresA) = self.detectAndDescribe(imageA)
        (kpsB, featuresB) = self.detectAndDescribe(imageB)

        # 匹配兩張圖片的所有特征點(diǎn),返回匹配結(jié)果
        M = self.matchKeypoints(kpsA, kpsB, featuresA, featuresB, ratio, reprojThresh)

        # 如果返回結(jié)果為空,沒有匹配成功的特征點(diǎn),退出算法
        if M is None:
            return None

        # 否則,提取匹配結(jié)果
        # H是3x3視角變換矩陣
        (matches, H, status) = M
        # 將圖片A進(jìn)行視角變換,result是變換后圖片
        result = cv2.warpPerspective(imageA, H, (imageA.shape[1] + imageB.shape[1], imageA.shape[0]))
        # 將圖片B傳入result圖片最左端
        result[0:imageB.shape[0], 0:imageB.shape[1]] = imageB

        # 檢測是否需要顯示圖片匹配
        if showMatches:
            # 生成匹配圖片
            vis = self.drawMatches(imageA, imageB, kpsA, kpsB, matches, status)
            # 返回結(jié)果
            return (result, vis)

        # 返回匹配結(jié)果
        return result

    def detectAndDescribe(self, image):
        # 將彩色圖片轉(zhuǎn)換成灰度圖
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

        # 建立SIFT生成器
        descriptor = cv2.xfeatures2d.SIFT_create()

        # 檢測SIFT特征點(diǎn),并計(jì)算描述子
        (kps, features) = descriptor.detectAndCompute(image, None)

        # 將結(jié)果轉(zhuǎn)換成NumPy數(shù)組
        kps = np.float32([kp.pt for kp in kps])
        print(kps)

        # 返回特征點(diǎn)集,及對應(yīng)的描述特征
        return (kps, features)

    def matchKeypoints(self, kpsA, kpsB, featuresA, featuresB, ratio, reprojThresh):
        # 建立暴力匹配器
        matcher = cv2.DescriptorMatcher_create("BruteForce")

        # 使用KNN檢測來自A、B圖的SIFT特征匹配對,K=2
        rawMatches = matcher.knnMatch(featuresA, featuresB, 2)

        matches = []
        for m in rawMatches:
            # 當(dāng)最近距離跟次近距離的比值小于ratio值時(shí),保留此匹配對
            if len(m) == 2 and m[0].distance < m[1].distance * ratio:
                # 存儲兩個(gè)點(diǎn)在featuresA, featuresB中的索引值
                matches.append((m[0].trainIdx, m[0].queryIdx))

        # 當(dāng)篩選后的匹配對大于4時(shí),計(jì)算視角變換矩陣
        if len(matches) > 4:
            # 獲取匹配對的點(diǎn)坐標(biāo)
            ptsA = np.float32([kpsA[i] for (_, i) in matches])
            ptsB = np.float32([kpsB[i] for (i, _) in matches])

            # 計(jì)算視角變換矩陣
            (H, status) = cv2.findHomography(ptsA, ptsB, cv2.RANSAC, reprojThresh)

            # 返回結(jié)果
            return (matches, H, status)

        # 如果匹配對小于4時(shí),返回None
        return None

    def drawMatches(self, imageA, imageB, kpsA, kpsB, matches, status):
        # 初始化可視化圖片,將A、B圖左右連接到一起
        (hA, wA) = imageA.shape[:2]
        (hB, wB) = imageB.shape[:2]
        vis = np.zeros((max(hA, hB), wA + wB, 3), dtype="uint8")
        vis[0:hA, 0:wA] = imageA
        vis[0:hB, wA:] = imageB

        # 聯(lián)合遍歷,畫出匹配對
        for ((trainIdx, queryIdx), s) in zip(matches, status):
            # 當(dāng)點(diǎn)對匹配成功時(shí),畫到可視化圖上
            if s == 1:
                # 畫出匹配對
                ptA = (int(kpsA[queryIdx][0]), int(kpsA[queryIdx][1]))
                ptB = (int(kpsB[trainIdx][0]) + wA, int(kpsB[trainIdx][1]))
                cv2.line(vis, ptA, ptB, (0, 255, 0), 1)

        # 返回可視化結(jié)果
        return vis
from Stitcher import Stitcher
import cv2

# 讀取拼接圖片
imageA = cv2.imread("image/left_01.png")
imageB = cv2.imread("image/right_01.png")

# 把圖片拼接成全景圖
stitcher = Stitcher()
(result, vis) = stitcher.stitch([imageA, imageB], showMatches=True)

# 顯示所有圖片
cv2.imshow("Image A", imageA)
cv2.imshow("Image B", imageB)
cv2.imshow("Keypoint Matches", vis)
cv2.imshow("Result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

學(xué)習(xí)筆記:Opencv實(shí)現(xiàn)圖像特征提取算法SIFT,學(xué)習(xí),筆記,opencv學(xué)習(xí)筆記:Opencv實(shí)現(xiàn)圖像特征提取算法SIFT,學(xué)習(xí),筆記,opencv?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 代碼使用的圖片

?效果是這樣:

學(xué)習(xí)筆記:Opencv實(shí)現(xiàn)圖像特征提取算法SIFT,學(xué)習(xí),筆記,opencv

學(xué)習(xí)筆記:Opencv實(shí)現(xiàn)圖像特征提取算法SIFT,學(xué)習(xí),筆記,opencv?文章來源地址http://www.zghlxwxcb.cn/news/detail-658865.html

到了這里,關(guān)于學(xué)習(xí)筆記:Opencv實(shí)現(xiàn)圖像特征提取算法SIFT的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Opencv C++ SIFT特征提?。▎螆D像,多圖像)+如何設(shè)置閾值+如何對文件夾進(jìn)行批處理+如何設(shè)置掩膜裁剪影像

    Opencv C++ SIFT特征提?。▎螆D像,多圖像)+如何設(shè)置閾值+如何對文件夾進(jìn)行批處理+如何設(shè)置掩膜裁剪影像

    SIFT(Scale-Invariant Feature Transform)是一種用于圖像處理和計(jì)算機(jī)視覺的特征提取算法。由David Lowe于1999年首次提出,它是一種非常有效的局部特征描述符,具有尺度不變性、旋轉(zhuǎn)不變性和對部分遮擋的魯棒性。 SIFT特征提取的主要步驟包括: 尺度空間極值檢測(Scale-Space Extrem

    2024年01月19日
    瀏覽(29)
  • 【圖像處理】SIFT角點(diǎn)特征提取原理

    ????????提起在OpenCV中的特征點(diǎn)提取,可以列出Harris,可以使用SIFT算法或SURF算法來檢測圖像中的角特征點(diǎn)。本篇圍繞sift的特征點(diǎn)提取,只是管中窺豹,而更多的特征點(diǎn)算法有: Harris Stephens / Shi–Tomasi 角點(diǎn)檢測算法 F?rstner角點(diǎn)檢測器; 多尺度 Harris 算子 水平曲線曲率法

    2024年02月07日
    瀏覽(29)
  • OpenCV Python – 使用SIFT算法實(shí)現(xiàn)兩張圖片的特征匹配

    1.要實(shí)現(xiàn)在大圖中找到任意旋轉(zhuǎn)、縮放等情況下的小圖位置,可以使用特征匹配算法,如 SIFT (尺度不變特征變換) 或 SURF (加速穩(wěn)健特征)。這些算法可以在不同尺度和旋轉(zhuǎn)情況下尋找匹配的特征點(diǎn) 2.我們使用了 SIFT 算法檢測和匹配特征點(diǎn),然后使用 RANSAC 算法計(jì)算透視變換矩陣

    2024年02月06日
    瀏覽(22)
  • opencv 進(jìn)階15-檢測DoG特征并提取SIFT描述符cv2.SIFT_create()

    opencv 進(jìn)階15-檢測DoG特征并提取SIFT描述符cv2.SIFT_create()

    前面我們已經(jīng)了解了Harris函數(shù)來進(jìn)行角點(diǎn)檢測,因?yàn)榻屈c(diǎn)的特性,這些角點(diǎn)在圖像旋轉(zhuǎn)的時(shí)候也可以被檢測到。但是,如果我們放大或縮小圖像時(shí),就可能會丟失圖像的某些部分,甚至有可能增加角點(diǎn)的質(zhì)量。這種損失的現(xiàn)象需要一種與圖像比例無關(guān)的角點(diǎn)檢測方法來解決。

    2024年02月11日
    瀏覽(91)
  • 基于SIFT圖像特征識別的匹配方法比較與實(shí)現(xiàn)

    基于SIFT圖像特征識別的匹配方法比較與實(shí)現(xiàn)

    目前常用的匹配器有 BFMatcher and FlannBasedMatcher 1.1 BFMatcher BFMatcher 全稱是 Brute-Force Matcher (直譯即為暴力匹配器) 大致原理: 對于 img1 中的每個(gè)描述符, BFMatcher 將其與 img2 中的所有描述符進(jìn)行比較;它計(jì)算兩個(gè)描述符之間的距離度量(例如,歐幾里得距離或漢明距離,默認(rèn)使

    2024年02月09日
    瀏覽(33)
  • Opencv圖像特征點(diǎn)提取(

    Opencv圖像特征點(diǎn)提取(

    ? ? ? ? 目錄 特征點(diǎn)分類 1 ORB ①特征點(diǎn)檢測 ②計(jì)算特征描述 2 SIFT 1 SIFT特征檢測的步驟 ①.在DOG尺度空間中獲取極值點(diǎn),即關(guān)鍵點(diǎn)。 ②.特征點(diǎn)方向估計(jì) ③生成特征描述 ④.代碼實(shí)現(xiàn) 3.SURF ①.SURF的介紹 ②.SURF算法步驟 ③. SIFT與SURF效果比較 ④代碼實(shí)現(xiàn) 4 FAST角點(diǎn)檢測且閾值可

    2024年02月14日
    瀏覽(24)
  • 學(xué)習(xí)筆記:Opencv實(shí)現(xiàn)拉普拉斯圖像銳化算法

    學(xué)習(xí)筆記:Opencv實(shí)現(xiàn)拉普拉斯圖像銳化算法

    2023.8.19 為了在暑假內(nèi)實(shí)現(xiàn)深度學(xué)習(xí)的進(jìn)階學(xué)習(xí),Copy大神的代碼,記錄學(xué)習(xí)日常 圖像銳化的百科: 圖像銳化算法-sharpen_lemonHe_的博客-CSDN博客 在環(huán)境配置中要配置opencv: pip install opencv-contrib-python Code and lena.png:注意你是否在data下由lena.png ? 附上lena.png ?效果所示(解讀):

    2024年02月12日
    瀏覽(32)
  • 利用深度學(xué)習(xí)技術(shù)實(shí)現(xiàn)手機(jī)類目商品圖像特征提取與分類

    感謝您提供如此詳細(xì)的任務(wù)描述和要求。作為一位世界級的人工智能專家、程序員和軟件架構(gòu)師,我將全力以赴,以專業(yè)的技術(shù)語言和深入的洞見,為您撰寫這篇題為\\\"利用深度學(xué)習(xí)技術(shù)實(shí)現(xiàn)手機(jī)類目商品圖像特征提取與分類\\\"的技術(shù)博客文章。 讓我們開始吧。 在電子商務(wù)日益興盛

    2024年04月13日
    瀏覽(26)
  • Python與OpenCV環(huán)境中,借助SIFT、單應(yīng)性、KNN以及Ransac技術(shù)進(jìn)行實(shí)現(xiàn)的圖像拼接算法詳細(xì)解析及應(yīng)用

    一、引言 在當(dāng)今數(shù)字化時(shí)代,圖像處理技術(shù)的重要性不言而喻。它在無人駕駛、計(jì)算機(jī)視覺、人臉識別等領(lǐng)域發(fā)揮著關(guān)鍵作用。作為圖像處理的一個(gè)重要部分,圖像拼接算法是實(shí)現(xiàn)廣闊視野圖像的重要手段。今天我們將會講解在Python和OpenCV環(huán)境下,如何使用SIFT、單應(yīng)性、K

    2024年02月15日
    瀏覽(32)
  • OpenCV Python – 使用SIFT實(shí)現(xiàn)兩張圖片的特征匹配

    OpenCV Python – 使用SIFT實(shí)現(xiàn)兩張圖片的特征匹配

    ?我們使用尺度不變特征變換(? SIFT ?)特征描述符和暴力匹配算法實(shí)現(xiàn)兩張圖像的特征匹配。其中,? SIFT ?用于找到圖像中的關(guān)鍵點(diǎn)和描述符,而? 暴力匹配算法 ?用于在兩張圖像中匹配描述符。 要使用? SIFT ?特征檢查器和? 暴力 ?匹配算法實(shí)現(xiàn)兩張圖像的特征匹配,可

    2024年02月03日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包