本文轉自徐飛翔的“【多視角立體視覺系列】 conic圓錐線和quadric二次曲錐面的定義和應用 ”
版權聲明:本文為博主原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接和本聲明
圓錐線
定義我們暫且不管計算機視覺和攝像機成像的這方面的應用背景,在數學的角度上先描述下圓錐線。圓錐線(conic) 首先是一種在二維平面上的二維點的軌跡,在歐幾里德幾何中,圓錐線主要分為三種:雙曲線(hyperbola),橢圓線(ellipse),拋物線(parabola)。名字很熟悉,在高中大家都應該或多或少學過這些幾何,而這些不同的曲線之所以都被稱之為圓錐線的原因是,它們都可以看成是不同方向的平面切割圓錐體形成的相交平面的邊緣的軌跡,如Fig 1.1所示。我們將會發現,這些不同的圓錐線在投影變換(projective transformation)下都是等價的,這個也就是我們指的“不同的角度下觀察”的意思,投影變換可以描述這個過程。
Fig 1.1 圓錐線,用不同方向的平面切割圓錐體,就形成了不同的圓錐曲線,我們會發現,這里所謂的不同方向,其實指的是不同的方向去觀察該圓錐體,這點和我們用相機在不同方向成像是異曲同工的,因此在立體視覺中會引入這個概念。
那么,作為解析幾何的角度,我們嘗試用代數的形式描述這類二次曲線,我們有:
其中曲線軌跡上的每個點為,如果用齊次化坐標的形式表達它[1],令
即是
? ,那么我們把(1.1)轉成(1.2),有:
用矩陣形式表達就是:
我們注意到描述一個圓錐線,在代數角度下用一個對稱矩陣就夠了,其矩陣的自由度為5,為什么是5而不是6呢?這里不是有a,b,c,d,e,f六個未知參數嗎?那是因為對于一個圓錐線來說,其尺度因子是不重要的,畢竟我們的等式右邊是個0,可以除去除了0之外的任意數,因此一般可以對矩陣做歸一化處理,如:
因此自由度就只有5了。因此我們發現,只需要用五個點,就可以確定一個圓錐線,聯立方程:
可以發現,圓錐曲線的解是這個矩陣的零向量[2]。
圓錐線的切線
在幾何中,我們經常需要使用圓錐線的切線方程,在齊次坐標系的表示下,這種表示特別簡單,,其中
為圓錐線的對稱矩陣,
是齊次坐標下的點坐標,并且該點在圓錐線之上。這點其實很容易證明:
首先是經過點
的,有
,所以這個點同時在直線和圓錐線上,接下來我們證明只有一個交點即可。假設還有另外一個交點
,那么我們有
并且因為直線也經過交點
,有
。因此不難得到(1.6)也成立。
那么也就是說,整個直線兩點之間的連線的任意點都在圓錐線上,因此這兩個點只能是同一個點,即是交點。
對偶圓錐線
我們之前定義的圓錐線是以如何構成該圓錐線的點的軌跡來定義的,因此形式中的
是點。然而,我們知道用向量的形式既可以表示點,也能表示直線,如果這里的不是點,而是直線,那么方程形式就變成了
,而數值上來看是和點形式一樣的,但是幾何含義卻完全不同了。在這種情況,如Fig 1.2(b)所示,是無數直線的不斷運動的軌跡的切線交點構成了整個圓錐線的軌跡。這個稱之為對偶圓錐線(dual conics)。同樣的,對偶圓錐線也是用對稱的
矩陣來表示,表示為
。利用共軛矩陣的性質,我們可以求出以點形式的圓錐線
對應的對偶圓錐線的矩陣為
。這個其實很容易推導,我們知道經過圓錐線的
的切線為
,反過來,我們有
,那么我們有:
點變換后的圓錐線
假設新的點 ,那么新點的圓錐線可以表示為:
因此有:
二次曲錐面
我們上一章談到的圓錐線是在二維平面上定義出來的,那么在三維空間中,二維的圓錐線就擴展成為了二次曲錐面(quadric)。其數學形式類似(1.3),可以表達成
類似于圓錐線,二次曲錐面的自由度為9,去掉了尺度因子。同樣,如果X \mathbf{X}X在二次曲錐面上,其切面可以表示為。與圓錐線不同的是,平面與二次曲錐面的交疊軌跡不是點,而是一個圓錐線
。當然,二次曲錐面也有其對偶形式,就如同對偶圓錐線一樣,表示為
,其中的
是
的共軛矩陣,一般是
。 如圖Fig2.1所示,我這里貼了幾張不同類型的二次曲錐面,我們可以發現,曲錐面的形式要比圓錐線復雜很多。
點變換后的二次曲錐面同圓錐線,假設有點變換 ,那么有
。
應用我們在計算機視覺特別是成像中,我們會發現對物體的一些變換,可以體現到對圓錐線或者二次曲錐面的變換上,方便我們分析問題,本文作為預備知識,僅僅介紹了圓錐線和二次曲錐面,先不考慮其他內容了。我們后面的章節再見。
Reference
[1]. https://blog.csdn.net/LoseInVain/article/details/102756630
[2]. https://en.wikipedia.org/wiki/Null_vector
[3]. Hartley R, Zisserman A. Multiple View Geometry in Computer Vision[J]. Kybernetes, 2008