簡述
在計算h 或者 f矩陣的時候需要對特徵點進行座標變換,稱之為歸一化。
原因
前輩發現計算單應矩陣時變換特徵點的座標會得到更好的效果,包括座標的平移和尺度縮放,並且這一步驟必須放在dlt之前。dlt之後再還原到原座標系。
書本指出歸一化與條件數確切的說是dtl矩陣a的第乙個和倒數第二個奇異值的比例有關。有充分證據表明在精確資料和無限精度的算術運算條件下,歸一化並不起作用,但是有雜訊存在時解將偏離其正確結果。
個人推測:類似於機器學習中需要對資料進行歸一化,減少資料因為尺度變化過大異常值等的原因影響結果。
步驟
1.將點進行平移使其形心(x,y的均值)位於原點。
2.對點進行縮放使特徵點到原點的距離為根號2,即所有點「平均」位於(1,1,1)
3.對兩幅圖進行獨立的上述變換
參考自《計算機視覺中的多檢視幾何》 3.4.4
**實現from orbslam2
/** * @brief 歸一化特徵點到同一尺度(作為normalize dlt的輸入)
* * [x' y' 1]' = t * [x y 1]' \n
* 歸一化後x', y'的均值為0,sum(abs(x_i'-0))=1,sum(abs((y_i'-0))=1
* * @param vkeys 特徵點在影象上的座標
* @param vnormalizedpoints 特徵點歸一化後的座標
* @param t 將特徵點歸一化的矩陣 左乘 */
void initializer::normalize(const vector&vkeys, vector&vnormalizedpoints, cv::mat &t)
meanx /=vkeys.size();
meany /=vkeys.size();
//第二步將所有點到原點的距離為根號2
float meandevx = 0
;
float meandevy = 0
;
for (int i = 0; i < vkeys.size(); i++)
meandevx /= vkeys.size(); //
點到原點距離的平均值
meandevy /=vkeys.size();
for (int i = 0; i < vkeys.size(); i++)
//用於還原特徵點到原始的座標系,獲得矩陣 |sx 0 -meanx*sx| 用於取逆 x 快速還原
//|0 sy -meany*sy| * y
//|0 0 1 | 1
float sx = 1.0 /meandevx;
float sy = 1.0 /meandevy;
t = mat::eye(3, 3
, cv_32f);
t.at
(0, 0) =sx;
t.at
(0, 2) = -meanx *sx;
t.at
(1, 1) =sy;
t.at
(1, 2) = -meany *sy;
t.at
(2, 2) = 1
;}
特徵歸一化
我們在衡量一些事物時,我們總是不能同等程度的看待各個特徵,無法對這個事物做出準確的衡量,即我們沒有將各個特徵量化到統一的區間。為了解決這樣的問題,我們引出了特徵歸一化 目錄 特徵歸一化的概念 特徵歸一化必要性 資料標準化的意義 資料標準化的方法 資料的標準化 normalization 是將資料按比...
特徵工程 特徵歸一化
為了消除資料特徵之間的量綱影響,需要對特徵進行歸一化 normalization 處理,使得不同特徵處於同乙個數量級,具有可比性 2.1 線性函式歸一化 min max scaling 對原始資料進行線性變換,使結果對映到 0,1 的範圍內,實現對原始資料的等比縮放。歸一化公式 其中,x為原始資料,...
特徵歸一化優點
資料的標準化 normalization 是將資料按比例縮放,使之落入乙個小的特定區間。在某些比較和評價的指標處理中經常會用到,去除資料的單位限制,將其轉化為無量綱的純數值,便於不同單位或量級的指標能夠進行比較和加權其中最典型的就是資料的歸一化處理,即將資料統一對映到 0,1 區間上。1 提公升收斂...