矩的概念、意義以及在SLAM中的應用
矩
矩的理解
物理意義
在物理學中,矩是表示距離和物理量乘積的物理量,表徵物體的空間分佈。由其定義,矩通常需要一個參考點(幾點或參考系)來定義距離。如力和參考點距離乘積得到的力矩(通常稱為扭矩),原則上任何物理量和距離相乘都會產生力矩,常用的量包括力、質量和電荷分佈。
單個點的力矩:
\[\mu_n=r^nQ \]多個點則是積分的空間密度
\[\mu_n=\int r^n\rho(r)dr \]如果點表示質量,則第零矩是總質量,一階矩是中心,二階矩是轉動慣量
\[I=r^2m \] \[\sum_ir_i^2m_i \]還有一個多極矩的概念,涉及到極座標系和球面座標,詳見
數學意義
矩是物體形狀識別的重要引數指標。在統計學中,矩表徵隨機量的分佈。如一個“二階矩”在一維上可測量其“寬度”,在更高階的維度上由於其使用於橢球的空間分佈,我們還可以對點的雲結構進行測量和描述。其它矩用來描述諸如與均值的偏差分佈情況(偏態),或峰值的分佈情況(峰態)
定義在實數域的是函式相對於值c的n階矩為
\[\mu_{n}^{'}=\int_{-\infty}^{\infty}(x-c)^{n}f(x)dx \]如果點表示概率密度,則第零階矩表示總概率,1,2,3階矩依次為以下三項。數學中的概念與物理學中矩的概念密切相關。
- 期望(Expectation)
隨機變數的期望定義為其一階原點矩:
\[E(x)=\int_{-\infty}^{\infty}xf(x)dx \]在方差等定義中,期望也變成隨機變數的“中心”。
顯然,任何隨機變數的一階中心矩為0。對於以下二階及更高階的劇,通常使用中心距(圍繞平均值c的矩,均值是一階矩),而不是原點矩,因為中心距更能清楚地體現關於分佈形狀的資訊。
- 方差(Variance)
隨機變數的方差定義為其二階中心矩:
\[Var(x)=\int_{-\infty}^{\infty}[x-E(x)]^2f(x)dx \]- 歸一化矩
歸一化n階中心矩或者說標準矩,是n階中心矩除以標準差\(\sigma^n\)
這些歸一化矩是無量綱值,表示獨立於任何尺度的線性變化的分佈。舉個例子,對於電訊號,一階矩是其DC(直流)電平,二階矩與平均功率成比例。
- 偏態(Skewness)
隨機變數的偏態(衡量分佈不對稱性)定義為其三階中心矩:
\[S(x)=\int_{-\infty}^{\infty}[x-E(x)]^3f(x)dx \]需要注意的是,任何對稱分佈偏態為0,歸一化三階矩被稱為偏斜度,向左偏斜(分佈尾部在左側較長)具有負偏度(失效率資料常向左偏斜,如極少量的燈泡會立即燒壞),向右偏斜分佈(分佈尾部在右側較長)具有正偏斜度(工資資料往往以這種方式偏斜,大多數人所得工資較少)。
- 峰度(Kurtosis)
隨機變數的峰態被定義為其四階中心矩:
\[K(x)=\int_{-\infty}^{\infty}[x-E(x)]^4f(x)dx \]一般隨機變數的峰度定義為其四階矩與方差平方(二階中心矩平方)的比值再減3,減3是為了讓正態分佈峰度(正態分佈的峰度值為3)為0,這也被稱為超值峰度:
\[K(x)=\frac{\int_{-\infty}^{\infty}[x-E(x)]^4f(x)dx}{\sigma^2}-3 \]峰度表示分佈的波峰和尾部與正態分佈的區別,峰度有助於初步瞭解資料分佈的一般特徵。
完全符合正態分佈的資料峰度值為0,且正態分佈曲線被稱為基線。如果樣本峰度顯著偏離0,就可以判斷次資料不是正態分佈。
如果峰度大於3(超值峰度大於0),峰的形狀比較尖,比正態分佈的峰要陡峭,如下圖中的正峰度。
峰度是衡量實數隨機變數概率分佈的峰態。峰度高就意味著方差增大是由低頻度的大於或小於平均值的極端差值引起的
- 混合矩
混合矩是多個變數的矩,比如協方差,協偏度,協峰度。但協偏度和協峰度存在多個。
- 中心轉換
由於:
\[(x-b)^n=(x-a+a-b)^n=\sum_{i=0}^{n} \left( \begin{array}{} c \\ r \end{array} \right) (x-a)^{i}(a-b)^{n-i} \]所以:
\[E[(x-b)^n]=\sum_{i=0}^{n}\left(\begin{array}{}c\\r\end{array}\right)E[(x-a)^i](a-b)^{n-i} \]- 累加性
當x和y是獨立變數時,
\[m_1(x+y)=m_1(x)+m_1(y) \\ Var(x+y)=Var(x)+Var(y) \\ \mu_3(x+y)=\mu_3(x)+\mu_3(y) \]- 樣本矩
矩常常通過樣本矩來估計,這種方法不需要先估計其概率分佈
\[\mu_n^i\approx\frac{1}{N}\sum_{i=1}^{N}X_i^n \]對於任何樣本大小,原始樣本矩的期望值等於群體的k階矩(若存在)
矩的擴充套件
\(E(X^k)\)為k階原點矩
\(E(|X|^k)\)為k階絕對矩
\(E((X-E(X))^k)\)為k階中心矩
\(E(|X-E(X)|^k)\)為k階絕對中心矩
ORB-SLAM2中的絕對矩
ORB-SLAM2的initializer.cc中,計算單應矩陣和基礎矩陣前對特徵點的座標進行了標準化。對(x,y)進行標準化就是將分別將x和y乘以x方向和y方向的一階絕對矩的倒數
void Initializer::Normalize(const vector<cv::KeyPoint> &vKeys, vector<cv::Point2f> &vNormalizedPoints, cv::Mat &T)
{
float meanX = 0;
float meanY = 0;
const int N = vKeys.size();
// 將輸出的vector設定成和輸入等長
vNormalizedPoints.resize(N);
for (int i = 0; i < N; i++)
{
meanX += vKeys[i].pt.x;
meanY += vKeys[i].pt.y;
}
// 計算所有點座標的平均值
meanX = meanX / N;
meanY = meanY / N;
// 計算絕對矩
float meanDevX = 0;
float meanDevY = 0;
for (int i = 0; i < N; i++)
{
vNormalizedPoints[i].x = vKeys[i].pt.x - meanX;
vNormalizedPoints[i].y = vKeys[i].pt.y - meanY;
meanDevX += fabs(vNormalizedPoints[i].x);
meanDevY += fabs(vNormalizedPoints[i].y);
}
meanDevX = meanDevX / N;
meanDevY = meanDevY / N;
// 標準化因子
float sX = 1.0 / meanDevX;
float sY = 1.0 / meanDevY;
// 標準化
for (int i = 0; i < N; i++)
{
// x’=(x - meanX) * sX
// y'=(y - menaY) * sY
vNormalizedPoints[i].x = vNormalizedPoints[i].x * sX;
vNormalizedPoints[i].y = vNormalizedPoints[i].y * sY;
}
// 構建標準化矩陣
T = cv::Mat::eye(3, 3, CV_32F);
T.at<float>(0, 0) = sX;
T.at<float>(1, 1) = sY;
T.at<float>(0, 2) = -meanX * sX;
T.at<float>(1, 2) = -meanY * sY;
}
影象意義
在影象處理中,計算機視覺和相關領域中,一個影象矩是影象畫素強度的某個特定加權平均(矩),或者是這樣的矩的函式,通常選擇具有一些有吸引力的特性或解釋。
影象矩對於分割之後物件的描述是有用的。通過影象矩得到的影象的簡單屬性包括面積(或總強度),其質心和關於其方向的資訊。
- 原點矩
對於一個二維連續函式\(f(x,y)\),第\((p+q)\)個點的矩(原點矩)被定義為
\[M_{pq}=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}x^py^qf(x,y)dxdy\quad\quad p,q=0,1,2,... \]照這個思路,畫素強度為\(I(x,y)\)的灰度圖,原點矩為:
\[M_{ij}=\sum_x\sum_yx^iy^jI(x,y) \]有些情況下,也可以把影象看成概率密度函式來計算\(M_{ij}=\sum_x\sum_yx^iy^jI(x,y)\)
唯一性定理(Hu[1962])指出,如果\(f(x,y)\)是分段連續的並且僅在xy平面的有限部分中具有非零值,則存在所有階的矩,並且矩序列\(M_{pq}\)由\(f(x,y)\)唯一確定。
反之,中心矩\(M_{pq}\)唯一確定\(f(x,y)\)。
在實踐中,影象被概括為具有幾個較低階矩的函式。
舉個例子,Opencv中moment函式從原點矩中獲得的簡單影象屬性
面積(二值圖)和灰度和(灰度圖):M00
質心:\(\bar{x},\bar{y}=\frac{M10}{M00},\frac{M01}{M00}\)
vector<Moments> mu(contours.size() );
vector<Point2f> mc(contours.size() );
mu[c] = moments( contours[i], false );
double area=mu[c].m00 ;
mc[c] = Point2f( mu[c].m10/mu[c].m00 , mu[c].m01/mu[c].m00 );
灰度質心法
ORB特徵點正是採用灰度質心法使得FAST角點具有了旋轉不變性。
首先我們將特徵點(x,y)領域的矩定義為:(和影象畫素強度的原點矩公式相同,灰度質心法也叫強度質心法)
\[m_{pq}=\sum_{x,y}x^py^qI(x,y) \]通過矩,我們可能找到質心:
\[C=(\frac{m_{10}}{m_{00}},\frac{m_{01}}{m_{00}}) \]我們可以構造一個從角的中心 \(O\) 到質心\(OC\)的向量,那麼該特徵點鄰域的方向描述就是:
\[\theta=atan2(m_{01},m_{10}) \]即:我們
- 中心矩
中心矩被定義為:
\[\mu_{pq}=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}(x-\bar{x})^p(y-\bar{y})^qf(x,y)dxdy \quad\quad \bar{x}=\frac{M_{10}}{M_{00}},\bar{y}=\frac{M_{01}}{M_{00}} \]如果是數字影象,則等式變為:
\[\mu_{pq}=\sum_x\sum_y(x-\bar{x})^p(y-\bar{y})^qf(x,y) \]3階及以下中心矩依次為:
\[\mu_{00}=M_{00},\\ \mu_{01}=0,\\ \mu_{10}=0,\\ \mu_{11}=M{11}-\bar{x}M_{01}=M_{11}-\bar{y}M_{10},\\ \mu_{20}=M_{20}-\bar{x}M_{10},\\ \mu_{02}=M_{02}-\bar{y}M_{01},\\ \mu_{21}=M_{21}-2\bar{x}M_{11}-\bar{y}M_{20}+2\bar{x}^2M_{01},\\ \mu_{12}=M_{12}-2\bar{y}M_{11}-\bar{x}M_{02}+2\bar{y}^2M_{10},\\ \mu_{30}=M_{30}-3\bar{x}M_{20}+2\bar{x}^2M_{10},\\ \mu_{03}=M_{03}-3\bar{y}M_{02}+2\bar{y}^2M_{01}, \]總計出來就是
\[\mu_{pq}=\sum_{x}\sum_{y}\left(\begin{array}{}p\\m\end{array}\right)\left(\begin{array}{}q\\n\end{array}\right)(-\bar{x})^{p-m}(-\bar{y})^{q-n}M_{mn} \]中心矩具有平移不變性
\[\mu_{20}^{'}=\frac{\mu_{20}}{\mu_{00}}=\frac{M_{20}}{M_{00}}-\bar{x}^2\\ \mu_{02}^{'}=\frac{\mu_{02}}{\mu_{00}}=\frac{M_{02}}{M_{00}}-\bar{y}^2\\ \mu_{11}^{'}=\frac{\mu_{11}}{\mu_{00}}=\frac{M_{11}}{M_{00}}-\bar{x}\bar{y}\\ \]舉個例子
影象方向的資訊可以通過首先使用二階中心矩來構造協方差矩陣到處(底下這個式子很明顯就是矩陣降維)
其中,影象上一點\(I(x,y)\)的協方差矩陣為
\[cov[I(x,y)]=\left[\begin{array}{}\mu_{20}^{'} & \mu_{11}^{'}\\ \mu_{11}^{'} & \mu_{02}^{'} \end{array}\right] \]矩陣的特徵向量對應於影象強度的長軸和短軸,因此可以與最大特徵值相關聯的特徵向量的角度朝向最靠近該特徵向量的軸提取取向。可以證明,該角度 \(\theta\) 可以由以下公式得出:
\[\theta=\frac{1}{2}arctan(\frac{2\mu_{11}^{'}}{\mu_{20}^{'}-m\mu_{02}^{'}}) \quad \mu_{20}^{'}-\mu_{02}^{'}\neq0 \]協方差矩陣的特徵值可以表示為:
\[\lambda_i=\frac{\mu_{20}^{'}}{2}\pm\sqrt{\frac{4\mu_{11}^{'}+(\mu_{20}^{'}-\mu_{02}^{'})^2}{2}} \]且特徵值與特徵向量軸的長度的平方成正比例。特徵值的幅度的相對差異體現了影象的偏心特徵或者說它多細長。偏心率是:
\[\sqrt{1-\frac{\lambda_2}{\lambda_1}} \]- 矩不變性
矩因為其在影象分析上的應用廣為人知,由於他們可以被用於匯出關於特徵變換類的不變數。
在這種情況下,不變矩這個術語經常被濫用。然而,雖然矩不變數是從矩中形成的不變數,不變數本身的唯一矩是中心矩。
注意下面的詳細的不變數僅在連續區間保持不變性。在離散區間,尺度和旋轉都不能很好地形成,離散影象轉換時近似的,且變換不可逆。因此,當描述離散影象中的形狀是,這些不變數僅是近似不變的。
- 平移不變性
通過構造,任意階中心矩\(\mu_{ij}\)相對於平移都是不變的。
- 尺度不變性
相對平移和尺度的不變數\(\eta_{ij}\)可以通過適當的縮放零階中心矩陣從中心矩構建
\[\eta_{ij}=\frac{\mu_{ij}}{\mu_{00}^{1+\frac{i+j}{2}}} \quad i+j\ge2 \]注意平移不變數僅僅在中心矩時直接跟隨使用
- 旋轉不變性
正如Hu等人的工作所示,可以構建關於平移、放縮和旋轉的不變數
\[I1=\eta_{20}+\eta_{01}\\ I2=(\eta_{20}-\eta_{02})^2+4\eta_{11}^{2}\\ I3=(\eta_{30}-3\eta_{12})^2+(3\eta_{21}-\eta_{03})^2\\ I4=(\eta_{30}+\eta_{12})^2+(\eta_{21}+\eta_{03})^2\\ I5=(\eta_{30}-3\eta_{12})(\eta_{30}+\eta_{12})[(\eta_{30}+\eta_{12})^2-3(\eta_{21}+\eta_{03})^2]+(3\eta_{21}-\eta_{03})(\eta_{21}+\eta_{03})[3(\eta_{30}+\eta_{12})^2-(\eta_{21}+\eta_{03})^2]\\ I6=(\eta_{20}-\eta_{02})[(\eta_{30}+\eta_{12})^2-(\eta_{21}+\eta_{03})^2]+4\eta_{11}(\eta_{30}+\eta_{12})(\eta_{21}+\eta{03})\\ I7=(3\eta_{21}-\eta_{03})(\eta_{30}+\eta_{12})[(\eta_{30}+\eta_{12})^2-3(\eta_{21}+\eta_{03})^2]-(\eta_{30}-3\eta_{12})(\eta_{21}+\eta_{03})[3(\eta_{30}+\eta_{12})^2-(\eta_{21}+\eta_{03})^2] \]這就是眾所周知的HU矩不變數。
第一個,I1,類似於圍繞影象的質心的轉動慣量,畫素強度類似於物理密度。
最後一個,I7,傾斜不變性,有能力區分其它相同影象的映象(不懂)
J.Flusser提出了推導完整和獨立的旋轉矩不變數集合的一般理論。他所傳統的Hu矩陣既不獨立也不完全。I3並不是非常有用,因為它不獨立,依賴於其它不變數。原始的Hu集合中有一個缺失的三階獨立不變矩。
\[I8=\eta_{11}[(\eta_{30}+\eta_{12})^2-(\eta_{03}+\eta_{21})^2]-(\eta_{20}-\eta_{02})(\eta_{30}+\eta_{12})(\eta_{03}+\eta_{21}) \]後來,J.Flusser和T.Suk就專門研究N旋轉對稱形狀的情況。
點雲意義
PCL點雲庫關於矩的使用有兩個,一個是pcl::MomentInvariantsEstimation
,估計每個3D點處的三個矩不變數(j1,j2,j3)
。另一個就是pcl::MomentOfInertiaEstimation
類。可以獲得基於偏心率和轉動慣量的描述符。還能提取點雲的對齊軸和定向邊界框。
Note:提取的邊界框不可能是最小可能的邊界框。
先將特徵提取的idea。首先計算點雲的協方差矩陣,並提取其特徵值和向量。你也可以想象成歸一化合成的特徵向量,且總是形成右手座標系(主特徵向量表示x軸,次向量表示z軸)。下一步執行迭代。每次迭代過程中,主特徵向量旋轉。旋轉順序不變,且圍繞其它特徵向量執行。這提供了點雲的旋轉不變性。因此,我們把這個旋轉的主向量當成當前軸。
對於每個當前軸,計算轉動慣量。另外,當前軸已被用來計算偏心率。因此,當前向量被看成平面法向量,並且講輸入的點雲投影到它上面。根據所獲得的投影計算偏心率。
當然,這個類還提供了獲取Axis Aligned Bounding Box(AABB)和Oriented bounding box(OBB)的介面。將AABB作為特徵向量計算OBB。pcl提供了一個示例
參考:
- https://www.zhihu.com/question/23236070
- https://zh.wikipedia.org/wiki/矩_(數學)
- https://en.wikipedia.org/wiki/Moment_(mathematics)
- https://en.wikipedia.org/wiki/Moment_(physics)
- https://en.wikipedia.org/wiki/Image_moment
- https://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/SHUTLER3/CVonline_moments.html