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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

純python實(shí)現(xiàn)(一)Harris corner

汽車電子技術(shù) ? 來源:神經(jīng)網(wǎng)絡(luò)與強(qiáng)化學(xué)習(xí) ? 作者:Jemma Liu ? 2023-03-01 11:41 ? 次閱讀

本篇關(guān)于之前做的一個(gè)project的具體實(shí)現(xiàn)。常有一種遺憾,遇到很美的風(fēng)景而你的鏡頭卻不能全部將它收入“眼底”。現(xiàn)在許多手機(jī)上都有了全景模式,這個(gè)功能在一定程度上緩解了問題,但對(duì)于有些的同學(xué)比如說我依然會(huì)拍出“抖動(dòng)”嚴(yán)重的畫面。今天我要介紹的這個(gè)project就可以將多個(gè)單張不同角度的風(fēng)景拼成一張大圖。

效果如下:

首先使用Harris Corner特征檢測器和sift描述符檢測圖像中的特征,并在其他圖像中找到最佳匹配特征; 然后使用RANSAC 對(duì)齊照片(確定它們的重疊和相對(duì)位置),最后將生成的圖像拼接到一個(gè)無縫的全景圖中。

多張單圖:

圖片圖片圖片圖片圖片圖片

全景圖:

圖片

首先基本步驟為:

  1. 進(jìn)行角點(diǎn)檢測,本文中將使用Harris corner detector方法進(jìn)行角點(diǎn)檢測。
  2. 進(jìn)行興趣點(diǎn)描述,構(gòu)建sift descriptor。
  3. 兩張圖片之間進(jìn)行興趣點(diǎn)匹配
  4. 利用Ransac算法計(jì)算兩張圖片之間的homography(H矩陣)
  5. 根據(jù)H變換圖片并將兩張圖片拼接在一起。
  6. 多次運(yùn)行以上步驟,將所有圖片進(jìn)行拼接,最后獲得全景圖。

具體步驟:

Step1. Harris corner角點(diǎn)檢測

A.計(jì)算圖像x,y方向上的導(dǎo)數(shù)。

B.計(jì)算圖像導(dǎo)數(shù)的協(xié)方差矩陣H。

H= 圖片

通常,在計(jì)算協(xié)方差矩陣時(shí),計(jì)算窗口或圖像的小區(qū)域上的圖片,圖片圖片之和。為了獲得更好的角點(diǎn)檢測結(jié)果可以使用高斯加權(quán)窗口。使用det(H)/trace(H),其中det(H)為 計(jì)算每個(gè)點(diǎn)的Harris響應(yīng)值。設(shè)置閾值找到并存儲(chǔ)興趣點(diǎn)位置。

code:

def detectKeypoints(image):
#接收?qǐng)D像
    image = image.astype(np.float32)
    image /= 255.
    height, width = image.shape[:2]
    features = []
    
    grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#轉(zhuǎn)換成灰度圖 計(jì)算Harris值
    harrisImage, orientationImage = computeHarrisValues(grayImage)
    #harrisImage=[harrisImage>np.average(harrisImage)]
#應(yīng)用LocalMaxima算法進(jìn)行特征篩選
    harrisMaxImage =computeLocalMaxima(harrisImage)
#設(shè)置threshold將特征值進(jìn)一步過濾,興趣點(diǎn)數(shù)量進(jìn)一步減少
    threhold = 0.01*np.max(harrisImage)
    
    for y in range(height):
        for x in range(width):
            if not harrisMaxImage[y, x]:
                continue


            f = cv2.KeyPoint()
            f.size = 10
            f.angle = orientationImage[y,x]
            f.pt = (x,y)
            f.response = harrisImage[y,x]
            if(f.response>threhold):
                features.append(f)
    return features

Harris corner的部分

def computeHarrisValues(Image):


    height, width = Image.shape[:2]


    harrisImage = np.zeros(Image.shape[:2], dtype=float)
    orientationImage = np.zeros(Image.shape[:2], dtype=float)


    sobx = np.zeros(Image.shape[:2], dtype=float)
    filters.sobel(Image, 1, sobx)
    soby = np.zeros(Image.shape[:2], dtype=float)
    filters.sobel(Image, 0, soby)
    # sobx = filters.convolve(srcImage,sx,mode='reflect')
    # soby = filters.convolve(srcImage,sy,mode='reflect')
    Ix = sobx*sobx
    Iy = soby*soby
    Ixy = sobx*soby


    Wxx = filters.gaussian_filter(Ix,sigma=0.5)
    Wyy = filters.gaussian_filter(Iy,sigma=0.5)
    Wxy = filters.gaussian_filter(Ixy,sigma=0.5)


    harrisImage = Wxx*Wyy - Wxy*Wxy - 0.1*(Wxx+Wyy)*(Wxx+Wyy)
    orientationImage  = np.arctan2(soby,sobx)*(180) / np.pi


    return harrisImage, orientationImage

結(jié)果展示:

圖片

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 檢測器
    +關(guān)注

    關(guān)注

    1

    文章

    857

    瀏覽量

    47624
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1078

    瀏覽量

    40375
  • Sift
    +關(guān)注

    關(guān)注

    1

    文章

    38

    瀏覽量

    15045
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    用ADE XLall跑all Corner時(shí) 第個(gè)Corner為什么總是會(huì)報(bào)錯(cuò)?

    在用 ADE XL仿真出現(xiàn)個(gè)error ERRO ID:5010在用 ADE XLall 跑all Corner 的時(shí)候,第個(gè)Corner總是會(huì)報(bào)錯(cuò)。不知道怎么回事,outputl
    發(fā)表于 06-25 06:04

    基于小波變換多尺度Harris角點(diǎn)檢測算法

    提出種新的基于小波變換的Harris 多尺度角點(diǎn)檢測算法,可以在不同的尺度下獲取角點(diǎn),克服了單尺度的Harris 角點(diǎn)檢測算法可能存在的角點(diǎn)信息丟失和易受噪聲影響而檢測出
    發(fā)表于 01-09 11:18 ?41次下載

    Harris加快信號(hào)處理FPGA驗(yàn)證

    Harris公司的工程師們經(jīng)常在緊迫的時(shí)限內(nèi)交付基于FPGA的復(fù)雜信號(hào)處理系統(tǒng)。為了滿足客戶時(shí)常十分嚴(yán)格的要求以及自身的質(zhì)量標(biāo)準(zhǔn),工程師們會(huì)在綜合各個(gè)系統(tǒng)前徹底驗(yàn)證HDL設(shè)計(jì)。 在過去,HDL驗(yàn)證需要多步手工操作現(xiàn)在,Harris工程師們使用EDASimulatoLink
    發(fā)表于 03-15 15:36 ?13次下載

    Harris角點(diǎn)檢測

    《OpenCV3編程入門》書本配套源代碼:Harris角點(diǎn)檢測
    發(fā)表于 06-06 15:20 ?4次下載

    基于Harris-SIFT的縫料視覺定位系統(tǒng)綜述

    基于Harris-SIFT的縫料視覺定位系統(tǒng)綜述
    發(fā)表于 06-22 16:05 ?15次下載

    Python實(shí)現(xiàn)所有算法-基本牛頓法

    Python實(shí)現(xiàn)所有算法-二分法 Python實(shí)現(xiàn)所有算法-力系統(tǒng)是否靜態(tài)平衡 Python實(shí)現(xiàn)
    的頭像 發(fā)表于 07-13 10:40 ?1602次閱讀

    個(gè)Python編寫的輕量級(jí)數(shù)據(jù)庫

    TinyDB 是個(gè) Python 編寫的輕量級(jí)數(shù)據(jù)庫,共只有1800行代碼,沒有外部依賴項(xiàng)。
    的頭像 發(fā)表于 02-24 10:32 ?782次閱讀

    FPGA中的fast corner和slow corner介紹

    在FPGA的時(shí)序分析頁面,我們經(jīng)常會(huì)看到`Max at Slow Process Corner`和`Min at Fast Process Corner`,具體是什么含義呢?
    的頭像 發(fā)表于 05-05 15:50 ?1705次閱讀
    FPGA中的fast <b class='flag-5'>corner</b>和slow <b class='flag-5'>corner</b>介紹

    RC Corner基礎(chǔ)知識(shí)詳細(xì)講解

    90nm后更新的工藝,考慮到互連線coupling的影響,出現(xiàn)了RCworst, RCbest corner.
    的頭像 發(fā)表于 06-11 15:32 ?6007次閱讀
    RC <b class='flag-5'>Corner</b>基礎(chǔ)知識(shí)詳細(xì)講解

    UltraEM?的Corner Sweep仿真實(shí)例

    UltraEM可以使用Corner Sweep來仿真工藝變化對(duì)器件結(jié)構(gòu)造成的影響,具體包含三種仿真模式:MonteCarlo仿真、Perturbation仿真與Corner仿真。
    的頭像 發(fā)表于 06-19 10:25 ?786次閱讀
    UltraEM?的<b class='flag-5'>Corner</b> Sweep仿真實(shí)例

    Python實(shí)現(xiàn)OpenCV的安裝與使用

      本文實(shí)例講述了 Python 實(shí)現(xiàn) OpenCV 的安裝與使用。分享給大家供 大家參考,具體如下:  由于下步要開始研究下深度學(xué)習(xí),而深度學(xué)習(xí)領(lǐng)域很多的算法和應(yīng) 用都是用 Python
    發(fā)表于 07-20 11:46 ?7次下載

    TinyDB :個(gè)Python編寫的輕量級(jí)數(shù)據(jù)庫

    TinyDB 是個(gè) Python 編寫的輕量級(jí)數(shù)據(jù)庫,共只有1800行代碼,沒有外部依賴項(xiàng)。 TinyDB的目標(biāo)是降低小型 Python
    的頭像 發(fā)表于 10-21 10:22 ?888次閱讀

    芯片后端signoff的RC corner指什么?

    今天想聊聊STA相關(guān)的RC corner的問題。我先簡單介紹些什么是signoff的corner,然后重點(diǎn)聊聊RC
    的頭像 發(fā)表于 12-05 14:11 ?1316次閱讀

    如何使用Python PySNMP模塊獲取設(shè)備指標(biāo)呢?

    PySNMP 是個(gè)跨平臺(tái)的Python SNMP 引擎實(shí)現(xiàn)。
    的頭像 發(fā)表于 01-12 13:59 ?2564次閱讀

    如何實(shí)現(xiàn)Python復(fù)制文件操作

    Python 中有許多“開蓋即食”的模塊(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在這篇文章中,你將會(huì)看到些用 Python 實(shí)現(xiàn)文件復(fù)制的特殊
    的頭像 發(fā)表于 07-18 14:53 ?336次閱讀