一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

單應(yīng)性矩陣計(jì)算函數(shù)與應(yīng)用

OpenCV學(xué)堂 ? 來(lái)源:OpenCV學(xué)堂 ? 作者:OpenCV學(xué)堂 ? 2022-07-13 16:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單應(yīng)性矩陣計(jì)算函數(shù)與應(yīng)用

OpenCV在通過(guò)特征描述子完成描述子匹配之后,會(huì)得到一些關(guān)鍵點(diǎn)對(duì),我們會(huì)把這些關(guān)鍵點(diǎn)對(duì)分別添加到兩個(gè)vector對(duì)象中,作為輸入?yún)?shù),調(diào)用單應(yīng)性矩陣發(fā)現(xiàn)函數(shù)來(lái)發(fā)現(xiàn)一個(gè)變換矩陣H,函數(shù)findHomography就完成了這樣的功能,常見(jiàn)的調(diào)用代碼如下:

 1//--Localizetheobject
 2std::vectorobj_pts;
 3std::vectorscene_pts;
 4for(size_ti=0;i 5{
 6//--Getthekeypointsfromthegoodmatches
 7obj_pts.push_back(keypoints_obj[goodMatches[i].queryIdx].pt);
 8scene_pts.push_back(keypoints_sence[goodMatches[i].trainIdx].pt);
 9}
10MatH=findHomography(obj_pts,scene_pts,RHO);

有了變換矩陣H之后,我們就可以根據(jù)輸入圖像四點(diǎn)坐標(biāo),從場(chǎng)景圖像上得到特征匹配圖像的四點(diǎn)坐標(biāo),代碼實(shí)現(xiàn)如下:

1//--Getthecornersfromtheimage_1(theobjecttobe"detected")
2std::vectorobj_corners(4);
3obj_corners[0]=Point(0,0);obj_corners[1]=Point(box.cols,0);
4obj_corners[2]=Point(box.cols,box.rows);obj_corners[3]=Point(0,box.rows);
5std::vectorscene_corners(4);
6perspectiveTransform(obj_corners,scene_corners,H);

其中scene_corners為對(duì)象在場(chǎng)景圖像中的四點(diǎn)坐標(biāo),獲得坐標(biāo)以后就可以繪制對(duì)應(yīng)的矩形,從而在場(chǎng)景圖像中繪制對(duì)象的外接矩形區(qū)域。運(yùn)行結(jié)果如下:

da958888-0283-11ed-ba43-dac502259ad0.jpg

上述步驟中最重要的就是單應(yīng)性矩陣H的計(jì)算,這里我們首先來(lái)看一下該函數(shù)與其各個(gè)參數(shù)解釋:

1Matcv::findHomography(
2InputArraysrcPoints,
3InputArraydstPoints,
4intmethod=0,
5doubleransacReprojThreshold=3,
6OutputArraymask=noArray(),
7constintmaxIters=2000,
8constdoubleconfidence=0.995
9)

參數(shù)解釋如下:
srcPoints:特征點(diǎn)集合,一般是來(lái)自目標(biāo)圖像
dstPoints:特征點(diǎn)集合,一般是來(lái)自場(chǎng)景圖像
method:表示使用哪種配準(zhǔn)方法,支持有四種方法(后續(xù)詳細(xì)說(shuō))

  • 0 – 使用所有的點(diǎn),比如最小二乘

  • RANSAC – 基于隨機(jī)樣本一致性

  • LMEDS – 最小中值

  • RHO –基于漸近樣本一致性

ransacReprojThreshold:該參數(shù)只有在method參數(shù)為RANSAC與RHO的時(shí)啟用,默認(rèn)為3
mask:遮罩,當(dāng)method方法為RANSAC 或 LMEDS可用
maxIters:最大迭代次數(shù),當(dāng)使用RANSAC方法
confidence:置信參數(shù),默認(rèn)為0.995

單應(yīng)性矩陣H發(fā)現(xiàn)方法

首先簡(jiǎn)單的解釋一下H的作用,假設(shè)在特征匹配或者對(duì)齊,視頻移動(dòng)估算中有兩張圖像image1與image2,image1上有特征點(diǎn)(x1,y1)匹配image2上的特征點(diǎn)(x2,y2),現(xiàn)在我們需要在兩者之間建立一種視圖變換關(guān)系(透視變換),圖示如下(圖二):

dab86f38-0283-11ed-ba43-dac502259ad0.png

其中H是一個(gè)3x3的矩陣

這樣為了求出H中的參數(shù),需要兩個(gè)點(diǎn)對(duì)集合,就是findHomography函數(shù)中前兩個(gè)輸入?yún)?shù),理想情況下,通過(guò)特征提取得到特征點(diǎn)會(huì)再下一幀或者場(chǎng)景圖像中保持不變,但是實(shí)際情況下,收到各種因素的影響,會(huì)額外產(chǎn)生很多特征點(diǎn)或者干擾點(diǎn),如果正確的剔除這些干擾點(diǎn),得到正確匹配的點(diǎn),利用正確匹配點(diǎn)計(jì)算出H才是比較穩(wěn)定的方式。

01

最小二乘擬合

很明顯,圖二所示的是一個(gè)過(guò)約束問(wèn)題,如果沒(méi)有干擾點(diǎn)的話,就可以通過(guò)最小二乘進(jìn)行直接擬合,求的參數(shù),其中錯(cuò)誤計(jì)算如下:

dad13464-0283-11ed-ba43-dac502259ad0.png

基于過(guò)約束方程計(jì)算得到錯(cuò)誤,反向傳播不斷更新參數(shù),直到兩次錯(cuò)誤差值滿足要求閾值為止。

02

RANSAC

最小二乘方法在描述子匹配輸出的點(diǎn)對(duì)質(zhì)量很好,理想情況下是圖像沒(méi)有噪聲污染與像素遷移與光線恒定,但是實(shí)際情況下圖像特別容易受到光線、噪聲導(dǎo)致像素遷移,從而產(chǎn)生額外的多余描述子匹配,這些點(diǎn)對(duì)可以分為outlier跟inlier兩類,基于RANSAC(Random Sample Consensus)可以很好的過(guò)濾掉outlier點(diǎn)對(duì),使用合法的點(diǎn)對(duì)得到最終的變換矩陣H。RANSAC算法基本思想是,它會(huì)從給定的數(shù)據(jù)中隨機(jī)選取一部分進(jìn)行模型參數(shù)計(jì)算,然后使用全部點(diǎn)對(duì)進(jìn)行計(jì)算結(jié)果評(píng)價(jià),不斷迭代,直到選取的數(shù)據(jù)計(jì)算出來(lái)的錯(cuò)誤是最小,比如低于0.5%即可,完整的算法流程步驟如下:

  1. 選擇求解模型要求的最少要求的隨機(jī)點(diǎn)對(duì)

  2. 根據(jù)選擇隨機(jī)點(diǎn)對(duì)求解/擬合模型得到參數(shù)

  3. 根據(jù)模型參數(shù),對(duì)所有點(diǎn)對(duì)做評(píng)估,分為outlier跟inlier

  4. 如果所有inlier的數(shù)目超過(guò)預(yù)定義的閾值,則使用所有inlier重新評(píng)估模型參數(shù),停止迭代

  5. 如果不符合條件則繼續(xù)1~4循環(huán)。

通常迭代次數(shù)N會(huì)選擇一個(gè)比較高的值,OpenCV中默認(rèn)迭代次數(shù)為200,確保有一個(gè)隨機(jī)選擇點(diǎn)對(duì)不會(huì)有outlier數(shù)據(jù),

03

PROSAC(RHO)

注意有時(shí)候RANSAC方法不會(huì)收斂,導(dǎo)致圖像對(duì)齊或者配準(zhǔn)失敗,原因在于RANSAC是一種全隨機(jī)的數(shù)據(jù)選取方式,完全沒(méi)有考慮到數(shù)據(jù)質(zhì)量不同。對(duì)RANSAC算法的改進(jìn)算法就是PROSAC(Progressive Sampling Consensus)即漸近樣本一致性,該方法采用半隨機(jī)方法,對(duì)所有點(diǎn)對(duì)進(jìn)行質(zhì)量評(píng)價(jià)計(jì)算Q值,然后根據(jù)Q值降序排列,每次只在高質(zhì)量點(diǎn)對(duì)中經(jīng)驗(yàn)?zāi)P图僭O(shè)與驗(yàn)證,這樣就大大降低了計(jì)算量,在RANSAC無(wú)法收斂的情況下,PROSAC依然可以取得良好的結(jié)果。OpenCV中的RHO方法就是基于PROSAC估算。

04

LMEDS

最小中值方法擬合,該方法可以看成是最小二乘法的改進(jìn),原因在于計(jì)算機(jī)視覺(jué)的輸入數(shù)據(jù)是圖像,一般都是各自噪聲,這種情況下最小二乘往往無(wú)法正確擬合數(shù)據(jù),所以采用最小中值方法可以更好實(shí)現(xiàn)擬合,排除outlier數(shù)據(jù)。但是它是對(duì)高斯噪聲敏感算法。它的最主要步驟描述如下:

  1. 隨機(jī)選取很多個(gè)子集從整個(gè)數(shù)據(jù)集中

  2. 根據(jù)各個(gè)子集數(shù)據(jù)計(jì)算參數(shù)模型

  3. 使用計(jì)算出來(lái)的參數(shù)對(duì)整個(gè)數(shù)據(jù)集計(jì)算中值平方殘差

  4. 最終最小殘差所對(duì)應(yīng)的參數(shù)即為擬合參數(shù)。

05

對(duì)比測(cè)試

最后看一下OpenCV中使用單應(yīng)性矩陣發(fā)現(xiàn)對(duì)相同的特征點(diǎn)對(duì),分別使用RANSAC、PROSAC、LMEDS進(jìn)行參數(shù)矩陣H的求解結(jié)果對(duì)比,顯示如下:

dae3fd4c-0283-11ed-ba43-dac502259ad0.png

總數(shù)446個(gè)匹配點(diǎn)對(duì),三種評(píng)估方式生成的H矩陣(3x3)很明顯值都不盡相同。

一般情況下在,推薦大家使用RANSAC或者RHO。默認(rèn)的0表示最小二乘方法,對(duì)圖像匹配在實(shí)際應(yīng)用中一般都是翻車!LMEDS方法只有在inlier超過(guò)50%以上情況下才會(huì)擬合生成比較好的H參數(shù),而RANSAC或者RHO不管outlier跟inlier比率是多少都會(huì)可以適用,可以大家也都注意到h33總是等于1,因?yàn)閔33在這里作用是保持標(biāo)準(zhǔn)化尺度。在OpenCV中如果無(wú)法正確估算參數(shù)H,會(huì)返回空Mat對(duì)象。

單應(yīng)性矩陣應(yīng)用

圖像透視變換與對(duì)象匹配

daf600dc-0283-11ed-ba43-dac502259ad0.jpg

圖像拼接

db10fba8-0283-11ed-ba43-dac502259ad0.jpg

最后的話

我在2019年的文章匯總中說(shuō),2020年少寫廢話,但愿此篇不是廢話,我為了寫好它也是傷神很久,算是自己盡力了,也是回答了平時(shí)一些人總問(wèn)我的問(wèn)題,歡迎大家指正與反饋!如果覺(jué)得不錯(cuò),點(diǎn)個(gè)贊我就很滿足了!

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

    關(guān)注

    2

    文章

    1094

    瀏覽量

    41282
  • 矩陣
    +關(guān)注

    關(guān)注

    1

    文章

    434

    瀏覽量

    35252
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4381

    瀏覽量

    64921

原文標(biāo)題:OpenCV單應(yīng)性矩陣發(fā)現(xiàn)參數(shù)估算方法詳解

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    高壓端探頭設(shè)計(jì)中的器材應(yīng)如何選型

    在高壓端探頭設(shè)計(jì)的過(guò)程中,器材的選型是尤為重要的,這決定探頭的性能,可靠和安全等重要環(huán)節(jié)。從電氣性能到機(jī)械結(jié)構(gòu),每一個(gè)器件的選型都要經(jīng)過(guò)深思熟慮,本文主要從電氣性能方面探討,應(yīng)該如何進(jìn)行器材的選型。
    的頭像 發(fā)表于 06-05 18:07 ?200次閱讀

    邊緣計(jì)算和云計(jì)算在預(yù)測(cè)維護(hù)中的作用

    隨著科技的迅猛發(fā)展,邊緣計(jì)算和云計(jì)算正逐漸大規(guī)模應(yīng)用到生產(chǎn)和生活中。具體到工業(yè)領(lǐng)域,我們可以如何利用邊緣計(jì)算和云計(jì)算來(lái)改善預(yù)測(cè)維護(hù)呢?
    的頭像 發(fā)表于 02-26 14:17 ?608次閱讀

    希姆計(jì)算的RISC-V矩陣擴(kuò)展開(kāi)源項(xiàng)目已升級(jí)至0.5版本,支持向量+矩陣的實(shí)現(xiàn)

    的問(wèn)題,推動(dòng)加速人工智能行業(yè)的發(fā)展,自2021年開(kāi)始,希姆計(jì)算啟動(dòng)了針對(duì)RISC-V矩陣指令集和支持工具的開(kāi)源工作,工作的目標(biāo)是提高人工智能應(yīng)用的兼容、降低軟件開(kāi)發(fā)成本,并實(shí)現(xiàn)新
    的頭像 發(fā)表于 11-12 01:08 ?2873次閱讀
    希姆<b class='flag-5'>計(jì)算</b>的RISC-V<b class='flag-5'>矩陣</b>擴(kuò)展開(kāi)源項(xiàng)目已升級(jí)至0.5版本,支持向量+<b class='flag-5'>矩陣</b>的實(shí)現(xiàn)

    如何優(yōu)化SUMIF函數(shù)的效率

    : 1. 使用數(shù)組公式 數(shù)組公式可以同時(shí)處理多個(gè)數(shù)據(jù)點(diǎn),而不是逐個(gè)計(jì)算,這可以顯著提高效率。例如,你可以使用 SUM 和 IF 函數(shù)的組合來(lái)創(chuàng)建一個(gè)數(shù)組公式: =SUM(IF(條件范圍=條件, 求和范圍
    的頭像 發(fā)表于 11-11 09:20 ?1351次閱讀

    SUMIF函數(shù)與SUMIFS函數(shù)的區(qū)別

    SUMIF函數(shù)和SUMIFS函數(shù)都是Excel中用于條件求和的函數(shù),它們可以幫助用戶根據(jù)特定的條件對(duì)數(shù)據(jù)進(jìn)行求和。盡管它們的基本功能相似,但在使用場(chǎng)景和功能上存在一些差異。以下是對(duì)這兩個(gè)函數(shù)
    的頭像 發(fā)表于 10-30 09:51 ?7536次閱讀

    計(jì)算安全如何保障

    計(jì)算的安全是一個(gè)復(fù)雜而多維的問(wèn)題,涉及多個(gè)層面和多種技術(shù)手段。為了保障云計(jì)算的安全,需要采取一系列綜合措施,以下是具體的保障方法: 一、數(shù)據(jù)加密 數(shù)據(jù)加密是保護(hù)云
    的頭像 發(fā)表于 10-24 09:14 ?898次閱讀

    有哪個(gè)計(jì)算軟件可以對(duì)端轉(zhuǎn)差分的OPA1632做到有源濾波電路參數(shù)自動(dòng)設(shè)置計(jì)算的功能?

    號(hào)輸出 ,而且電路要具有低通和放大的功能。以前的filter pro軟件只對(duì)運(yùn)放構(gòu)成的有源濾波電路有自動(dòng)計(jì)算的功能。不知道TI貴公司有哪個(gè)計(jì)算軟件可以對(duì)端轉(zhuǎn)差分的芯片做到有源濾波電路參數(shù)自動(dòng)設(shè)置
    發(fā)表于 10-16 08:24

    CPU 雙項(xiàng)目開(kāi)發(fā)實(shí)現(xiàn)更好的維護(hù)和可行應(yīng)用說(shuō)明

    電子發(fā)燒友網(wǎng)站提供《CPU 雙項(xiàng)目開(kāi)發(fā)實(shí)現(xiàn)更好的維護(hù)和可行應(yīng)用說(shuō)明.pdf》資料免費(fèi)下載
    發(fā)表于 09-12 09:42 ?0次下載
    <b class='flag-5'>單</b>CPU 雙項(xiàng)目開(kāi)發(fā)實(shí)現(xiàn)更好的維護(hù)<b class='flag-5'>性</b>和可行<b class='flag-5'>性</b>應(yīng)用說(shuō)明

    粒子效應(yīng)置信區(qū)間計(jì)算

    電子發(fā)燒友網(wǎng)站提供《粒子效應(yīng)置信區(qū)間計(jì)算.pdf》資料免費(fèi)下載
    發(fā)表于 09-10 10:31 ?0次下載
    <b class='flag-5'>單</b>粒子效應(yīng)置信區(qū)間<b class='flag-5'>計(jì)算</b>

    盛顯科技:拼接處理器為什么要配置混合矩陣?

    使用。那么您知道拼接處理器為什么要配置混合矩陣?下面盛顯科技小編為您介紹: 在拼接處理器上配置混合矩陣的原因,主要基于以下幾點(diǎn): 一、實(shí)現(xiàn)多信號(hào)源靈活切換 多信號(hào)源接入: 混合矩陣能夠同時(shí)連接多個(gè)信號(hào)源,如
    的頭像 發(fā)表于 09-06 11:23 ?637次閱讀
    盛顯科技:拼接處理器為什么要配置混合<b class='flag-5'>矩陣</b>?

    MATLAB(6)--特殊矩陣

    通用的特殊矩陣 zero函數(shù):產(chǎn)生全是0矩陣,即零矩陣。 ones函數(shù):產(chǎn)生全是1矩陣,即幺
    發(fā)表于 09-06 10:24

    MATLAB(3)--矩陣的引用(sub2ind、ind2sub、reshape函數(shù)使用)

    矩陣的最后一列元素。 矩陣元素的序號(hào)就是矩陣元素在內(nèi)存中的排列順序。 例如下圖中,創(chuàng)建了A的兩行三列的元素,引用第三個(gè)元素: 序號(hào)與下邊是一一對(duì)應(yīng)的,以m n
    發(fā)表于 09-06 10:11

    MATLAB(2)--MATLAB矩陣的表示

    矩陣的建立 利用直接輸入法建立矩陣:將矩陣的元素用中括號(hào)括起來(lái),按矩陣的順序輸入各元素,同一行的各元素之間用逗號(hào)或者空格分隔,不同的元素之間用分號(hào)分隔。 利用已建好的
    發(fā)表于 09-06 10:05

    MATLAB中的矩陣索引

    對(duì)矩陣進(jìn)行索引是從矩陣中選擇或修改部分元素的一種方式。MATLAB 有幾種索引樣式,它們不僅功能強(qiáng)大、靈活,而且可讀強(qiáng)、表現(xiàn)力強(qiáng)。矩陣是 MATLAB 用來(lái)組織和分析數(shù)據(jù)的一個(gè)核心組
    的頭像 發(fā)表于 09-05 09:28 ?1089次閱讀
    MATLAB中的<b class='flag-5'>矩陣</b>索引

    XLT開(kāi)關(guān)矩陣

    開(kāi)關(guān)矩陣 蘇州新利通 系列化開(kāi)關(guān)矩陣是提高被測(cè)件測(cè)試效率、實(shí)現(xiàn)自動(dòng)化測(cè)試的核心設(shè)備,是基于標(biāo)準(zhǔn)控制平臺(tái)可進(jìn)行定制化設(shè)計(jì)的產(chǎn)品。系列化開(kāi)關(guān)矩陣工作頻率范圍覆蓋DC~67GHz,可通過(guò)LAN、GPIB
    的頭像 發(fā)表于 08-06 17:15 ?478次閱讀
    XLT開(kāi)關(guān)<b class='flag-5'>矩陣</b>