演算法圖像標定
Ⅰ 為什麼要對感測器進行標定如何標定
感測器使用一段時間後都會有一定的漂移,需要用校驗儀器對感測器進行校驗。(也就是對比試驗,看看感測器的實際值和理論值的差別是否在可接受的范圍之內。)
比如,對一個0~1MPa輸出為4~20mA的壓力感測器進行標定。輸入0pa,200kpa,400kpa,600kpa,1MPa,分別測量相應的輸出電流值。然後計算輸出的電流值與理論上的4~20mA的偏差是否在范圍之內。
超出范圍,則感測器不能繼續使用,需要校準或更換。在范圍之內,可以繼續使用。
(1)演算法圖像標定擴展閱讀:
敏感元件直接感受被測量,並輸出與被測量有確定關系的物理量信號;轉換元件將敏感元件輸出的物理量信號轉換為電信號;變換電路負責對轉換元件輸出的電信號進行放大調制;轉換元件和變換電路一般還需要輔助電源供電。
變頻功率感測器通過對輸入的電壓、電流信號進行交流采樣,再將采樣值通過電纜、光纖等傳輸系統與數字量輸入二次儀表相連,數字量輸入二次儀表對電壓、電流的采樣值進行運算,可以獲取電壓有效值、電流有效值、基波電壓、基波電流、諧波電壓、諧波電流、有功功率、基波功率、諧波功率等參數。
利用電阻值隨溫度變化而變化這一特性來測量溫度及與溫度有關的參數。在溫度檢測精度要求比較高的場合,這種感測器比較適用。較為廣泛的熱電阻材料為鉑、銅、鎳等,它們具有電阻溫度系數大、線性好、性能穩定、使用溫度范圍寬、加工容易等特點。用於測量-200℃~+500℃范圍內的溫度。
傳統相機標定法需要使用尺寸已知的標定物,通過建立標定物上坐標已知的點與其圖像點之間的對應,利用一定的演算法獲得相機模型的內外參數。根據標定物的不同可分為三維標定物和平面型標定物。
三維標定物可由單幅圖像進行標定,標定精度較高,但高精密三維標定物的加工和維護較困難。平面型標定物比三維標定物製作簡單,精度易保證,但標定時必須採用兩幅或兩幅以上的圖像。
傳統相機標定法在標定過程中始終需要標定物,且標定物的製作精度會影響標定結果。同時有些場合不適合放置標定物也限制了傳統相機標定法的應用。
Ⅱ 工業相機斜著裝怎麼標定
工業相機標定方法有:傳統相機標定法、主動視覺相機標定法、相機自標定法。
傳統相機標定法包括Tasi兩步法和張氏標定法,可使用於任意的相機模型、精度高。但是需要標定物,演算法較復雜。
Tsai兩步法是先線性求得相機參數,之後考慮畸變因素,得到初始的參數值,通過非線性優化得到最終的相機參數。Tsai兩步法速度較快,但僅考慮徑向畸變,當相機畸變嚴重時,該方法不適用。
張氏標定法使用二維方格組成的標定板進行標定,採集標定板不同位姿圖片,提取圖片中角點像素坐標,通過單應矩陣計算出相機的內外參數初始值,利用非線性最小二乘法估計畸變系數,最後使用極大似然估計法優化參數。該方法操作簡單,而且精度較高,可以滿足大部分場合。
主動視覺標定法不需要標定物、演算法簡單、魯棒性高。但是成本高、設備價格昂貴。基於主動視覺的相機標定法是通過主動系統控制相機做特定運動,利用控制平台控制相機發生特定的移動拍攝多組圖像,依據圖像信息和已知位移變化來求解相機內外參數。這種標定方法需要配備精準的控制平台,因此成本較高。
相機自標定法包括分層逐步標定法和基於Kruppa自標定法,靈活性強,可在線標定,但是精度低,魯棒性低。
分層逐步標定法是先對圖像的序列做射影重建,在重建的基礎上進行放射標定和歐式標定,通過非線性優化演算法求得相機內外參數。由於初始參數是模糊值,優化演算法收斂性不確定。
基於Kruppa的自標定法是通過二次曲線建立關於相機內參矩陣的約束方程,至少使用3對圖像來標定相機。圖像序列長度會影響標定演算法的穩定性,無法保證射影空間中的無窮遠平面。
Ⅲ 如何利用opencv計算圖像畸變系數,並進行校正與攝像機標定
如果知道圖像,不知道相機還怎麼通過相機來標定畸變?
1、只給定一張圖片可以根據圖像中相關特徵進行標定,比如:圖像中的某個物體具有直線性特點。一般是找出本來應當是直線的物體邊緣,在其上取若干點,根據這些點將圖像中的物體邊緣重新校正為直線。簡單講就是利用: line is straight 這個原理。
2、目前最常用的張正友在1998年提出的一種標定方法,是通過二維標定板(平面標定板),根據小孔成像的原理,通過對 reprojection error 最小化進行非線性優化,來實現對相機的標定。並非根據看似高大上的訓練集來標定。
當然他寫這篇文章的目的不單單是為了校正畸變。畸變參數只是張正友相機標定法所求參數的一部分,即:兩個徑向畸變系數和兩個切向畸變系數。
消除畸變的目的是讓相機盡量地逼近針孔相機模型,這樣相機成像時直線才會保持其直線性。一般常見的畸變校正演算法都是根據這一原理來實現的。
當然,還有二般的情況。比如:圖像中壓根就沒有直線性物體存在。我們該怎麼辦?還能進行標定嗎?
答案是肯定的。可以利用對極約束,對圖像畸變進行標定。不過,這需要至少兩幅圖像,而且這兩幅圖像必須是同一相機在短時間內拍攝得到。
Ⅳ 目標跟蹤檢測演算法(一)——傳統方法
姓名:劉帆;學號:20021210609;學院:電子工程學院
https://blog.csdn.net/qq_34919792/article/details/89893214
【嵌牛導讀】目標跟蹤演算法研究難點與挑戰在於實際復雜的應用環境 、背景相似干擾、光照條件的變化、遮擋等外界因素以及目標姿態變化,外觀變形,尺度變化、平面外旋轉、平面內旋轉、出視野、快速運動和運動模糊等。而且當目標跟蹤演算法投入實際應用時,不可避免的一個問題——實時性問題也是非常的重要。正是有了這些問題,才使得演算法研究充滿著難點和挑戰。
【嵌牛鼻子】目標跟蹤演算法,傳統演算法
【嵌牛提問】利用目標跟蹤檢測演算法要達到何目的?第一階段的單目標追蹤演算法包括什麼?具體步驟有哪些?它們有何特點?
【嵌牛正文】
第一階段
目標跟蹤分為兩個部分,一個是對指定目標尋找可以跟蹤的特徵,常用的有顏色,輪廓,特徵點,軌跡等,另一個是對目標特徵進行跟蹤。
1、靜態背景
1)背景差: 對背景的光照變化、雜訊干擾以及周期性運動等進行建模。通過當前幀減去背景圖來捕獲運動物體的過程。
2)幀差: 由於場景中的目標在運動,目標的影像在不同圖像幀中的位置不同。該類演算法對時間上連續的兩幀或三幀圖像進行差分運算,不同幀對應的像素點相減,判斷灰度差的絕對值,當絕對值超過一定閾值時,即可判斷為運動目標,從而實現目標的檢測功能。
與二幀差分法不同的是,三幀差分法(交並運算)去除了重影現象,可以檢測出較為完整的物體。幀間差分法的原理簡單,計算量小,能夠快速檢測出場景中的運動目標。但幀間差分法檢測的目標不完整,內部含有「空洞」,這是因為運動目標在相鄰幀之間的位置變化緩慢,目標內部在不同幀圖像中相重疊的部分很難檢測出來。幀間差分法通常不單獨用在目標檢測中,往往與其它的檢測演算法結合使用。
3)Codebook
演算法為圖像中每一個像素點建立一個碼本,每個碼本可以包括多個碼元(對應閾值范圍),在學習階段,對當前像素點進行匹配,如果該像素值在某個碼元的學習閾值內,也就是說與之前出現過的某種歷史情況偏離不大,則認為該像素點符合背景特徵,需要更新對應點的學習閾值和檢測閾值。
如果新來的像素值與每個碼元都不匹配,則可能是由於動態背景導致,這種情況下,我們需要為其建立一個新的碼元。每個像素點通過對應多個碼元,來適應復雜的動態背景。
在應用時,每隔一段時間選擇K幀通過更新演算法建立CodeBook背景模型,並且刪除超過一段時間未使用的碼元。
4)GMM
混合高斯模型(Gaussian of Micture Models,GMM)是較常用的背景去除方法之一(其他的還有均值法、中值法、滑動平均濾波等)。
首先我們需要了解單核高斯濾波的演算法步驟:
混合高斯建模GMM(Gaussian Mixture Model)作為單核高斯背景建模的擴展,是目前使用最廣泛的一種方法,GMM將背景模型描述為多個分布,每個像素的R、G、B三個通道像素值的變化分別由一個混合高斯模型分布來刻畫,符合其中一個分布模型的像素即為背景像素。作為最常用的一種背景建模方法,GMM有很多改進版本,比如利用紋理復雜度來更新差分閾值,通過像素變化的劇烈程度來動態調整學習率等。
5)ViBe(2011)
ViBe演算法主要特點是隨機背景更新策略,這和GMM有很大不同。其步驟和GMM類似。具體的思想就是為每個像素點存儲了一個樣本集,樣本集中采樣值就是該像素點過去的像素值和其鄰居點的像素值,然後將每一個新的像素值和樣本集進行比較來判斷是否屬於背景點。
其中pt(x)為新幀的像素值,R為設定值,p1、p2、p3….為樣本集中的像素值,以pt(x)為圓心R為半徑的圓被認為成一個集,當樣本集與此集的交集大於設定的閾值#min時,可認為此為背景像素點(交集越大,表示新像素點與樣本集越相關)。我們可以通過改變#min的值與R的值來改變模型的靈敏度。
Step1:初始化單幀圖像中每個像素點的背景模型。假設每一個像素和其鄰域像素的像素值在空域上有相似的分布。基於這種假設,每一個像素模型都可以用其鄰域中的像素來表示。為了保證背景模型符合統計學規律,鄰域的范圍要足夠大。當輸入第一幀圖像時,即t=0時,像素的背景模型。其中,NG(x,y)表示空域上相鄰的像素值,f(xi,yi)表示當前點的像素值。在N次的初始化的過程中,NG(x,y)中的像素點(xi,yi)被選中的可能次數為L=1,2,3,…,N。
Step2:對後續的圖像序列進行前景目標分割操作。當t=k時,像素點(x,y)的背景模型為BKm(x,y),像素值為fk(x,y)。按照下面判斷該像素值是否為前景。這里上標r是隨機選的;T是預先設置好的閾值。當fk(x,y)滿足符合背景#N次時,我們認為像素點fk(x,y)為背景,否則為前景。
Step3:ViBe演算法的更新在時間和空間上都具有隨機性。每一個背景點有1/ φ的概率去更新自己的模型樣本值,同時也有1/ φ的概率去更新它的鄰居點的模型樣本值。更新鄰居的樣本值利用了像素值的空間傳播特性,背景模型逐漸向外擴散,這也有利於Ghost區域的更快的識別。同時當前景點計數達到臨界值時將其變為背景,並有1/ φ的概率去更新自己的模型樣本值(為了減少緩慢移動物體的影響和攝像機的抖動)。
可以有如下總結,ViBe中的每一個像素點在更新的時候都有一個時間和空間上隨機影響的范圍,這個范圍很小,大概3x3的樣子,這個是考慮到攝像頭抖動時會有坐標的輕微來回變化,這樣雖然由於ViBe的判別方式仍認為是背景點,但是也會對後面的判別產生影響,為了保證空間的連續性,隨機更新減少了這個影響。而在樣本值保留在樣本集中的概率隨著時間的增大而變小,這就保證了像素模型在時間上面的延續特性。
6)光流
光流是由物體或相機的運動引起的圖像對象在兩個連續幀之間的視在運動模式。它是2D矢量場,其中每個矢量是一個位移矢量,顯示點從第一幀到第二幀的移動。
光流實際上是一種特徵點跟蹤方法,其計算的為向量,基於三點假設:
1、場景中目標的像素在幀間運動時亮度(像素值或其衍生值)不發生變化;2、幀間位移不能太大;3、同一表面上的鄰近點都在做相同的運動;
光流跟蹤過程:1)對一個連續視頻幀序列進行處理;2)對每一幀進行前景目標檢測;3)對某一幀出現的前景目標,找出具有代表性的特徵點(Harris角點);4)對於前後幀做像素值比較,尋找上一幀在當前幀中的最佳位置,從而得到前景目標在當前幀中的位置信息;5)重復上述步驟,即可實現目標跟蹤
2、運動場(分為相機固定,但是視角變化和相機是運動的)
1)運動建模(如視覺里程計運動模型、速度運動模型等)
運動學是對進行剛性位移的相機進行構型,一般通過6個變數來描述,3個直角坐標,3個歐拉角(橫滾、俯仰、偏航)。
Ⅰ、對相機的運動建模
由於這個不是我們本次所要討論的重點,但是在《概率機器人》一書中提出了很多很好的方法,相機的運動需要對圖像內的像素做位移矩陣和旋轉矩陣的坐標換算。除了對相機建立傳統的速度運動模型外,也可以用視覺里程計等通關過置信度的更新來得到概率最大位置。
Ⅱ、對於跟蹤目標的運動建模
該方法需要提前通過先驗知識知道所跟蹤的目標對象是什麼,比如車輛、行人、人臉等。通過對要跟蹤的目標進行建模,然後再利用該模型來進行實際的跟蹤。該方法必須提前知道要跟蹤的目標對象是什麼,然後再去跟蹤指定的目標,這是它的局限性,因而其推廣性相對比較差。(比如已知跟蹤的物體是羽毛球,那很容易通過前幾幀的取點,來建立整個羽毛球運動的拋物線模型)
2)核心搜索演算法(常見的預測演算法有Kalman(卡爾曼)濾波、擴展卡爾曼濾波、粒子濾波)
Ⅰ、Kalman 濾波
Kalman濾波器是通過前一狀態預測當前狀態,並使用當前觀測狀態進行校正,從而保證輸出狀態平穩變化,可有效抵抗觀測誤差。因此在運動目標跟蹤中也被廣泛使用。
在視頻處理的運動目標跟蹤里,每個目標的狀態可表示為(x,y,w,h),x和y表示目標位置,w和h表示目標寬高。一般地認為目標的寬高是不變的,而其運動速度是勻速,那麼目標的狀態向量就應該擴展為(x,y,w,h,dx,dy),其中dx和dy是目標當前時刻的速度。通過kalman濾波器來估計每個時刻目標狀態的大致過程為:
對視頻進行運動目標檢測,通過簡單匹配方法來給出目標的第一個和第二個狀態,從第三個狀態開始,就先使用kalman濾波器預測出當前狀態,再用當前幀圖像的檢測結果作為觀測值輸入給kalman濾波器,得到的校正結果就被認為是目標在當前幀的真實狀態。(其中,Zt為測量值,為預測值,ut為控制量,Kt為增益。)
Ⅱ、擴展卡爾曼濾波(EKF)和無跡卡爾曼濾波(UKF)
由於卡爾曼濾波的假設為線性問題,無法直接用在非線性問題上,EKF和UKF解決了這個問題(這個線性問題體現在用測量量來計算預測量的過程中)。EKF是通過構建線性函數g(x),與非線性函數相切,並對每一時刻所求得的g(x)做KF,如下圖所示。
UKF與EKF去求解雅可比矩陣擬合線性方程的方法不同,通過對那個先驗分布中的採集點,來線性化隨機變數的非線性函數。與EKF所用的方法不同,UKF產生的高斯分布和實際高斯分布更加接近,其引起的近似誤差也更小。
Ⅲ、粒子濾波
1、初始狀態:基於粒子濾波的目標追蹤方法是一種生成式跟蹤方法,所以要有一個初始化的階段。對於第一幀圖像,人工標定出待檢測的目標,對該目標區域提出特徵;
2、搜索階段:現在已經知道了目標的特徵,然後就在目標的周圍撒點(particle), 如:a)均勻的撒點;b)按高斯分布撒點,就是近的地方撒得多,遠的地方撒的少。論文里使用的是後一種方法。每一個粒子都計算所在區域內的顏色直方圖,如初始化提取特徵一樣,然後對所有的相似度進行歸一化。文中相似性使用的是巴氏距離;
3、重采樣:根據粒子權重對粒子進行篩選,篩選過程中,既要大量保留權重大的粒子,又要有一小部分權重小的粒子;
4、狀態轉移:將重采樣後的粒子帶入狀態轉移方程得到新的預測粒子;
5、測量及更新:對目標點特徵化,並計算各個粒子和目標間的巴氏距離,更新粒子的權重;
6、決策階段:每個粒子都獲得一個和目標的相似度,相似度越高,目標在該范圍出現的可能性越高,將保留的所有粒子通過相似度加權後的結果作為目標可能的位置。
3)Meanshift演算法
MeanShift演算法屬於核密度估計法,它不需要任何先驗知識而完全依靠特徵空間中樣本點的計算其密度函數值。對於一組采樣數據,直方圖法通常把數據的值域分成若干相等的區間,數據按區間分成若干組,每組數據的個數與總參數個數的比率就是每個單元的概率值;核密度估計法的原理相似於直方圖法,只是多了一個用於平滑數據的核函數。採用核函數估計法,在采樣充分的情況下,能夠漸進地收斂於任意的密度函數,即可以對服從任何分布的數據進行密度估計。
Meanshift演算法步驟
1、通過對初始點(或者上一幀的目標點)為圓心,繪制一個半徑為R的圓心,尋找特徵和該點相似的點所構成的向量;
2、所有向量相加,可以獲得一個向量疊加,這個向量指向特徵點多的方向;
3、取步驟二的向量終點為初始點重復步驟一、二,直到得到的向量小於一定的閾值,也就是說明當前位置是特徵點密度最密集的地方,停止迭代,認為該點為當前幀的目標點;
4)Camshift演算法
Camshift演算法是MeanShift演算法的改進,稱為連續自適應的MeanShift演算法。Camshift 是由Meanshift 推導而來 Meanshift主要是用在單張影像上,但是獨立一張影像分析對追蹤而言並無意義,Camshift 就是利用MeanShift的方法,對影像串列進行分析。
1、首先在影像串列中選擇目標區域。
2、計算此區域的顏色直方圖(特徵提取)。
3、用MeanShift演演算法來收斂欲追蹤的區域。
4、通過目標點的位置和向量信息計算新的窗口大小,並標示之。
5、以此為參數重復步驟三、四。
Camshift 關鍵就在於當目標的大小發生改變的時候,此演算法可以自適應調整目標區域繼續跟蹤。
3、小結
第一階段的單目標追蹤演算法基本上都是傳統方法,計算量小,在嵌入式等設備中落地較多,opencv中也預留了大量的介面。通過上面的兩節的介紹,我們不難發現,目標檢測演算法的步驟分為兩部分,一部分是對指定目標尋找可以跟蹤的特徵,常用的有顏色,輪廓,特徵點,軌跡等,另一部分是對目標特徵進行跟蹤,如上文所提及的方法。所以目標檢測方法的發展,也可總結為兩個方面,一個是如何去獲得更加具有區分性的可跟蹤的穩定特徵,另一個是如何建立幀與幀之間的數據關聯,保證跟蹤目標是正確的。
隨著以概率為基礎的卡爾曼濾波、粒子濾波或是以Meanshift為代表向量疊加方法在目標檢測的運用,使得目標檢測不再需要假設自身的一個狀態為靜止的,而是可以是運動的,更加符合復雜場景中的目標跟蹤。
Ⅳ [圖像演算法]-Faster RCNN詳解
paper: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Tensorflow-faster r-cnn github: Tensorflow Faster RCNN for Object Detection
faster rcnn是何凱明等大神在2015年提出目標檢測演算法,該演算法在2015年的ILSVRV和COCO競賽中獲得多項第一。該演算法在fast rcnn基礎上提出了RPN候選框生成演算法,使得目標檢測速度大大提高。
(1)image input;
(2)利用selective search 演算法在圖像中從上到下提取2000個左右的Region Proposal;
(3)將每個Region Proposal縮放(warp)成227*227的大小並輸入到CNN,將CNN的fc7層的輸出作為特徵;
(4)將每個Region Proposal提取的CNN特徵輸入到SVM進行分類;
(5)對於SVM分好類的Region Proposal做邊框回歸,用Bounding box回歸值校正原來的建議窗口,生成預測窗口坐標.
缺陷:
(1) 訓練分為多個階段,步驟繁瑣:微調網路+訓練SVM+訓練邊框回歸器;
(2) 訓練耗時,佔用磁碟空間大;5000張圖像產生幾百G的特徵文件;
(3) 速度慢:使用GPU,VGG16模型處理一張圖像需要47s;
(4) 測試速度慢:每個候選區域需要運行整個前向CNN計算;
(5) SVM和回歸是事後操作,在SVM和回歸過程中CNN特徵沒有被學習更新.
(1)image input;
(2)利用selective search 演算法在圖像中從上到下提取2000個左右的建議窗口(Region Proposal);
(3)將整張圖片輸入CNN,進行特徵提取;
(4)把建議窗口映射到CNN的最後一層卷積feature map上;
(5)通過RoI pooling層使每個建議窗口生成固定尺寸的feature map;
(6)利用Softmax Loss(探測分類概率) 和Smooth L1 Loss(探測邊框回歸)對分類概率和邊框回歸(Bounding box regression)聯合訓練.
相比R-CNN,主要兩處不同:
(1)最後一層卷積層後加了一個ROI pooling layer;
(2)損失函數使用了多任務損失函數(multi-task loss),將邊框回歸直接加入到CNN網路中訓練
改進:
(1) 測試時速度慢:R-CNN把一張圖像分解成大量的建議框,每個建議框拉伸形成的圖像都會單獨通過CNN提取特徵.實際上這些建議框之間大量重疊,特徵值之間完全可以共享,造成了運算能力的浪費.
FAST-RCNN將整張圖像歸一化後直接送入CNN,在最後的卷積層輸出的feature map上,加入建議框信息,使得在此之前的CNN運算得以共享.
(2) 訓練時速度慢:R-CNN在訓練時,是在採用SVM分類之前,把通過CNN提取的特徵存儲在硬碟上.這種方法造成了訓練性能低下,因為在硬碟上大量的讀寫數據會造成訓練速度緩慢.
FAST-RCNN在訓練時,只需要將一張圖像送入網路,每張圖像一次性地提取CNN特徵和建議區域,訓練數據在GPU內存里直接進Loss層,這樣候選區域的前幾層特徵不需要再重復計算且不再需要把大量數據存儲在硬碟上.
(3) 訓練所需空間大:R-CNN中獨立的SVM分類器和回歸器需要大量特徵作為訓練樣本,需要大量的硬碟空間.FAST-RCNN把類別判斷和位置回歸統一用深度網路實現,不再需要額外存儲.
(4) 由於ROI pooling的提出,不需要再input進行Corp和wrap操作,避免像素的損失,巧妙解決了尺度縮放的問題.
(1)輸入測試圖像;
(2)將整張圖片輸入CNN,進行特徵提取;
(3)用RPN先生成一堆Anchor box,對其進行裁剪過濾後通過softmax判斷anchors屬於前景(foreground)或者後景(background),即是物體or不是物體,所以這是一個二分類;同時,另一分支bounding box regression修正anchor box,形成較精確的proposal(註:這里的較精確是相對於後面全連接層的再一次box regression而言)
(4)把建議窗口映射到CNN的最後一層卷積feature map上;
(5)通過RoI pooling層使每個RoI生成固定尺寸的feature map;
(6)利用Softmax Loss(探測分類概率) 和Smooth L1 Loss(探測邊框回歸)對分類概率和邊框回歸(Bounding box regression)聯合訓練.
相比FASTER-RCNN,主要兩處不同:
(1)使用RPN(Region Proposal Network)代替原來的Selective Search方法產生建議窗口;
(2)產生建議窗口的CNN和目標檢測的CNN共享
改進:
(1) 如何高效快速產生建議框?
FASTER-RCNN創造性地採用卷積網路自行產生建議框,並且和目標檢測網路共享卷積網路,使得建議框數目從原有的約2000個減少為300個,且建議框的質量也有本質的提高.
從上面的三張圖可以看出,Faster R CNN由下面幾部分組成:
1.數據集,image input
2.卷積層CNN等基礎網路,提取特徵得到feature map
3-1.RPN層,再在經過卷積層提取到的feature map上用一個3x3的slide window,去遍歷整個feature map,在遍歷過程中每個window中心按rate,scale(1:2,1:1,2:1)生成9個anchors,然後再利用全連接對每個anchors做二分類(是前景還是背景)和初步bbox regression,最後輸出比較精確的300個ROIs。
3-2.把經過卷積層feature map用ROI pooling固定全連接層的輸入維度。
4.然後把經過RPN輸出的rois映射到ROIpooling的feature map上進行bbox回歸和分類。
SPP-Net是出自論文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》
由於一般的網路結構中都伴隨全連接層,全連接層的參數就和輸入圖像大小有關,因為它要把輸入的所有像素點連接起來,需要指定輸入層神經元個數和輸出層神經元個數,所以需要規定輸入的feature的大小。而SPP-NET正好解決了這個問題。
如果原圖輸入是224x224,對於conv5出來後的輸出,是13x13x256的,可以理解成有256個這樣的filter,每個filter對應一張13x13的activation map.如果像上圖那樣將activation map pooling成4x4 2x2 1x1三張子圖,做max pooling後,出來的特徵就是固定長度的(16+4+1)x256那麼多的維度了.如果原圖的輸入不是224x224,出來的特徵依然是(16+4+1)x256;直覺地說,可以理解成將原來固定大小為(3x3)窗口的pool5改成了自適應窗口大小,窗口的大小和activation map成比例,保證了經過pooling後出來的feature的長度是一致的.
總結而言,當網路輸入的是一張任意大小的圖片,這個時候我們可以一直進行卷積、池化,直到網路的倒數幾層的時候,也就是我們即將與全連接層連接的時候,就要使用金字塔池化,使得任意大小的特徵圖都能夠轉換成固定大小的特徵向量,這就是空間金字塔池化的意義(多尺度特徵提取出固定大小的特徵向量)。
ROI pooling layer實際上是SPP-NET的一個精簡版,SPP-NET對每個proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采樣到一個7x7的特徵圖.對於VGG16網路conv5_3有512個特徵圖,這樣所有region proposal對應了一個7*7*512維度的特徵向量作為全連接層的輸入.
為什麼要pooling成7×7的尺度?是為了能夠共享權重。Faster RCNN除了用到VGG前幾層的卷積之外,最後的全連接層也可以繼續利用。當所有的RoIs都被pooling成(512\×7\×7)的feature map後,將它reshape 成一個一維的向量,就可以利用VGG16預訓練的權重,初始化前兩層全連接.
那麼經過何種變換才能從圖11中的窗口P變為窗口呢?比較簡單的思路就是:
注意:只有當Proposal和Ground Truth比較接近時(線性問題),我們才能將其作為訓練樣本訓練我們的線性回歸模型,否則會導致訓練的回歸模型不work(當Proposal跟GT離得較遠,就是復雜的非線性問題了,此時用線性回歸建模顯然不合理).這個也是G-CNN: an Iterative Grid Based Object Detector多次迭代實現目標准確定位的關鍵. 線性回歸就是給定輸入的特徵向量X,學習一組參數W,使得經過線性回歸後的值跟真實值Y(Ground Truth)非常接近.即.那麼Bounding-box中我們的輸入以及輸出分別是什麼呢?
如上圖中標識:
① rpn_cls:60*40*512-d ⊕ 1*1*512*18 > 60*40*92 逐像素對其9個Anchor box進行二分類
② rpn_bbox:60*40*512-d ⊕ 1*1*512*36>60*40*9*4 逐像素得到其9個Anchor box四個坐標信息
逐像素對Anchors分類標記
① 去除掉超過1000*600這原圖的邊界的anchor box
② 如果anchor box與ground truth的IoU值最大,標記為正樣本,label=1
③ 如果anchor box與ground truth的IoU>0.7,標記為正樣本,label=1
④ 如果anchor box與ground truth的IoU<0.3,標記為負樣本,label=0
剩下的既不是正樣本也不是負樣本,不用於最終訓練,label=-1
逐像素Bbox回歸糾正
除了對anchor box進行標記外,另一件事情就是計算anchor box與ground truth之間的偏移量
令:ground truth:標定的框也對應一個中心點位置坐標x ,y 和寬高w ,h
anchor box: 中心點位置坐標x_a,y_a和寬高w_a,h_a
所以,偏移量:
△x=(x -x_a)/w_a △y=(y -y_a)/h_a
△w=log(w /w_a) △h=log(h /h_a)
通過ground truth box與預測的anchor box之間的差異來進行學習,從而是RPN網路中的權重能夠學習到預測box的能力
接著進一步對Anchors進行越界剔除和使用nms非最大值抑制,剔除掉重疊的框;比如,設定IoU為0.7的閾值,即僅保留覆蓋率不超過0.7的局部最大分數的box(粗篩)。最後留下大約2000個anchor,然後再取前N個box(比如300個);這樣,進入到下一層ROI Pooling時region proposal大約只有300個。
參考文獻:
Ⅵ 求圖像校準中給定了2個模板mark點坐標後,測量出2個實際mark點,然後校準模板中其他點的演算法!
提問者: kober1161624
求圖像校準中給定了2個模板mark點坐標後,測量出2個實際mark點,然後校準模板中其他點的演算法!如題,最好能有實際驗證的代碼或者演算法,謝謝!有的話發郵箱[email protected]
Ⅶ 求魚眼鏡頭全景圖像校正演算法的matlab代碼
(一) opencv裡面攝像機標定計算內參數矩陣用的是張正友標定法,非常經典,MATLAB標定工具箱也是用的該方法。具體的標定過程可以參見張正友的原文: http://research.microsoft.com/en-us/um/people/zhang/Papers/TR98-71.pdf。或者參考博文:http://hi..com/chb_seaok/item/62179235eef8873c2e20c40b
(二) 基於opencv的攝像機標定用的主要函數有:
cvFindChessboardCorners:提取一幅圖片上的所有角點。
cvFindCornerSubPix:亞像素精確化。
cvDrawChessboardCorners:顯示角點。
cvCalibrateCamera2:標定攝像機參數,求出內參數矩陣,畸變系數,旋轉向量和平移向量。
校正主要用的函數有2個:
cvInitUndistortMap:根據cvCalibrateCamera2計算出來的內參數矩陣和畸變系數計算畸變映射。
cvRemap:根據畸變映射校正圖像。
(三)詳細的過程及參考書籍:
1、《基於OpenCV的計算機視覺技術實現》 陳勝勇,劉盛編著 科學出版社,2008;(該書用OpenCV 1.0庫,第14章詳細介紹如何用opencv進行攝像機標定,包括攝像機標定的原理,opencv相關庫函數詳細的介紹以及例子)
2、《學習OpenCV(中文版)》 於仕琪譯 清華大學出版社,2009;(OpenCV 2.0庫,第11、12章詳細介紹如何進行攝像機標定以及三維重建)
3、OpenCV的標定參數中,對於鏡頭畸變採用的方法是Brown博士在71年發表的文章中提到的。
(四)MATLAB標定也在這里提一下:
http://www.vision.caltech.e/bouguetj/calib_doc/index.html#examples,該網站有很詳細的使用說明
matlab標定工具箱來進行標定,它也是基於張正友的平面標定方法的,有誤差分析、標定結果三維重建、重投影計算角點等功能 。
Matlab中的鏡頭畸變參數採用基於Heikkil博士提出的方法,將非線性干擾因素引入到內外參數的求解過程。標定的過程需要手動選取四個角點,標定圖片拍攝的多的話,比較麻煩。
(五)實驗結果
自己買了個手機魚眼鏡頭,拍攝了16幅標定板圖片。注意拍攝的角度不要和成像平面平行。
示常式序049--攝像機標定和魚眼校正
Ⅷ 相機標定演算法之Tsai演算法
這篇文章參考了Tsai作者的原文章,原理基本相同,為了方便計算,進行了一部分計算的優化,略有不同。
Tsai標定法為了更准確的實現相機的標定,保證測量結果的精確度,所以考慮了相機的徑向畸變。這里先談一談相機徑向畸變產生的原因。
弄清楚了徑向畸變的原因,那麼現在開始切入正題。Tsai標定法的四個計算方程。
公式4:理想情況下是,(u0,v0)代表O1在u-v坐標系下的坐標,dx與dy分別表示每個像素在橫軸x和縱軸y上的物理尺寸,具體如下圖。
則圖像中的每個像素在u-v坐標系中的坐標和在x-y坐標系中的坐標之間都存在如下的關系:
但是由於需要考慮徑向畸變,所以公式改寫為
[] 所以根據平行關系,可以得到以下關系:
Ⅸ 影響攝像機標定的因素有哪些
攝像機標定是指確定攝像機的幾何和光學參數,以及攝像機相對於世界坐標系的方位。攝像機標定精度是用重投影誤差來表示,即根據標定結果計算世界坐標點的成像點坐標與真實的圖像點坐標的差值,而攝像機的標定精度的大小,直接影響著機器視覺系統的精度。
美國TEO從多年從事攝像機的生產與研發著手,為熱愛攝像機的朋友們總結了影響攝像機標定精度的主要因素,有以下幾個方面:
1、圖像處理演算法:當選擇的成像數學模型一定時,圖像坐標和世界坐標的精度是直接影響攝像機標定精度的因素。
2、標靶精度:圖像坐標:標靶特徵點的圖像處理檢測精度,目前系統採用子像素檢測技術,達到誤差小於0.02個像素的精度。
標靶:特徵點加工精度,系統標靶加工精度誤差小於0.1mm。並進行二次測量獲取更高精度的特徵點坐標值。
3、相機鏡頭標靶硬體搭配:
①同樣視場范圍內相機的解析度越大,標定精度越高;
②鏡頭決定視場范圍,標靶大小小於視場的1/5時會減小攝像機的標定精度。
4、操作技巧:
①將標靶放在測量區域內,調節好鏡頭焦距和光圈,使標靶能夠清晰成像;
②標定是將標靶放在測量區域內進行標定,在哪兒測量在那兒標定;
③標定時標靶處於靜止狀態或小幅度的晃動,減少由於相機的曝光時間引起的運動模糊造成的誤差;
④使標靶盡可能多的放置在系統測量范圍內不同位置進行標定;
⑤在測量范圍的深度方向上(Z方向)有一定的平移,或繞X軸和Y軸有一定的旋轉;
5、外界環境干擾:
①光線過亮或過暗,標靶特徵圓與背景對比度低,會引起檢測不到標靶,或檢測精度低;
②光照不均勻,使得標靶部分過亮或過暗會也引起檢測不到標靶,或檢測精度低;
攝像機標定可以分為傳統的攝像機標定方法和攝像機自標定方法兩大類。傳統的攝像機標定需要標定參照物,基本方法是在一定的攝像機模型下,通過對特定標定參照物進行圖像處理,為了提高計算精度,還需確定非線性畸變校正參數,並利用一系列數學變換公式計算及優化,來求取攝像機模型內部參數和外部參數。而自標定法利用攝像機本身參數之間的約束關系來標定,相對於傳統方法有更好的靈活性和實用性。
Ⅹ 相機標定的方法
相機標定方法有:傳統相機標定法、主動視覺相機標定方法、相機自標定法。
傳統相機標定法需要使用尺寸已知的標定物,通過建立標定物上坐標已知的點與其圖像點之間的對應,利用一定的演算法獲得相機模型的內外參數。根據標定物的不同可分為三維標定物和平面型標定物。三維標定物可由單幅圖像進行標定,標定精度較高,但高精密三維標定物的加工和維護較困難。平面型標定物比三維標定物製作簡單,精度易保證,但標定時必須採用兩幅或兩幅以上的圖像。傳統相機標定法在標定過程中始終需要標定物,且標定物的製作精度會影響標定結果。同時有些場合不適合放置標定物也限制了傳統相機標定法的應用。
目前出現的自標定演算法中主要是利用相機運動的約束。相機的運動約束條件太強,因此使得其在實際中並不實用。利用場景約束主要是利用場景中的一些平行或者正交的信息。其中空間平行線在相機圖像平面上的交點被稱為消失點,它是射影幾何中一個非常重要的特徵,所以很多學者研究了基於消失點的相機自標定方法。自標定方法靈活性強,可對相機進行在線定標。但由於它是基於絕對二次曲線或曲面的方法,其演算法魯棒性差。
基於主動視覺的相機標定法是指已知相機的某些運動信息對相機進行標定。該方法不需要標定物,但需要控制相機做某些特殊運動,利用這種運動的特殊性可以計算出相機內部參數。基於主動視覺的相機標定法的優點是演算法簡單,往往能夠獲得線性解,故魯棒性較高,缺點是系統的成本高、實驗設備昂貴、實驗條件要求高,而且不適合於運動參數位置或無法控制的場合。