assignment
楔子
函數是「對應」與「變換」兩種概念的結合。對應:兩堆東西一一連結。變換:一個東西變成另一個東西。
接下來進一步討論「指派」與「對齊」。指派:找到對應關係。對齊:找到變換函數。
assignment(correspondence)
「指派」。已知甲堆數據、乙堆數據,求得對應方式。
指派之後,進一步求得距離總和,作為兩堆數據的差異多寡。
隨隨便便就能想到一大堆對應方式。佗一个較好?我曷知。
一、甲堆到乙堆,距離最近的那兩筆數據。 二、窮舉甲堆到乙堆的所有兩兩配對。 三、窮舉甲堆每一筆數據,分別找到乙堆之中距離最近的那筆數據。 四、甲乙對調。 五、三四相加。 六、三四聯集。 七、三四交集。 八、距離最近改為距離前K短。
進階問題optimal transport:採用特殊的距離函數。
one-to-one assignment(bipartite matching)
一配一。可獨身,不重婚。
當兩堆數據一樣多,稱作bijective assignment或perfect bipartite matching。
請見本站文件「bipartite matching」。
nearest neighbor assignment
窮舉甲堆每一筆數據,分別找到乙堆之中距離最近的那筆數據。
尋找最近點,簡易的方式是窮舉法,進階的方式是乙堆套用分割區域的資料結構,諸如uniform grid、kd-tree。
請見本站文件「region」。
alignment
alignment
「對齊」。已知甲堆數據、乙堆數據,求得變換函數。
變換函數變化無窮,總是可以對齊數據,缺乏討論意義。只好增加限制,採用特定的變換函數。
採用特定的變換函數,強硬地對齊數據,通常無法完美密合。只好採用最佳化的套路:甲堆實施變換、乙堆,令兩者差異盡量小。
為了更密合,有人採取對稱方式:甲堆正向變換與乙堆的差異、乙堆反向變換與甲堆的差異,正向反向一併計入。
為了衡量差異,必須指定指派類型、誤差類型。大家習慣採用最佳一對一指派、距離平方總和。
為了節省計算時間,甚至預定指派結果。大家習慣讓兩堆數據一樣多,依照索引值一一對應。
進階問題optimal registration:多堆數據的組裝。
affine alignment
兩堆數據一樣多,依照索引值一一對應。
solve Apᵢ + b = p̕ᵢ minimize sum ‖p̕ᵢ - (Apᵢ + b)‖² minimize ‖Y - (AX + B)‖ꜰ²
transformation matrix A₃ₓ₃ = (Y - Ȳ) X⁺ = (Y - Ȳ) Xᵀ(XXᵀ)⁻¹ translation vector b₃ₓ₁ = mean(p̕ᵢ - Apᵢ) = mean(p̕ᵢ) - A mean(pᵢ)
大家習慣在最初添加一個位移,調整甲堆數據。原本那個位移,移項至另一側,調整乙堆數據。仍是仿射變換。
優點:數學公式更漂亮,兩堆數據各自中心化。優點:縮小數值範圍,減少浮點數誤差,也避免浮點數溢位。缺點:計算步驟較多。
solve A(pᵢ - t) = (p̕ᵢ - t̕) minimize sum ‖(p̕ᵢ - t̕) - A(pᵢ - t)‖² minimize ‖(Y - T̕) - A(X - T)‖ꜰ²
transformation matrix A₃ₓ₃ = (Y - Ȳ)(X - X̄)⁺ = Ỹ X̃⁺ = ỸX̃ᵀ(X̃X̃ᵀ)⁻¹ translation vector t₃ₓ₁ = mean(pᵢ) translation vector t̕₃ₓ₁ = mean(p̕ᵢ)
一次迴歸是仿射對齊:甲堆是多維數據,乙堆是一維數據。
《Image Deformation Using Moving Least Squares》
similar alignment
兩堆數據一樣多,依照索引值一一對應。
相似變換:旋轉、縮放、位移。大家習慣在最初添加一個位移。
solve sR(pᵢ - t) = (p̕ᵢ - t̕) minimize sum ‖(p̕ᵢ - t̕) - sR(pᵢ - t)‖² minimize ‖(Y - T̕) - sR(X - T)‖ꜰ²
covariance matrix C₃ₓ₃ = (Y - Ȳ)(X - X̄)ᵀ = Ỹ X̃ᵀ = U Σ Vᵀ rotation matrix R₃ₓ₃ = U Vᵀ scaling factor s₁ₓ₁ = tr(Σ) / ‖X̃‖ꜰ² ≈ ‖Ỹ‖ꜰ / ‖X̃‖ꜰ translation vector t₃ₓ₁ = mean(pᵢ) translation vector t̕₃ₓ₁ = mean(p̕ᵢ)
http://perception.inrialpes.fr/people/Horaud/Courses/pdf/Horaud_3DS_6.pdf
證明請見本站文件「orthogonal Procrustes problem」,其中A換成X、B換成Y。位移不影響最佳旋轉與最佳縮放,位移最後處理。
偵測鏡射:檢查旋轉矩陣的determinant,無鏡射det(R) = +1,有鏡射det(R) = -1。
去除鏡射:最小的奇異值變號。因為旋轉矩陣公式沒有納入奇異值,所以改成對應的奇異向量變號(左右擇一變號)。
《Estimating 3-D rigid body transformations: a comparison of four major algorithms》
rigid alignment(Procrustes analysis)
同前,倍率為1。
principal scaling alignment【尚待確認】
特徵縮放變換:在互相垂直的方向上進行縮放?
x̕ = UΣVᵀx + t (U and V are orthonormal, Σ is nonnegative diagonal)
數據X變數據Y,最近似特徵縮放變換是ỸX̃ᵀ?
minimize ‖(Y - T̕) - M(X - T)‖ꜰ² principal scaling matrix M₃ₓ₃ = ỸX̃ᵀ = UΣVᵀ
YXᵀ可以解讀成先除以X、再乘以Y、得到比率Y/X。
此定理相當強,但是從未有人提到。靠你了。
homography alignment(direct linear transformation)
兩堆數據一樣多,依照索引值一一對應。
位移併入變換矩陣。
歐氏幾何化:新添尺度、實施變換、隱藏尺度。
尺度不是一次函數。消掉尺度,成為真正的一次函數,始能援引一次函數的數學工具。推導過程的第一步,就是消掉尺度。
solve dehomogenize(P homogenize(pᵢ)) = p̕ᵢ minimize sum ‖p̕ᵢ - dehomogenize(P homogenize(pᵢ))‖² minimize ‖Y - dehomogenize(P homogenize(X))‖ꜰ²
solve dehomogenize(P homogenize(p)) = p̕ 單筆數據 solve dehomogenize(P pₕ) = p̕ ⎡ —— v₁ —— ⎤ ⎡ x ⎤ ⎡ x̕ ⎤ dehomogenize( ⎢ —— v₂ —— ⎥ ⎢ y ⎥ ) = ⎣ y̕ ⎦ ⎣ —— v₃ —— ⎦ ⎣ 1 ⎦ ⎡ v₁∙pₕ ⎤ ⎡ x̕ ⎤ dehomogenize( ⎢ v₂∙pₕ ⎥ ) = ⎣ y̕ ⎦ ⎣ v₃∙pₕ ⎦ ⎰ (v₁∙pₕ) / (v₃∙pₕ) = x̕ ⎱ (v₂∙pₕ) / (v₃∙pₕ) = y̕ ⎰ (v₁∙pₕ) = x̕ (v₃∙pₕ) ⎱ (v₂∙pₕ) = y̕ (v₃∙pₕ) ⎰ (v₁∙pₕ) - x̕ (v₃∙pₕ) = 0 ⎱ (v₂∙pₕ) - y̕ (v₃∙pₕ) = 0 ⎰ pₕᵀv₁ - x̕ pₕᵀv₃ = 0 ⎱ pₕᵀv₂ - y̕ pₕᵀv₃ = 0 ⎡ pₕᵀ 0 -x̕ pₕᵀ ⎤ ⎡ v₁ ⎤ ⎣ 0 pₕᵀ -y̕ pₕᵀ ⎦ ⎢ v₂ ⎥ = 0 ⎣ v₃ ⎦ ⎡ p₁ₕᵀ 0 -x̕₁ p₁ₕᵀ ⎤ ⎢ 0 p₁ₕᵀ -y̕₁ p₁ₕᵀ ⎥ ⎡ v₁ ⎤ ⎢ p₂ₕᵀ 0 -x̕₂ p₂ₕᵀ ⎥ ⎢ v₂ ⎥ = 0 多筆數據 ⎢ 0 p₂ₕᵀ -y̕₂ p₂ₕᵀ ⎥ ⎣ v₃ ⎦ ⎣ : : : ⎦ A₂ₙₓ₉ v₉ₓ₁ solve Av = 0 homogeneous linear equation minimize ‖Av‖² subject to ‖v‖² = 1 射影幾何不在乎倍率, 令‖P‖ꜰ² = ‖v‖² = 1。 v = E₁ (AᵀA = EΛEᵀ) 最小的特徵值的特徵向量 v = V₁ (A = UΣVᵀ) 最小的奇異值的右奇異向量
奇異值分解A = UΣVᵀ,最小的奇異值的右奇異向量V₁,切斷並排得到P。
《As-Projective-As-Possible Image Stitching with Moving DLT》
correlation alignment(principal component analysis)
兩堆數據不知道對應關係,甚至不一樣多。
兩堆數據各自求得主成分,然後對齊主成分。
變換過程:位移、旋轉、縮放、旋轉、位移。
covariance matrix C₃ₓ₃ = (X - X̄)(X - X̄)ᵀ = X̃X̃ᵀ = EDEᵀ covariance matrix C̕₃ₓ₃ = (Y - Ȳ)(Y - Ȳ)ᵀ = ỸỸᵀ = E̕D̕E̕ᵀ rotation matrix R₃ₓ₃ = E⁻¹ = Eᵀ rotation matrix R̕₃ₓ₃ = E̕ scaling matrix S₃ₓ₃ = sqrt(D⁻¹) scaling matrix S̕₃ₓ₃ = sqrt(D̕) transformation matrix A₃ₓ₃ = E̕ sqrt(D̕ D⁻¹) Eᵀ translation vector t₃ₓ₁ = mean(pᵢ) translation vector t̕₃ₓ₁ = mean(p̕ᵢ)
data centering X̃₃ₓ₃ = X - X̄ = X̃ = UΣVᵀ data centering Ỹ₃ₓ₃ = Y - Ȳ = Ỹ = U̕Σ̕V̕ᵀ transformation matrix A₃ₓ₃ = U̕Σ̕ Σ⁻¹Uᵀ translation vector t₃ₓ₁ = mean(pᵢ) translation vector t̕₃ₓ₁ = mean(p̕ᵢ)
http://www.cs.tau.ac.il/~dcor/Graphics/cg-slides/svd_pca.pptx http://www.cse.wustl.edu/~taoju/cse554/lectures/lect07_Alignment.pdf
兩種做法:有方位主成分、無方位主成分。
一、有方位主成分:兩堆數據各自求得共變異矩陣,實施特徵分解。兩邊的特徵向量,依照特徵值大小一一對應。
位移:數據中心的差距。旋轉:特徵向量的夾角。縮放:特徵值平方根的比例。
偵測鏡射:檢查旋轉矩陣的determinant,無鏡射det(R) = +1,有鏡射det(R) = -1。去除鏡射:最小的特徵值的特徵向量,變號顛倒方向,誤差增加最少。
亦得採用最小的奇異值的左奇異向量。三維的情況下,我不確定奇異值分解是否佔到便宜。
二、無方位主成分:主成分重新指定方位。二維有兩種方位,三維有四種方位。兩堆數據的主成分,分別窮舉所有方位,找到旋轉角度最小、也就是trace(R)最小的旋轉矩陣。
inlier / outlier
真實世界的數據並非完美,常有例外。
兩堆數據不一樣多,不知道對應關係。其中有些點是例外,不適合納入計算。
演算法(RANSAC)
一、甲堆隨機抓幾點,乙堆隨機抓幾點,點數一樣多,推定它們依序一一對應。 換句話說,隨機的、限量的、雙射指派。 二、依照對應關係,實施對齊,求得對齊函數。 三、計算「甲堆套用函數」與「乙堆」的誤差大小。 四、重複上述步驟,取誤差最小者。
其實就是隨機窮舉法。
演算法(iterative closest point)
一、初始化: 甲、實施相關對齊(PCA),求得對齊函數。 乙、甲堆套用函數。讓甲堆靠近乙堆。 二、重複此步驟,直到最近點不變為止: 甲、實施最近鄰指派:甲堆每一點找到在乙堆的最近點。暫時無視乙堆其餘點。 乙、依照對應關係,實施對齊,求得對齊函數。 丙、甲堆套用函數。讓甲堆更靠近乙堆。 三、甲堆套用的所有函數,依序複合就是最理想的對齊函數。 甲、多個仿射變換,複合之後,仍是仿射變換。 相似變換、剛體變換、射影變換,亦復如是。 乙、相關對齊得到仿射變換。 亦可退化,得到相似變換、剛體變換。
其實就是最陡下降法。目前最好的方法。
照理來說,梯度下降法、模擬退火法應該也行。然而我沒見過。
drawing
drawing
「畫畫」。製造數據,盡量形成均勻造型。
兩種連接形式:
圖:可以討論點與邊。 網格:進一步形成三角剖分(二維)、四面體剖分(三維)。還可以討論面。
兩種連接形態:
點雲:沒有任何特色,隨便連。 表面:形成空間中的一層曲面。
相對距離盡量均勻(兩兩距離平方總和盡量小)
我們希望數據盡量集中、盡量不要四處散落。我們設計一個簡單的最佳化目標函數:兩兩距離平方總和盡量小。
根據graph Laplacian analysis,此最佳化目標亦是:相對距離盡量均勻。
min sum ‖pᵢ - pⱼ‖² p (i,j)
引入adjacency matrix,只考慮部分的兩兩距離。
引入非負權重,伸縮各個兩兩距離。權重越大,距離越短。
min sum wᵢⱼ ‖pᵢ - pⱼ‖² p (i,j)
引入Laplacian matrix,改寫成二次型。
每個維度可以分開處理,分開最佳化。
min xᵀLx + min yᵀLy where pᵢ = (xᵢ, yᵢ) x y
最小值位於一次微分等於零的地方,改寫成一次方程組。
每個維度可以分開處理,分開求解。
solve Lx = 0 and solve Ly = 0 (wᵢⱼ is symmetric)
solve (L+Lᵀ)x = 0 and solve (L+Lᵀ)y = 0 (wᵢⱼ is non-symmetric)
無向圖:L是對稱、半正定、對角優勢矩陣。
有向圖:(L+Lᵀ)是對稱、半正定、對角優勢矩陣。
答案是所有點聚在一點、所有點皆相等,缺乏討論意義。大家習慣追加其他限制條件,後面小節逐一介紹。
位置必須固定
釘住某些點。挑選一些點,設定明確座標。
min sum ‖pᵢ - pⱼ‖² subject to pₖ = cₖ for certain k p (i,j)
解的一部分變成了定值。撰寫數學式子的時候,重新排列維度,將定值排在一起,比較清爽。
⎡ x₁ ⎤ᵀ⎡ — row₁ — ⎤ ⎡ x₁ ⎤ ⎢ x₂ ⎥ ⎢ — row₂ — ⎥ ⎢ x₂ ⎥ min ⎢ x₃ ⎥ ⎢ — row₃ — ⎥ ⎢ x₃ ⎥ x₂ and x₄ ⎢ x₄ ⎥ ⎢ — row₄ — ⎥ ⎢ x₄ ⎥ are constant ⎣ x₅ ⎦ ⎣ — row₅ — ⎦ ⎣ x₅ ⎦ ⎡ x₁ ⎤ᵀ⎡ — row₁ — ⎤ ⎡ x₁ ⎤ ⎢ x₃ ⎥ ⎢ — row₃ — ⎥ ⎢ x₃ ⎥ --> min ⎢ x₅ ⎥ ⎢ — row₅ — ⎥ ⎢ x₅ ⎥ lower variables ⎢ x₂ ⎥ ⎢ — row₂ — ⎥ ⎢ x₂ ⎥ are constant ⎣ x₄ ⎦ ⎣ — row₄ — ⎦ ⎣ x₄ ⎦
撰寫數學式子的時候,變數常數分別形成區塊,比較簡潔。
⎡ x ⎤ᵀ⎡ L₀₀ │ L₀₁ ⎤ ⎡ x ⎤ ⎡ x₁ ⎤ min ⎢───⎥ ⎢─────┼─────⎥ ⎢───⎥ where x = ⎢ x₃ ⎥ , c = ⎡ x₂ ⎤ ⎣ c ⎦ ⎣ L₁₀ │ L₁₁ ⎦ ⎣ c ⎦ ⎣ x₅ ⎦ ⎣ x₄ ⎦
改寫成一次方程組。
min xᵀL₀₀x + xᵀL₀₁c + cᵀL₁₀x + cᵀL₁₁c 先展開 solve (L₀₀ + L₀₀ᵀ)x + (L₀₁ + L₁₀ᵀ)c = 0 再微分 solve (L₀₀ + L₀₀ᵀ)x = -(L₀₁ + L₁₀ᵀ)c 移項 solve L₀₀x = -L₀₁c 對稱矩陣。同除以二。
⎡ (L₀₀ + L₀₀ᵀ) │ (L₀₁ + L₁₀ᵀ) ⎤ ⎡ x ⎤ ⎡ 0 ⎤ solve ⎢──────────────┼──────────────⎥ ⎢───⎥ = ⎢───⎥ 先微分 ⎣ (L₁₀ + L₀₁ᵀ) │ (L₁₁ + L₁₁ᵀ) ⎦ ⎣ c ⎦ ⎣ 0 ⎦ (怪怪的) solve (L₀₀ + L₀₀ᵀ)x + (L₀₁ + L₁₀ᵀ)c = 0 再展開(一式) solve (L₀₀ + L₀₀ᵀ)x = -(L₀₁ + L₁₀ᵀ)c 移項 solve L₀₀x = -L₀₁c 對稱矩陣。同除以二。
每個連通分量至少釘選一點,則L₀₀有反矩陣、有唯一解。
L₀₀是對稱、正定、對角優勢矩陣。矩陣求解,有許多演算法。
相對位置盡量固定、絕對位置盡量固定
v是相對位置差異,z是絕對位置,w u是權重。
min sum { wᵢⱼ ‖(pᵢ - pⱼ) - vᵢⱼ‖² } + sum { uᵢ ‖pᵢ - zᵢ‖² }
改寫成二次型、一次方程組。
min (Dx-v)ᵀW(Dx-v) + (x-z)ᵀU(x-z)
solve Lx = b where L = DᵀWD + U and b = DᵀWv + Uz
W and U are diagonal matrices: diagonals are wᵢⱼ and uᵢ. D is difference matrix: in each row, column i is 1 and column j is -1. x:n×1, v:n²×1, D:n²×n, W:n²×n², z:n×1, U:n×n, L:n×n, b:n×1.
L仍然是對稱、半正定、對角優勢矩陣。
《Efficient Preconditioning of Laplacian Matrices for Computer Graphics》
相對距離盡量固定
d是相對距離。
min sum (‖pᵢ - pⱼ‖ - dᵢⱼ)²
如果指定了所有的兩兩距離,可以視作multidimensional scaling。如果指定了部分的兩兩距離,可以視作matrix completion,補足所有的兩兩距離。
matrix completion of D: D = M⊙M 距離平方 D = UΣVᵀ SVD(D) Dₖ = UₖΣₖVₖᵀ 保留前k大的奇異值暨奇異向量們,作為距離矩陣。 D̃ = ½(Dₖ+Dₖᵀ) 調整成對稱矩陣。距離矩陣必須是對稱矩陣。 multidimensional scaling of D̃: XᵀX = -½CD̃C 行列中心化、去掉係數 XᵀX = EΛEᵀ Eigen(YᵀY) X = √Λ₃E₃ᵀ 保留前三大的特徵值暨特徵向量們
《Localization From Incomplete Euclidean Distance Matrix: Performance Analysis for the SVD–MDS Approach》
彈力位能盡量小
w是彈性係數,d是彈簧長度,整體是彈力位能總和。
min sum wᵢⱼ (‖pᵢ - pⱼ‖ - dᵢⱼ)²
我不知道能不能使用MDS。等你發表論文。
演算法是數值模擬。各點各自求得加速度、更新速度、更新座標。請見本站文件「particle simulation」。
宛如梯度下降法的改良版本。我不知道收斂條件為何。
《Graph Drawing by Stress Majorization》
面積盡量均勻:外心面積公式
網格可以討論面。
外心面積公式:三條中垂線得到外心,外心將三角形切三塊。
1. 三中垂線交於一點 2. 三個等腰三角形 3. θ=a+b,邊ij對頂角是2θ=2a+2b,對半分是θ=a+b 4. 底乘以高除以二就是半個等腰三角形面積 5. 底(‖pᵢ-pⱼ‖/2) 高(‖pᵢ-pⱼ‖/2)⋅cot(θ) 6. 半個等腰三角形面積,係數1/8 7. 三個等腰三角形面積,係數1/4
採用此公式,「三角形面積總和」可以改寫成「兩兩距離平方總和」的形式。計算面積,只需調整權重。
min sum area(c) 三角形面積總和 p c = min sum sum ½ ‖pᵢ - pⱼ‖ ½ ‖pᵢ - pⱼ‖ cot(θᵢⱼ) 外心面積公式 p,θ c (i,j) ~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ ∈cell(c) bottom height = min sum sum ¼ cot(θᵢⱼ) ‖pᵢ - pⱼ‖² 整理 p,θ c (i,j) ∈cell(c) = min sum (¼ cot(θᵢⱼ⁺) + ¼ cot(θᵢⱼ⁻)) ‖pᵢ - pⱼ‖² 主角從面變邊 p,θ (i,j) ~~~~~~~~~~~~~~~~~~~~~~~~~~~ wᵢⱼ = min xᵀLcotx + min yᵀLcoty 主角從邊變點 x,θ y,θ
每個面負責三個小三角形=每條邊負責兩個小三角形。至於邊界上的邊,只負責一個小三角形。
wᵢⱼ = ⎰ ¼ cot(θᵢⱼ⁺) + ¼ cot(θᵢⱼ⁻) if (i,j) is not boundary ⎱ ¼ cot(θᵢⱼ⁺) if (i,j) is boundary
未知數包含角度和位置,答案無限多個,缺乏討論意義。大家習慣指定角度大小,以便求解。例如各點頂角均分、參考其他網格。
注意:0°和180°導致cot(θ)無限大,矩陣求解無法進行。
Lcot缺陷:鈍角導致外心落在外部,面積為負值,cot(θ)為負值。可能導致負權重。可能導致非正定、非對角優勢。歹剃頭。
沒有鈍角,Lcot才保證是對稱、半正定、對角優勢矩陣。
面積盡量均勻:內心面積公式
更換面積公式,不必擔心鈍角。
內心面積公式:三條角平分線得到內心,內心將三角形切三塊。
1. 三角平分線交於一點 2. 三個小三角形 3. 小三角形,高r,左右底角½α ½β,左右底長h/tan(½θᵢ) h/tan(½θⱼ) 5. 小三角形,總底長‖pᵢ-pⱼ‖ = h/tan(½θᵢ) + h/tan(½θⱼ) 6. 通分並移項,高h = (tan(½θᵢ) ⋅ tan(½θⱼ)) / (tan(½θᵢ) + tan(½θⱼ)) 7. 底乘以高除以二就是小三角形面積 8. 底‖pᵢ-pⱼ‖ 高‖pᵢ-pⱼ‖ ⋅ (tan(½θᵢ) ⋅ tan(½θⱼ)) / (tan(½θᵢ) + tan(½θⱼ)) 9. 一個小三角形面積,係數1/2 10. 三個小三角形面積,係數1/2
min sum area(c) p c tan(½θᵢ) ⋅ tan(½θⱼ) = min sum sum ½ ‖pᵢ - pⱼ‖ ‖pᵢ - pⱼ‖ ——————————————————— p,θ c (i,j) tan(½θᵢ) + tan(½θⱼ) ∈cell(c) ~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ bottom height tan(½θᵢ) ⋅ tan(½θⱼ) = min sum sum ½ ——————————————————— ‖pᵢ - pⱼ‖² p,θ c (i,j) tan(½θᵢ) + tan(½θⱼ) ∈cell(c) ⎛ tan(½θᵢ⁺)⋅tan(½θⱼ⁺) tan(½θᵢ⁻)⋅tan(½θⱼ⁻)⎞ = min sum ⎜½ ——————————————————— + ½ ———————————————————⎟ ‖pᵢ - pⱼ‖² p,θ (i,j) ⎝ tan(½θᵢ⁺)+tan(½θⱼ⁺) tan(½θᵢ⁻)+tan(½θⱼ⁻)⎠ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ wᵢⱼ = min xᵀLtanx + min yᵀLtany x,θ y,θ
注意:180°導致tan(½θ)無限大,矩陣求解無法進行。
Ltan仍是對稱、半正定、對角優勢矩陣。
deformation
deformation(topology-preserving transformation)
「形變」。調整數據,盡量保持原始造型。
「形變」。已知甲堆數據,求得乙堆數據、變換函數。
採用全域變換,造型死板無法微調,於是大家採用局部變換。
圖的局部變換:
點變換:各點擁有變換函數。 p̕ᵢ = Fᵢ(pᵢ)
網格擁有面,多了一種方式:
面變換:各面擁有變換函數,作用於頂點。 p̕ᵢ = Fc(pᵢ) for i∈cell(c)
圖的局部對齊:
點變換、點誤差:各點擁有變換函數。自身與鄰點實施變換,統計各點差異。 min sum { ‖p̕ᵢ - Fᵢ(pᵢ)‖² + sum ‖p̕ⱼ - Fᵢ(pⱼ)‖² } F,p̕ i j∈adj(i) 點變換、邊誤差:各點擁有變換函數。自身與鄰點實施變換,統計各邊(向量)差異。 min sum sum ‖(p̕ᵢ - p̕ⱼ) - (Fᵢ(pᵢ) - Fᵢ(pⱼ))‖² F,p̕ i j∈adj(i) 點變換、角誤差:各點擁有變換函數。自身與鄰點實施變換,統計各角差異。 min sum sum ‖θ̕ⱼ - Fᵢ(θⱼ)‖² F,p̕ i j∈adj(i) where θ̕ⱼ = ∠p̕ⱼp̕ᵢp̕ⱼ₊₁ Fᵢ(θⱼ) = ∠Fᵢ(pⱼ)Fᵢ(pᵢ)Fᵢ(pⱼ₊₁)
網格擁有面,多了三種方式:
面變換、點誤差:各面擁有變換函數。頂點實施變換,統計各點差異。 min sum sum ‖p̕ᵢ - Fc(pᵢ)‖² F,p̕ c i∈cell(c) 面變換、邊誤差:各面擁有變換函數。頂點實施變換,統計各邊(向量)差異。 min sum sum ‖(p̕ᵢ - p̕ⱼ) - (Fc(pᵢ) - Fc(pⱼ))‖² F,p̕ c (i,j)∈cell(c) 面變換、角誤差:各點擁有變換函數。頂點實施變換,統計各角差異。 min sum sum ‖θ̕ᵢ - Fc(θᵢ)‖² F,p̕ c i∈cell(c) where θ̕ᵢ = ∠p̕ᵢ₋₁p̕ᵢp̕ᵢ₊₁ Fc(θᵢ) = ∠Fc(pᵢ₋₁)Fc(pᵢ)Fc(pᵢ₊₁)
affine deformation
點變換、點誤差。
min sum { ‖p̕ᵢ - (Aᵢ(pᵢ) + b)‖² + sum ‖p̕ⱼ - (Aᵢ(pⱼ) + b)‖² } F,p̕ i j∈adj(i)
保留局部造型,鄰角一齊變化,角度大小穩定。
演算法是大型稀疏矩陣、一次最小平方方程組、公式解。
點仿射變換,邊無法疊合。邊重新畫上即可。
《Laplacian Surface Editing》
affine deformation
面變換、點誤差。
min sum sum ‖p̕ᵢ - (Ac(pᵢ) + b)‖² F,p̕ c i∈cell(c)
可以完全對齊,毫無誤差。三角形任選一點作為原點,其兩鄰邊作為基底。
solve A(pᵢ - t) = (p̕ᵢ - t̕) for i = 1,2,3 solve A(pᵢ - p₁) = (p̕ᵢ - p̕₁) for i = 2,3 ⎡ | | ⎤ ⎡ | | ⎤ V = ⎢ p₂-p₁ p₃-p₁ ⎥ V̕ = ⎢ p̕₂-p̕₁ p̕₃-p̕₁ ⎥ ⎣ | | ⎦ ⎣ | | ⎦ AV = V̕ A = V̕V⁻¹
不會維持形狀,缺乏討論意義。
laplacian preserving deformation
恆等變換(點面無區別)、邊誤差。
min sum wᵢⱼ ‖(p̕ᵢ - p̕ⱼ) - (pᵢ - pⱼ)‖² p̕ (i,j)
效果是盡量保持形狀。附帶效果是相對距離盡量均勻。
改寫成二次型、一次方程組。恰是「圖論版本的保梯散變換」!
min (x̕-x)ᵀL(x̕-x) + min (y̕-y)ᵀL(y̕-y) where pᵢ = (xᵢ, yᵢ) x̕ y̕ p̕ᵢ = (x̕ᵢ, y̕ᵢ)
solve Lx̕ = Lx and solve Ly̕ = Ly
演算法請參考先前章節:相對距離盡量均勻。
答案是直接複製貼上,缺乏討論意義。大家習慣追加其他限制條件,例如某些點位置必須固定。
solve L₀₀x̕ = L₀₀x - L₀₁c and solve L₀₀y̕ = L₀₀y - L₀₁d
rigid deformation / similar deformation
點變換、邊誤差。
min sum sum ‖(p̕ᵢ - p̕ⱼ) - Rᵢ(pᵢ - pⱼ)‖² R,p̕ i j∈adj(i)
演算法是分塊座標下降法:固定p̕求得R、固定R求得p̕,不斷輪流。rigid alignment與Laplacian preserving deformation不斷輪流。
固定p̕求得R:(pᵢ - pⱼ)和(p̕ᵢ - p̕ⱼ)視作點,化作rigid alignment。公式解。
鄰點們的平均數是定值。預先中心化,以便快速求解。
YXᵀ = UΣVᵀ R = UVᵀ
固定R求得p̕:Rᵢ(pᵢ - pⱼ) = (Rᵢpᵢ - Rᵢpⱼ)視作兩點相減,化作Laplacian preserving deformation。矩陣求解。
Laplacian matrix是定值。預先做Cholesky decomposition,以便快速求解。
solve Lx̕ = Lx solve MMᵀx̕ = Lx where L = MMᵀ
點剛體變換,邊無法疊合。最後得到類似剛體的變換。不是剛體變換,不是盡量剛體變換(奇異值與1的平方誤差總和盡量小)。
《As-Rigid-As-Possible Surface Modeling》
rigid deformation / similar deformation
面變換、邊誤差。
min sum sum ‖(p̕ᵢ - p̕ⱼ) - Rc(pᵢ - pⱼ)‖² R,p̕ c (i,j)∈cell(c)
演算法是分塊座標下降法。
固定p̕求得R:化作三個點的rigid alignment。
固定R求得p̕:無法化作Laplacian preserving deformation,原始論文搞錯了。正確方法請參考先前章節:相對位置盡量固定。
面剛體變換,面無法接合。分塊座標下降法最後一步不能停在rigid alignment。
最後得到類似剛體的變換。不是剛體變換,不是盡量剛體變換。
時間複雜度較高,缺乏討論意義。
《A Local/Global Approach to Mesh Parameterization》
isotropic scaling deformation
面變換、邊誤差。
min sum sum ‖(p̕ᵢ - p̕ⱼ) - sc(pᵢ - pⱼ)‖² s,p̕ c (i,j)∈cell(c)
演算法是分塊座標下降法。
固定p̕求得s:簡易公式解,不必奇異值分解。
固定s求得p̕:同先前小節。
min sum sum ‖(p̕ᵢ - p̕ⱼ) - sc(pᵢ - pⱼ)‖² s c (i,j)∈cell(c) solve sum sum { 2 (p̕ᵢ - p̕ⱼ)ᵀ(pᵢ - pⱼ) - 2 sc ‖pᵢ - pⱼ‖² } = 0 c (i,j)∈cell(c) sc = [ sum (p̕ᵢ - p̕ⱼ)ᵀ(pᵢ - pⱼ) ] ÷ [ sum ‖pᵢ - pⱼ‖² ] (i,j)∈cell(c) (i,j)∈cell(c)
不允許旋轉,只允許縮放,三角形容易交疊。額外拿向量長度做regularization,維持局部造型,避免交疊。
...... + sum sum ‖(p̕ᵢ - p̕ⱼ) - lᵢⱼ(pᵢ - pⱼ)‖² c (i,j)∈cell(c) where lᵢⱼ = ‖p̕ᵢ - p̕ⱼ‖ ÷ ‖pᵢ - pⱼ‖
演算法是分塊座標下降法:固定p̕求得s和l、固定s和l求得p̕,不斷輪流。
為了方便求解,原始論文偷吃步,固定l求得p̕。然而l包含p̕,不能拆開計算。只好改拿上一步的向量長度做regularization。
...... + sum sum ‖(p̕ᵢ⁽ᵗ⁾ - p̕ⱼ⁽ᵗ⁾) - lᵢⱼ(pᵢ - pⱼ)‖² c (i,j)∈cell(c) where lᵢⱼ = ‖p̕ᵢ⁽ᵗ⁻¹⁾ - p̕ⱼ⁽ᵗ⁻¹⁾‖ ÷ ‖pᵢ - pⱼ‖
自我審查之後,就可以使用分塊座標下降法了。工程精神!
《Optimized Scale-and-Stretch for Image Resizing》
isogonal affine deformation
面變換、角誤差。
min sum { ‖θ̕₁ - θ₁‖² + ‖θ̕₂ - θ₂‖² + ‖θ̕₃ - θ₃‖² } θ̕ c ⎧ θ̕₁ + θ̕₂ + θ̕₃ = π , ∀c 三角形內角和180° ⎪ ⎪ sum { θ̕₁ } = 2π , ∀c 鄰角和360° ⎪ c∈adj(i) subject to ⎨ ⎪ prod { sin(θ̕₂) ÷ sin(θ̕₃) } = 1 , ∀c ⎪ c∈adj(i) 鄰邊長度比,繞一圈為1 ⎪ ⎩ θ̕₁, θ̕₂, θ̕₃ ≥ 0 , ∀c 角度非負
一旦確定角度,也就決定網格(可能鏡射)。因此直接求角度。
二次規劃。演算法是牛頓拉格朗日乘數法。
直接拷貝,就是保角,缺乏討論意義。因此大家討論其他情況,例如重新釘住某些點,例如三維表面變成二維平面。
《ABF++: Fast and Robust Angle Based Flattening》
isogonal affine deformation
網格的變換,可以用經典數學領域來詮釋:微積分的分段變換(連續雙射)、圖論的局部變換(面變換)。微積分考慮所有地點,圖論僅考慮點與邊。
網格的仿射變換,擁有許多特殊性質:
一、輸入輸出劃定網格,各三角形各自實施仿射變換。 二、輸入輸出劃定網格,只有唯一一種仿射變換。 三、微積分分段仿射=圖論局部仿射。 註:三角形處處做仿射變換=三頂點做仿射變換+內部做仿射座標系。 四、微積分保長≠圖論保長。註:圖論保長未定義。 五、微積分保距≠圖論保距。 六、微積分保角=圖論保角。 七、微積分和諧≠圖論和諧。 八、微積分保角≠微積分和諧。 九、當面積固定,微積分盡量保角=微積分盡量和諧。 十、微積分能量=圖論能量(使用Lcot)。
第十項,能量是指Dirichlet energy。證明如下:
微積分能量:處處梯度平方和。用於函數。用於區域。 圖論能量:兩兩距離平方和。用於圖。用於點與邊。
∫ ‖∇F‖ꜰ² 微積分能量 = sum ∫c ‖∇Fc‖ꜰ² 分段變換 c = sum area(c) ‖Acᵀ‖ꜰ² 分段仿射變換 p̕ = Ap + b c = either [DDG2016 at TU Berlin] or [Pinkall93] = sum sum ¼ cot(θᵢⱼ) ‖p̕ᵢ - p̕ⱼ‖² 原網格的夾角 c (i,j)∈cell(c) 新網格的邊長 = sum (¼ cot(θᵢⱼ⁺) + ¼ cot(θᵢⱼ⁻)) ‖p̕ᵢ - p̕ⱼ‖² 主角從面變邊 (i,j) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ wᵢⱼ = x̕ᵀLcotx̕ + y̕ᵀLcoty̕ 主角從邊變點,圖論能量
宛如外心面積公式Lcot。不知是否能換成內心面積公式Ltan。
總結:當面積固定,圖論盡量保角=微積分盡量保角=微積分盡量和諧=微積分能量盡量小=圖論能量盡量小(使用Lcot)。
min x̕ᵀLcotx̕ + min y̕ᵀLcoty̕ where p̕ᵢ = (x̕ᵢ, y̕ᵢ) x y
solve Lcotx̕ = 0 and solve Lcoty̕ = 0
問題得以化作先前章節:面積盡量均勻。沿用原網格的夾角。
令新網格邊界是凸多邊形,釘住網格邊界,以保證面積固定。
令原網格是Delaunay triangulation,以保證除了邊界以外的wᵢⱼ非負,以保證L₀₀有反矩陣、有唯一解。
《Spectral Conformal Parameterization》
凸包性質(mean value property)
graph Laplacian analysis精髓:各點更新為鄰點的加權平均。
GLA不允許負權重。因此各點位於鄰點的凸包內部。
釘住某些點,形變之後,所有點都將位於釘點的凸包內部。
平面圖性質(Tutte's spring theorem)
僅適用網格。
當釘點們形成凸多邊形,網格形變之後仍是網格。所有點不會超出凸多邊形,所有邊不會交叉,所有角不會翻面。
當釘點們形成凸多邊形,而且位於網格邊界,網格形變之後不會退化。點邊角不會疊合在一起。
當釘點們形成凹多邊形,網格形變之後可能是網格、可能不是網格。表面積公式有可能失效。
對稱正定性質(Rippa's theorem)
能量盡量小(使用Lcot)、最小角盡量大,兩者密切相關。
給邊求點(釘住邊界上所有點、補滿邊界上所有邊): 可以採用Dirichlet energy minimization (Lcot)。 恰好形成Delaunay triangulation。 給點求邊: 可以採用Delaunay triangulation。 恰好形成Dirichlet energy minimization (Lcot)。
最小角盡量大=兩個相鄰三角形的共用邊不可翻轉=對頂角的cot值總和非負。
Delaunay triangulation iff wᵢⱼ = ¼ cot(θᵢⱼ⁺) + ¼ cot(θᵢⱼ⁻) ≥ 0 where (i,j) is not boundary
Delaunay triangulation可能有鈍角,但是保證wᵢⱼ非負(不含邊界),進而保證L₀₀是對稱正定矩陣(釘住邊界)。
《A Spectral Characterization of the Delaunay Triangulation》
minimum energy deformation
(minimal surface of membrane ⇒ Laplacian) smoothing energy: min sum ‖J(Fc)‖ꜰ² ⇒ solve Lcotx = 0 F c (minimal curvature of thin plate ⇒ bilaplacian) bending energy: min sum ‖H(Fc)‖ꜰ² ⇒ solve Lcot²x = 0 F c
J(F) = ∇Fᵀ 最近似線性變換矩陣 ‖J(F)‖² 能量 min ‖J(F)‖² 盡量和諧
變換函數的一次微分的長度盡量小,化作一階梯散方程式求解。
物理意義:面積盡量小。盡量拉緊。適用於薄膜,例如肥皂泡。
變換函數的二次微分的長度盡量小,化作二階梯散方程式求解。
物理意義:曲率盡量小。盡量壓平。適用於薄片,例如厚紙板。
次方越高,形狀越圓。
《Polygon Mesh Processing》
rigid deformation / similar deformation
rigid energy: min sum ‖Rc - J(Fc)‖ꜰ² F,R c similar energy: min sum ‖Sc - J(Fc)‖ꜰ² F,S c
方才的數學式子,追加特定變換函數,形成了剛體、相似。
如果已知F,那麼R和S有公式解。R和S改寫成F的形式之後,未知數只剩下F。
目前沒有演算法。大家沿用之前的演算法,矩陣改成Lcot。
isometric energy: min sum { area(c) [(σ₁ - 1)² + (σ₂ - 1)²] } F,σ c isogonal energy: min sum { area(c) (σ₁ - σ₂)² } F,σ c
順帶一提,有人將數學式子改寫成奇異值的形式。奇異值是絕對值,省略了正負號,包含了鏡射,形成了保距、保角。
《Variational Harmonic Maps for Space Deformation》
boundary-free deformation
不釘住邊界,而是自由調整邊界,讓網格更加均勻。
min Ed(M,M̕) + λ₁ Eb(B) + λ₂ Ed(S,S̕) Ed(.,.) = sum ‖J(Fc)‖ꜰ² + ‖J(Fc⁻¹)‖ꜰ² c Eb(.) = sum sum max(0, ε / dᵢⱼₖ - 1)² (i,j) k≠i,j dᵢⱼₖ = ‖pᵢ - pₖ‖ + ‖pⱼ - pₖ‖ - ‖pᵢ - pⱼ‖ triangle inequality λ₁ λ₂ ε are positive constants
不釘住邊界,讓邊界盡量保持相同,方法是追加最佳化目標。
一、網格M,能量盡量小(對稱方式)。
二、邊界B,鄰點距離盡量小、非鄰點距離盡量大。
三、邊界包覆一層薄薄的網格S,能量盡量小(對稱方式)。
《Efficient Bijective Parameterizations》
equiareal affine deformation
目前沒有演算法。這裡介紹一個大概差不多的演算法。
能量=變換矩陣元素平方和=奇異值平方和=縮放倍率平方和。
一個頂點的平均能量sᵢ:相鄰三角形的能量的加權平均數。權重是面積。
sᵢ = sum { area(c) ‖Ac‖² } ÷ sum { area(c) } c∈adj(i) c∈adj(i)
平均能量sⱼ,開根號,當作邊長縮放率sqrt(sⱼ)。
邊長縮放率取倒數當作權重。權重越大,距離越短。
min sum wᵢⱼ ‖p̕ᵢ - p̕ⱼ‖² where wᵢⱼ = 1 / sqrt(sⱼ)
每個想法乍看合情合理,但是沒有數學證明。論文聲稱的盡量不伸縮也只是推測。
演算法是分塊座標下降法:固定q求得A、固定A求得q,不斷輪流。
《A Fast and Simple Stretch-Minimizing Mesh Parameterization》
備忘:gradient-Laplacian deformation
目前沒有論文、也沒有實際用處。
我們希望指定數據造型。我們設計一個複雜的最佳化目標函數:梯度差異(邊)、梯散差異(點:鄰邊和),平方總和盡量小。
min { sum ‖(pᵢ-pⱼ) - (p̕ᵢ-p̕ⱼ)‖² + sum ‖sum (pᵢ-pⱼ) - sum (p̕ᵢ-p̕ⱼ)‖² } p̕ (i,j) i j∈adj(i) j∈adj(i) ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gradient diff (edge diff) Laplacian diff (vertex diff)
改寫成向量。
min { sum ‖vᵢⱼ - v̕ᵢⱼ‖² + sum ‖sum vᵢⱼ - sum v̕ᵢⱼ‖² } p̕ (i,j) i j∈adj(i) j∈adj(i) where vᵢⱼ = pᵢ - pⱼ , v̕ᵢⱼ = p̕ᵢ - p̕ⱼ
每個維度可以分開處理,分開最佳化。
引入adjacency matrix,改寫成矩陣運算。
vᵢⱼ的x座標,視作矩陣Aₓ。vᵢⱼ的y座標,視作矩陣A。
min { ‖Aₓ - A̕ₓ‖ꜰ² + ‖Dₓ - D̕ₓ‖ꜰ² } x̕ + min { ‖A - A̕‖ꜰ² + ‖D - D̕‖ꜰ² } where p̕ᵢ = (x̕ᵢ, y̕ᵢ) y̕
引入Laplacian matrix,合併A與D。
A沒有對角線,D只有對角線。
min ‖Lₓ - L̕ₓ‖ꜰ² + min ‖L - L̕‖ꜰ² where p̕ᵢ = (x̕ᵢ, y̕ᵢ) x̕ y̕
演算法是梯度下降法。每一步皆以當前的x̕求得L̕ₓ。
gradient are 2(L̕ₓ - Lₓ)𝟏 and 2(L̕ - L)𝟏
答案是直接拷貝,缺乏討論意義。大家習慣讓vᵢⱼ是任意非負對稱矩陣,不必是兩兩相減。大家也習慣追加其他限制條件。
homotopy
homotopy(shape interpolation)
「同倫」。形變只有結果:t=1。同倫包括過程:t∈[0,1]。
三種策略:內插、外插、公式。本文介紹內插,至於外插請見本站文件「simulation」,公式請見物理教科書。
內插:先形變t=1,再內插t∈[0,1]。用來製造人工行為。 外插:時間增量Δt,逐步形變t+=Δt。用來模擬自然現象。 公式:設計數學公式,直接求得位置。兩者兼備。
仿射變換的內插
利用上個章節的演算法,得到仿射變換函數。
affine transformation: p̕ = Ap + b
位移向量、變換矩陣,兩者分開內插。
位移向量的內插:時刻變化是位移比例。直接乘上t。 變換矩陣的內插:三種方法。特徵分解、奇異值分解、極分解。
一、特徵分解:特徵值矩陣[0,1]次方。 缺點:不一定能特徵分解(等價於有歪斜?)。 缺點:非整數次方難以計算。 二、奇異值分解:兩個旋轉矩陣(左右奇異向量)、縮放矩陣(奇異值),各自內插。 旋轉矩陣:旋轉軸固定,旋轉角內插。 縮放矩陣:矩陣元素各自內插。 三、極分解:旋轉矩陣(正規正交矩陣)、對稱正定矩陣(特徵縮放矩陣),各自內插。
translation interpolation: 1. b⁽ᵗ⁾ = lerp(0,b) = tb transformation matrix interpolation: 1. A = EDE⁻¹ , A⁽ᵗ⁾ = EDᵗE⁻¹ 2. A = UΣVᵀ , A⁽ᵗ⁾ = slerp(0,U) lerp(I,Σ) slerp(0,Vᵀ) 3. A = (UVᵀ)(VΣVᵀ) = RS , A⁽ᵗ⁾ = slerp(0,R) lerp(I,S)
lerp(I,S) = (1-t)I + tS slerp(0,R) = https://en.wikipedia.org/wiki/Slerp
極分解的視覺效果最好。大家都用極分解。
記得偵測鏡射、去除鏡射。
簡易方式:通通變號(維度必須為奇數,例如三維)。 進階方式:最小的奇異值變號、對應的向量變號。
3a. A = (UVᵀ)(VΣVᵀ) = QP = (-Q)(-P) ⎰ R = Q and S = P if det(Q) = +1 ⎱ R = -Q and S = -P if det(Q) = -1 when n is odd. 3b. A = (UVᵀ)(VΣVᵀ) = QP = QDD⁻¹P ⎰ R = Q and S = P if det(Q) = +1 ⎱ R = QD and S = D⁻¹P = DP if det(Q) = -1 where D = diag([1 1 ... 1 det(Q)]) = D⁻¹ 奇異值暨奇異向量由大到小排列
《Matrix Animation and Polar Decomposition》
仿射變換盡量固定
面變換。指定每一個三角形的仿射變換Ac⁽⁰⁾。
目標條件:令變換矩陣盡量相同。追加限制條件:相鄰三角形共用頂點(貼齊三角形)。
min sum ‖Ac - Ac⁽⁰⁾‖² subject to all A₁(pᵢ) + b₁ = A₂(pᵢ) + b₂ = ...... A,p c i
劃定網格,只有唯一一種仿射變換。三角形任選一點作為原點,其兩鄰邊作為基底,得到仿射變換。Ac改寫成p的形式,以解p。
演算法是大型稀疏矩陣、一次最小平方方程組、公式解。
《Deformation Transfer for Triangle Meshes》
affine homotopy
面變換、仿射變換內插。綜合前面兩個小節。
一、仿射變換內插。 A⁽ᵗ⁾ = slerp(0,R) lerp(I,S) where A = (UVᵀ)(VΣVᵀ) = RS b⁽ᵗ⁾ = lerp(0,b) 二、點座標內插。 p⁽ᵗ⁾ = A⁽ᵗ⁾p⁽⁰⁾ + b⁽ᵗ⁾ 三、盡量接近內插結果。 min sum ‖Ac - Ac⁽ᵗ⁾‖² 四、追加限制條件:相鄰三角形共用頂點(貼齊三角形)。 subject to all A₁(pᵢ) + b₁ = A₂(pᵢ) + b₂ = ...... 五、追加限制條件:釘住某些點。部分p⁽ᵗ⁾已知。 回、釘點是仿射變換內插。p = A⁽ᵗ⁾p⁽⁰⁾ + b⁽ᵗ⁾ 回、釘點是自訂路徑。設計不同的路徑,得到不同的形狀。
《As-Rigid-As-Possible Shape Interpolation》
Laplacian preserving homotopy
點變換、梯散內插。
一、仿射變換內插。 A⁽ᵗ⁾ = slerp(0,R) lerp(I,S) where A = (UVᵀ)(VΣVᵀ) = RS b⁽ᵗ⁾ = lerp(0,b) 二、點座標內插。 p⁽ᵗ⁾ = A⁽ᵗ⁾p⁽⁰⁾ + b⁽ᵗ⁾ 三、梯散內插。 ∆p⁽ᵗ⁾ = ∆(lerp(p⁽⁰⁾, p⁽¹⁾)) where ∆p⁽ᵗ⁾ = sum (pᵢ⁽ᵗ⁾ - pⱼ⁽ᵗ⁾) = lerp(∆p⁽⁰⁾, ∆p⁽¹⁾) j∈adj(i) 四、Laplacian preserving deformation。 solve Lx = ∆pₓ⁽ᵗ⁾ and solve Ly = ∆p⁽ᵗ⁾
利用Laplacian preserving deformation,貼齊三角形。
梯散、內插,恰是線性函數。先內插再梯散=先梯散再內插。預先計算原始梯散、最終梯散,以便快速內插。
演算法是矩陣求解。Laplacian matrix是定值。預先做Cholesky decomposition,以便快速求解。
每個連通分量釘住至少一點,以得到唯一解。
Laplacian preserving deformation和Laplacian preserving homotopy,兩者的差異僅在於梯散的取得方式。前者是原圖的梯散,後者是內插的梯散。
《Poisson shape interpolation》
rigid homotopy / similar homotopy
同上。改成rigid deformation。
《Large Mesh Deformation Using the Volumetric Graph Laplacian》
embedding
embedding(dimensionality reduction)
「嵌入」。更換數據所在空間。例如從三維換成二維。例如從二維換成三維。例如從球面換成平面。例如從曲面換成環面。
這裡先不談太廣,僅討論最簡單的情況:數據從N維空間換成M維空間。細分為三種情況:維度變小、維度不變、維度變大。
後兩者缺乏討論意義──數據不變、數據補零不就好了。因此我們僅討論維度變小。此時「嵌入」的意義就變成了:找到一個函數,讓一堆數據經過函數變換,減少數據維度。
p = {{112,60,70},{130,70,78},{140,88,92},{140,112,108},{130,130,122},{112,140,130},{88,140,70},{70,130,78},{60,112,92},{60,88,108},{70,70,122},{88,60,130}}; Graphics3D[{Black, Specularity[White, 10], Sphere[p, 4]}, PlotRange -> {{50,150},{50,150},{50,150}}, Boxed -> False]
嵌入方式有許多種。例如投影就是其中一種嵌入方式。例如訂立座標系統並且實施座標轉換,也是其中一種嵌入方式。
嵌入時,我們通常希望儘量保留數據的原始特性。特性可以是數據的聚散程度、數據之間的距離遠近。計算學家針對各種特性,設計各種演算法。
演算法(self-organizing map)
嵌入時,盡量保持疏密相同。
早期的演算法。與其說是Embedding,不如說是alignment。
低維度四邊形網格,對齊高維度數據。不知道索引值對應關係,於是隨時實施最近鄰指派。
梯度下降法。找到最近節點,鄰居一齊更新位置。
演算法(random projection)
嵌入時,盡量保留兩兩距離。
隨機生成線性變換矩陣。隨機導致均勻,均勻導致正交,正交導致保距。絕智棄辯,民利百倍。
演算法(multidimensional scaling)
嵌入時,盡量保留兩兩距離。
求得距離矩陣,行列中心化,除以負二,得到點積矩陣。給定點積矩陣,求得數據矩陣,答案有無限多種。採用奇異值分解的共軛分解,答案恰好等於PCA嵌入。
演算法(principal component analysis)
嵌入時,採用垂直投影,盡量減少投影距離。
數據矩陣中心化X̃ = X - X̄。奇異值分解X̃ = UΣVᵀ。保留ΣVᵀ,取前k大的奇異值暨奇異向量,數據降為k維。
graph embedding
引入adjacency matrix,只考慮部分的兩兩距離。
建立adjacency matrix有許多細節。
一、挑選鄰居:距離較近的數據,成為鄰居。 (全部、fixed-radius near neighbor、k-nearest neighbor) 二、設定權重:距離作為權重。套用鐘形函數:超過一定距離,鄰居關係迅速減弱。 (均一、distance、RBF kernel、heat kernel)
當演算法的原理是graph Laplacian analysis,需要進一步調整adjacency matrix的權重。也可以說是Laplacian matrix的權重。
一、權重必須取倒數:權重越大,實施GLA,距離越近。 (全域聚集:數據盡量集中。) 二、權重可以比例化:鄰邊越多,權重總和越大,權重比例化越小,鄰點越遠。 (局部疏散:鄰邊越多、鄰點越遠。)
比例化有兩種選擇,一般採用橫條比例化。
normalized Laplacian matrix: D⁻¹L 橫條比例化 symmetric normalized Laplacian matrix: √D⁻¹L√D⁻¹ 直條橫條比例化
normalized Laplacian matrix其實是比例化。古人命名不精準。
proportionalize:比例化。令總和為1。 normalize:正規化。令平方和為1。
也有人稱為「流形學習manifold learning」,然而此觀念既非流形、亦非學習,只是為了聽起來很屌,就好比乂煞氣a嵌入乂。
演算法(isomap)
嵌入時,盡量保留兩兩距離。
一、adjacency matrix:挑選鄰居,設定權重。 二、all-pairs shortest paths:所有數據兩兩距離。(使用上述權重) 三、multidimensional scaling:盡量保留兩兩距離。
《A Global Geometric Framework for Nonlinear Dimensionality Reduction》
演算法(graph Laplacian analysis)
嵌入時,盡量讓距離均勻。
一、adjacency matrix:挑選鄰居,設定權重。 二、graph Laplacian analysis:盡量讓距離均勻。
GLA有三種解法:二次型最佳化、一次方程組求解、特徵分解。降維適合採用特徵分解。
令特徵向量長度為1(變異數為1)。正解是最小的特徵值的特徵向量,缺乏討論意義。改取次k小的特徵值的特徵向量們,k個特徵向量構成k維數據。
minimize yᵀLy subject to ‖y‖² = yᵀy = 1 minimize yᵀLy - λ (yᵀy - 1) solve Ly - λy = 0 solve Ly = λy
局部疏散:原始論文採用√D⁻¹L√D⁻¹。
廣義特徵向量。最後讓v變回y。也有人直接將v當作答案。
minimize yᵀ√D⁻¹L√D⁻¹y subject to yᵀy = 1 minimize vᵀLv subject to vᵀDv = 1 (let v = √D⁻¹y) minimize vᵀLv - λ (vᵀDv - 1) solve Lv - λDv = 0 solve Lv = λDv
其他稱呼:Laplacian eigenmap、diffusion map、harmonic embedding。
《Laplacian Eigenmaps and Spectral Techniques for Embedding and Clustering》
演算法(Laplacian principal component analysis)
嵌入時,盡量讓距離均勻,而且必須是線性變換。
一、adjacency matrix:挑選鄰居,設定權重。 二、LPCA:數據實施某種線性變換,盡量讓距離均勻。
線性變換抑制了GLA的效果,畫蛇添足。
取次k小的廣義特徵值的廣義特徵向量們,k個廣義特徵向量作為A的橫條,再以A和X求得Y。也有人直接將V當作X。
minimize Y√D⁻¹L√D⁻¹Yᵀ subject to Y = AX and YYᵀ = I minimize AX√D⁻¹L√D⁻¹XᵀAᵀ subject to AXXᵀAᵀ = I minimize AX√D⁻¹L√D⁻¹XᵀAᵀ - λ (AXXᵀAᵀ - I) solve X√D⁻¹L√D⁻¹Xᵀa - λXXᵀa = 0 solve (X√D⁻¹L√D⁻¹Xᵀ)a = λ(XXᵀ)a solve (VLVᵀ)a = λ(VDVᵀ)a (let V = X√D⁻¹)
《Locality Preserving Projections》
演算法(locally linear embedding)
嵌入時,盡量保持梯散為零。
一、adjacency matrix:挑選鄰居,但是不設定權重。 二、Laplacian assignment:原數據,求得權重,盡量讓梯散為零。【尚無正式名稱】 三、graph Laplacian analysis:新數據,沿用權重,盡量保持梯散為零。
Laplacian assignment:各點分開計算,令鄰邊權重總和等於鄰邊數量n,方便推導公式解。
局部疏散:最後一步不用乘回n。
solve LXᵀ = 0 subject to all sum Wᵢⱼ = n (where L = I - W) W i j
min ‖ sum {xₖ - Wₖᵢ adjᵢ(xₖ)} ‖² st sum Wₖᵢ = n 處理第k點xₖ。 Wₖ i i min ‖ xₖ - sum {wᵢ adjᵢ(xₖ)} ‖² st sum wᵢ = 1 除以n。令wᵢ = Wₖᵢ / n。 w i i Cᵢⱼ = (xₖ - adjᵢ(xₖ)) ∙ (xₖ - adjⱼ(xₖ)) xₖ所有鄰邊兩兩點積,形成矩陣。 wᵢ = (sum C⁻¹ᵢⱼ) / (sum sum C⁻¹ᵢⱼ) C⁻¹第i橫條總和除以C⁻¹元素總和。 j i j 【尚待確認】 Wₖᵢ = n wᵢ 還原原本權重。也有人不這麼做。
GLA:標準作法是(L+Lᵀ)。原始論文則是最小平方法LᵀL,效果如同bilaplacian。
solve LYᵀ = 0 subject to YYᵀ = I (where L = I - W) Y
solve Ly = 0 subject to ‖y‖² = yᵀy = 1 min ‖Ly‖² subject to ‖y‖² = yᵀy = 1 min (Ly)ᵀLy subject to ‖y‖² = yᵀy = 1 min yᵀ(LᵀL)y subject to ‖y‖² = yᵀy = 1 solve LᵀLy = λy
《Nonlinear Dimensionality Reduction by Locally Linear Embedding》
演算法(stochastic neighbor embedding)
嵌入時,盡量保持分布相同。
原數據、新數據,分別求得高斯混合模型。令兩個分布的距離盡量小,距離採用Kullback–Leibler divergence。
SNE:常態分布的混合模型。
t-SNE:學生t分布的混合模型,效果更好。
《Visualizing Data using t-SNE》
演算法(stochastic neighbor embedding)
換個觀點。嵌入時,盡量保持內插函數相同。
數據添加一個新維度作為函數值,一律是1。原數據X、新數據Y,分別實施inverse distance weighting interpolation(原始論文的分母少了一項)。令兩個內插函數的誤差盡量小,誤差是N個函數值的差距的總和。
SNE:解放中二力,故意添加exp和log,效果變差。
t-SNE:封印中二力,未添加exp和log。
演算法(stochastic neighbor embedding)
再換個觀點。嵌入時,盡量保持梯散相同。
一、adjacency matrix:挑選鄰居,設定權重。 二、adaptive GLA:新數據,沿用權重,盡量保持梯散相同。【尚無正式名稱】
權重:距離平方倒數(原始論文將分母加一,避免除以零)。
局部疏散:矩陣橫條比例化。
GLA:自適應梯度下降法momentum。
每回合不斷更新新數據的Laplacian matrix LY。
gradient is (LX - LY)y
clustering
數據沒有類別。嵌入時,盡量同類相聚。
也有人稱作unsupervised manifold learning。屌。
演算法(spectral clustering)
一、adjacency matrix:挑選鄰居,設定權重。 二、graph Laplacian analysis:盡量讓距離均勻。 三、k-means clustering:盡量讓相鄰數據歸類於同一組。
預先用graph Laplacian analysis調整數據形狀,才做k-means clustering。就這樣。跟spectral沒有什麼太大關係。
有人聲稱此演算法等價於maximum cut近似解。我想應該是哪裡搞錯了。maximum cut當中,向量元素必須是0或1;而特徵向量元素通常不是0或1。
《On Spectral Clustering: Analysis and an Algorithm》
演算法(Markov clustering)
adjacency matrix的無限大次方。隨機散步無限多步最終分布。
classification
數據具有類別。嵌入時,盡量同類相聚。
也有人稱作supervised manifold learning。屌。
演算法(linear discriminative analysis)
援引principal component analysis的概念。
尋找一條直線,數據投影到直線之後,各類數據的平均數的變異數盡量大(異類盡量散開),各類數據各自的變異數盡量小(同類盡量聚集)。
演算法(neighborhood component analysis)
援引stochastic neighbor embedding的概念。
尋找一個線性變換矩陣,同類數據的兩兩距離總和盡量小。距離矩陣橫條比例化。