## 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