---
# System prepended metadata

title: 考試筆記

---


## cos vs sin(考點)

sin的物理意義: high pass filter
cos的物理意義: low pass filter

訊號由cos/sin組成 (傅立葉)


## 鏡頭參數(考點)

![](https://hackmd.io/_uploads/SkorMTAMa.png)



景深: 從清晰到模糊的距離
視野範圍: Lens 能捕捉的範圍(長寬即解析度)
解析度(兩種解釋): 1. 1920*1080這種 2. 一個pixel幾mm?


## sensor size

![image.png](https://hackmd.io/_uploads/H1gk6OLXa.png)


會影響一個pixel的解析度
 
ex: 1/2 Inch camera

有 640 pixel, 則一個pixel 寬度的解析度是 6.4(mm) / 640(pixel)


## 計算精度 (不確定考不考)

timestamp: https://www.youtube.com/watch?v=ZL8rc841vO0 25:00

有 Focal 則可以求working，反之同理

![image.png](https://hackmd.io/_uploads/H1thnd8m6.png)



## 色彩空間(考點)

不受光線影響: HSV/HSL

對光線敏感: RGB 

hue:色調
saturation: 飽和度
value: 明度


## Pine Hole Model: Perspective projection


物體離近則看起來越大
物體成像上下顛倒

再解釋model時，都是使用 virtual image plane(實際上不存在)


![image.png](https://hackmd.io/_uploads/r1s9JtI7T.png)



## 座標轉換


原點盡量設在物體中心點


轉換時將真實物體座標轉換到參考相機的座標，其他相機的座標也以參考相機為主 => 簡單化

2D to 2D 和 3D to 3D 都是用Rotation + translation(稱為 affine transform)(Extrinsic)

3d to 2d 稱為 projection(Intrinsic)
2d to 3d 稱為 back-projection/reconstruction(Intrinsic)

Euclidean(Rotation) Transformation = Rotation  + translation
Similarity Transformation = Scaling(長寬縮放一樣) + Rotation  + translation
Affine Transformation = Shearing(通常忽略) + Scaling(長寬縮放不一樣) + Rotation  + translation



### Extrinsic
6個DOF 分別是 X,Y,Z軸旋轉 + X,Y,Z平移


### Intrinsic

alpha: 調整 x軸 focal length 
beta: 調整 y軸 focal length 
gamma: 歪斜程度(現在不會有這種問題，通常為設為0)
(u0,v0): principle point 光軸穿過的點(理論上要會是物體正中心，但實際上會有誤差)
(u,v): 校正後的(u0,v0) 物體正中心

z軸: 又稱為光軸(optical/principle axis)


camera calibration 即找出所有未知數

Intrinsic 只需要做一次就可以
Extrinsic 是物體和相機的相對關係


相乘代表 correlation
相加代表 independent(orthogonal)

![image.png](https://hackmd.io/_uploads/HyndftLmT.png)



### 歐拉角(可能不重要)

Pitch/Tilt (俯仰): 這是圍繞X軸的旋轉。想像一架飛機的前端上升或下降，而尾部做相反的動作。

Yaw/Pan (偏航): 這是圍繞Y軸的旋轉。想像一架飛機從其垂直軸向左或向右旋轉。

Roll/swing (翻滾): 這是圍繞Z軸的旋轉。想像一架飛機的一翼上升，而另一翼下降。

![image.png](https://hackmd.io/_uploads/H1c7W3ImT.png)




## correlation vs covariance (考點)

![image.png](https://hackmd.io/_uploads/HJjm7kKXa.png)



## homogenous martix(考點)


將等式轉成 homogenous martix + non-linear equation
將問題轉換成 Ax = b

特徵: 最後一列作為分母





SOP: (homogenous martix + non-linear equation)



Z 和 w' 可以稱為denominator term(分母) 
w' 也可以視為景深(depth)


=> 有投影座標和focal length 理論上可以重建3d真實座標(但實際不行)
or => 有真實座標和投影座標 可以得知focal length

![image.png](https://hackmd.io/_uploads/ryRDCt876.png)




給上面寫下面

![image.png](https://hackmd.io/_uploads/ryjmbc8Qp.png)



## 如何解 homogenous martix(難 要重看) 三種方法


### 第一種 先用線性解出初始解，在用非線性逼近

#### 1-1-1 Closed-Form Solution (linear)

使用情境： b 為 0

![image.png](https://hackmd.io/_uploads/BJ9xrTLQp.png)


最接近0的特徵值所對應的特徵向量即為答案

why?

AtAx = UWUt = 0

物理意義:因為 U 和 Ut 是特徵向量，不可能為0，所以最接近0的W(特徵值)所對應的特徵向量 即是你的解


#### 1-1-2 Pseudo Inverse (linear)

使用情境： b 不為0

![image.png](https://hackmd.io/_uploads/BJ8wBa8XT.png)

#### 1 - 2 Sum of squares differences (non-linear)

1.將前面 linear得到的解作為初始值
2.再用levenberg-marquardt(LM)去解


### 第二種 Lagrange Approach with constraint

和第一種解法類似，但加了constraint term

![image.png](https://hackmd.io/_uploads/H1cMBPDmp.png)




### 第三種 Gradient Decent


EM/LM 方法(二階微分)理論上比Gradient Decent(一階) 好 

有ground truth 就用LM
否則用EM

但因為DL需要大量參數，所以用sgd


### constraint term 的物理意義

去限制 variance
無 constraint term的話 會只有限制bias(和ground truth的距離)

why平方? => 因為他是variance


此概念從SVM拿過來的

![image.png](https://hackmd.io/_uploads/HyclkZ-7T.png)



### Pseudo Inverse 轉換成 Closed form 

why? 某些研究指出前者做出來的結果較差

![image.png](https://hackmd.io/_uploads/ryPg9PPX6.png)


![image.png](https://hackmd.io/_uploads/BkhbcDvm6.png)

有時候解完h 即可，但若需更精確解，則需要解出外/內參數

![image.png](https://hackmd.io/_uploads/SJXwTDvmp.png)

一開始我們假設 z 為固定
解出x,y旋轉後 在用正交去解就可以

![image.png](https://hackmd.io/_uploads/H1fURvvXT.png)


但解出來的rx,ry 不會是正交的，所以要做額外轉換

=> 用SVD

[rx,ry,rz] = Q = UZVt

將Z視為單位矩陣且U Vt 是正交的，則UVt結果也會是正交

此為 Rodrigues Transform 方法(cvRodrigues2)



## 造成 distortion 原因

1.Radial distortion => 鏡片有弧度 造成圖像有圓角
2.tangential distortion => 沒黏好

_______________________

![image.png](https://hackmd.io/_uploads/HykTV6UXa.png)


## 相機校正程序

外部/內部參數用 closed-form 找初始值
失真參數用 Pseudo Inverse 找初始值

![image.png](https://hackmd.io/_uploads/rJHyDwvXT.png)



## 總結


a00/01/10/11 rotation/scaling
a02/12 translation

但左上角那個不是homgenous martrix,要加上scaling term

即scaling下面的那個公式

![image.png](https://hackmd.io/_uploads/BJdWebb76.png)




## vector 的兩個物理意義


![image.png](https://hackmd.io/_uploads/B1tlwe-mT.png)


rotation + scaling

絕對值代表距離 => scaling
單位向量 => rotation/direction


### 任何空間轉換只有 rotation/scaling/translation


## norm 種類
只有兩種

L1 : 絕對值
L2 : sum-of-squared diff


## SVD

U: 特徵向量（Eigenvector） 即 單位向量(rotation)
W: 特徵值（Eigenvalue） 即  scaling 


![image.png](https://hackmd.io/_uploads/S1H44pUmT.png)



## camera model

由 intrinsic/extrinsic/distortion 組成


Aspect Ratio: 在 cmos sensor上長寬比(通常為1 否則會變形)

![image.png](https://hackmd.io/_uploads/ByUpOKIXT.png)


將外部和內部參數相乘後才是homogenerous martix

要解聯立，至少要四個點(ex: ar要求在平面上=> 四個角落)
s: 和focal length有關 不知道的話可以當1，不然就放focal lengh(單位要注意)

![image.png](https://hackmd.io/_uploads/HJn1rhImp.png)



### deep learning 部分

要額外除以batch size n

![image.png](https://hackmd.io/_uploads/S184L38m6.png)






## PCA

將原始數據的向量表示拆分為多個主成分的線性組合



## 相似三角形計算


![](https://hackmd.io/_uploads/B1QjnpAz6.png)

![](https://hackmd.io/_uploads/r113hpCMp.png)


## 3d - 2d 轉換過程

[R,T] : 內部參數
K: 外部參數

右側3D to 2d時 照片是未失真的(因為是用計算出來的)
要在乘上失真矩陣，才會是肉眼看到的

![image.png](https://hackmd.io/_uploads/Hkszvn87T.png)

![image.png](https://hackmd.io/_uploads/H1-jP2L7T.png)




## Perspective projection/Orthogonal/ Weak Perspective


### Perspective prjection :
=> 即 pinhole model
=> 物體越遠，則成像物體越小
=> 比較難，需要處理分母(非線性)

![image.png](https://hackmd.io/_uploads/rkJRR2IX6.png)


### orthogonal(parrel) : 

=> 不管物體多遠，大小都都一樣


![image.png](https://hackmd.io/_uploads/B1SRR28m6.png)



### Weak Perspective :

物體如果夠深，越靠近的面會變得很大，越遠的會變小



將物體切成足夠薄，則該部分全部點的景深視為一樣

=> 每次只重建部分物體


![image.png](https://hackmd.io/_uploads/ryVJJTLma.png)



## stereo

目的: 找出物體距離(景深)
how? 找出 matching point後計算disparity

stereo 公式:

B: 兩相機距離
f: 內參的 focal length
d: disparity
Z: depth

物體如果越近，則視差會越大， 反之越小

baseline 越小越利於偵測更近的物體的距離 越大 => 利用偵測更遠的 


![image.png](https://hackmd.io/_uploads/BkIDMMW7a.png)

![image.png](https://hackmd.io/_uploads/HkMoEhDXa.png)


### 如何找到 matching point ?

直覺: 逐點搜尋 => 過於耗時 需要將2D搜尋轉回1D搜尋

Ans: 利用 Epipolar Line

### 名詞解釋


el 為 Cr 在左圖的投影點
er 為 Cl 在右圖的投影點

=> 一張圖只會有一個 Epipoles

圖像上任一點和Epipoles 的連線稱為 Epipole Line

左圖上的 Epipole Line 都會在右圖上有一條對應的 Epipole Line

=> 找到對應 Line 後 1D search

![image.png](https://hackmd.io/_uploads/SJrJLhP7T.png)



### 如何找到 對應的 Epipole Line ?

A: intrinstic matrix

#### Essential Matrix

Essential Matrix 物理意義: 經過 Rotation/Translation 找到對應點
但這個方法適用於3D資訊都知道的情況下 => 要改用 Fudemental

![image.png](https://hackmd.io/_uploads/BytzF2wQa.png)

![image.png](https://hackmd.io/_uploads/ryOm5hw76.png)


#### Fudemental

A-1 pR => 將2D座標透過內參反函數轉換到3D

![image.png](https://hackmd.io/_uploads/SJTbo2PQa.png)


stereo 的 rectification 就是找外部參數

window size越小 資訊越仔細，越大則越global


![image.png](https://hackmd.io/_uploads/S1mi2nP7p.png)



#### half-occluded reigon

左相機只能看到物體左邊，右相機也只能看到物體右邊


如何偵測出這種情況? : left-right Consistency 


物體越近 你的baseline要越短，比較不容易出現 half-occluded reigon
物體越遠，則baseline要越大(太遠會近似於重合)


### stereo 步驟

![image.png](https://hackmd.io/_uploads/H1eZDiQma.png)




## covaraince vs corealtion vs hessian  考點


covaraince => PCA/特徵值/特徵向量
corealtion => inner prduct/相似性
hessian: => 找出某個點的梯度變化(一階微分)

![image.png](https://hackmd.io/_uploads/H12rGyOQa.png)


## SIFP

### 流程圖

![image.png](https://hackmd.io/_uploads/Sk3VU6D7p.png)



### Difference of Gaussian

噪音處理 => 先用low 再 high

high pass filter 特徵 => 正負面積相等
low  pass filter 特徵 => 面積和為1


傳統方法要先分別做low pass和high pass後兩張圖片座相減 => 得到dog
但此方法是已經將這兩個函數合併了 => 只需要做一次

![image.png](https://hackmd.io/_uploads/ByJGTRvXa.png)



### 流程說明

### step1-1

SIFT 採用的方式是對同一張圖片做多次的高斯模糊，然後相減(得到結果即DOG)


![image.png](https://hackmd.io/_uploads/r1fFR0D7a.png)



### step1-2


並考慮多個同個解析度的做了不同次數的高斯模糊圖片

比較每個點是否為最大/最小，如此下來可以得到特徵候選點

![image.png](https://hackmd.io/_uploads/SJrm-F4X6.png)

![image.png](https://hackmd.io/_uploads/BJc8-K4mp.png)


### step2-1

從這些特徵候選點找出更重要的 => sub-pixel

y軸為 diff
x軸為 像素位子



![image.png](https://hackmd.io/_uploads/By35fFEQa.png)

![image.png](https://hackmd.io/_uploads/BJPpzF476.png)



根據經驗: 如果sub-pixel位子大於 x 1/2，則需要將整個點往右移

![image.png](https://hackmd.io/_uploads/HyjAQydQT.png)


得到結果取代原本x



### step2-2

將小於閥值的點刪掉(remove low contrast)


### step2-3

刪除edge 留下corner

使用 hessian martix(一階微分)

corner的物理意義: 由兩個特徵向量組成 => 兩個特徵值都大
edge: 只會有一個明顯的特徵向量 => 只有一個特徵值大




考慮兩個特徵值a,b(這邊的特徵值代表為變異性 variance)


a,b都很小 => 平坦區域
a >> b, 邊緣

a,b都很大 => corner

特徵向量大 => 變化量大 => variance 大

![image.png](https://hackmd.io/_uploads/HyXY7ydmp.png)



### step3

找出圖片角度

假如計算旋轉角度為5，則將這張圖片中所有為旋轉角度為5的點的magnitude的值相加累積(histogram)

擁有最高y則最高的x值為旋轉角度

![image.png](https://hackmd.io/_uploads/H1ZTNJuXa.png)



有時候會將最高值的peak * 0.8找出第二個second peak


=> 則該特徵點為有兩個角度

![image.png](https://hackmd.io/_uploads/SynRNkdQT.png)



#### 某個 pixel 的角度計算方法
![image.png](https://hackmd.io/_uploads/Bkdl5Y47a.png)
![image.png](https://hackmd.io/_uploads/Syk-cFVQa.png)


![image.png](https://hackmd.io/_uploads/r14s9KVXp.png)


在後續比較兩個patch時 先將角度旋轉到一樣

=> 再用descripotr後得到的向量做相似性檢測


## edge vs bounday?

edge 是不連續的，只有單點(由多個點組成 但只有一點表示)

bounday是連續的(由edge組成)


## backround subtract


目的: 利用原圖 減掉 backround 找出前景



### Gaussian Mixture model(GMM)

#### 參數版本

透過 VQ 分群，找出權重
透過 EM 來優化


#### (考點) GMM是一個相似性(likelihood)檢測 

![image.png](https://hackmd.io/_uploads/H1piLl_Xa.png)



下圖這個物理意義是: covariance

![image.png](https://hackmd.io/_uploads/rJ7gdg_m6.png)



#### 非參數版本


指數部分物理意義: 相減 => variance 
(三種方法 1.兩兩相減 2.用avg去減 3.用median)


median filter 會比 avg.filter 好(因為avg被noise影響)


如果沒有參數，那要如何設計標準差? => median 除以 常數

![image.png](https://hackmd.io/_uploads/BylqYgdXT.png)



variance 物理意義: difference


![image.png](https://hackmd.io/_uploads/BkTkqq47a.png)



好處:速度快
壞處: 占用記憶體(每個pixel都有自己的高斯model)


## 影像後處理(做完backround subtract)


1. 每個點附近點附近的background出現機率高的話，就把自己delete => 可能會overkill 
2. widnow裡面的值全部相乘 
=> 值高 有很多background ，可以安全DELETE 
=> 值低 代表有很多 foreground ，不能刪

![image.png](https://hackmd.io/_uploads/HkFjOkBQp.png)



## Likelihood Probability

通常不用 mean，而是用 ground truth

除以 covariance => 統一所有單位

![image.png](https://hackmd.io/_uploads/Hy6UubOXp.png)



## Gussian Distribution

![image.png](https://hackmd.io/_uploads/BkSgK-dQp.png)


紅色地方即 sum of squred diff 再除以標準差 => 統一單位(某種activation)

物理意義: translation / scaling / rotation

除以標準差 => scaling


## Maximum a Posteriori (MAP)

![image.png](https://hackmd.io/_uploads/ByXYn-u76.png)



Posteriori: 給一個 20*20的圖片，在裡面是否存在 face

likehood: 圖片和ground truth之間的相似性

priori prob: 這個widnow 某個地方存在face的機率(可以減少誤判情況)


![image.png](https://hackmd.io/_uploads/ryiAK-d7a.png)


#### note
transfomer其實有包含 priori prob => attenion (有包含geo location)
改善QKV => 改善 priori prob




































