發表文章

目前顯示的是有「電腦視覺」標籤的文章

(幾何)相機標定_投影轉換_針孔成像_相機內外部參數_齊次座標

圖片
  (幾何) 相機標定(校正)/( Geometric ) Camera calibration 是用來求初將三維世界投影成二維影像所需要的各種參數,這些參數也就是攝影機參數。 也可理解為從世界座標系換到二維影像座標系的過程,也就是求出最終投影矩陣的過程,用於估計成像過程的數學參數。 摘自 Medium-Camera Calibration 相機校正 小(針)孔成像(Pinhole) 在進入到相機標定前,需要先掌握針孔成像的基本原理。 以下是一張圖,從右側去看是一個世界坐標系中的一棟房子,左側是一個成像的螢幕。 如何在成像螢幕上去呈現出清晰完整的房子影像呢? 摘自youtube影片截圖- Pinhole and Perspective Projection | Image Formation 最簡單方法是透過針孔,開一個小孔的薄板。 摘自 https://kknews.cc/zh-mo/other/mlkmga2.html 以前國中時候學過的自然科學實驗,會拿蠟燭發光的光線通過針孔後,投影在後方紙屏上,蠟燭燭光在照射到後面紙屏之前,在中間額外再放一個隔板一個小孔,可觀察到上下顛倒左右相反的實像。 如果目標成像紙屏往後移動遠離中間隔板,則會發現針孔成像會放大,影像相對變比較暗。 如果目標成像紙屏往前移動靠近中間隔板,則會發現針孔成像會縮小,影像相對變比較亮。 此外還滿足以下比例關係 \[ \frac{\text{物長}}{\text{像長}} = \frac{\text{物距}}{\text{像距}} \] 回過頭去看Perspective Imaging with Pinhole 的圖繼續去探討,中間虛線是光軸也就是垂直於影像平面的軸,在空間座標戲中建構三維xyz軸座標。而針孔到影像平面的距離就是有效焦距 f。 真實的三維空間以房子頂部的一個點 \(P_o\),它在「相機座標系」中的三維座標寫成: \[ \mathbf r_o=(x_o,y_o,z_o) \] 其中 \(x_o\) 是左右位置、\(y_o\) 是上下位置、\(z_o\) 是物體離相機沿光軸方向的深度。 光線從物體點 \(P_o\) 出發,經過 Pinhole,最後與左邊的成像平面相交,得到影像點 \(P_i\)。 因此: \[ P_o \rightarrow \text{Pinhole} \...

Head Pose estimation_PnP(Perspective-n-Point)多點透視問題_ 2D and 3D feature-based alignment

圖片
頭部姿態的三個自由度 A survey of head pose estimation methods 在2020年一篇IEEE論文是有關於「頭部姿態估計方法綜述」的回顧中,可得知頭部姿態通常以三個自由度來表示。分別是俯仰角(pitch)、偏航角(yaw)與翻滾角(roll),頭部姿態也蘊藏豐富的資訊,比方點頭可能代表答應、理解等,搖頭則表示否定。 延伸應用時常用於視線估計、臉部表情分析,於駕駛監控系統中也十分重要,能去評估駕駛精神狀況。也有應用是分析學生上課專心程度。 傳統頭部姿態估測方法可先偵測人臉特徵點,再藉由頭部模型建立二維影像特徵點與三維模型點之間的對應關係,以估測三維頭部姿態。  一些先備知識可以再去這篇溫故 (幾何)相機標定_投影轉換_針孔成像_相機內外部參數_齊次座標 特徵式對齊 feature-based alignment (特徵式對齊)是估計兩組或多組已匹配的 2D 或 3D points之間運動關係的問題。 在feature-based alignment中,有一種相當常見的特定情況,就是根據一組 2D 點的投影位置,估計物體的 3D 姿態。關於姿態估計問題也被稱為是所謂的外部參數校正。與其相對的是相機內部的參數校正,比方焦距參數。 從三個對應點中恢復姿態,需要的信息是最少的,稱為「透視三點問題」(perspective-3-point-problem, P3P)。當擴展到更多點的問題,合起來稱為「PnP」。 直接線性變換 (direct linear transform, DLT) 摘自 Computer Vision Algorithms and Applications, Richard Szeliski, 2010 - Chapter 6 Feature-based alignment-6.2 Pose estimation 已知p(u,v)、p(X,Y,Z),求出K、R、t。 我們需要知道一組2D-3D對應,並知道對應點的2D與3D座標。 將上面式子中的K[R|t]展開,變成三列四行的矩陣,K內參矩陣由於固定可省略不影響推導。 兩側相乘可得到如下三個方程 其中最底下的z 會等於右側的最底下的式子 我們可把小z帶入上面式子的zu 、 zv去 化簡變底下式子 我們的未知就是L 11到 L 34這些參...

VGG19實作物件辨識(狗的品種信心指數)_使用Tensorflow

圖片
  VGG 這個名字來自牛津大學的 Visual Geometry Group。2014 年,Karen Simonyan 和 Andrew Zisserman 發表了這套架構,論文名稱是 Very Deep Convolutional Networks for Large-Scale Image Recognition。 這篇工作是以 ImageNet 大規模影像辨識任務為背景,核心問題很直接:如果在同樣類型的卷積網路設計下,只是把深度一路往上推,效果會不會更好?  當然論文的答案是肯定的,而且效果相當顯著。 VGG16 和 VGG19 是非常經典的一代。它們不是最省參數的模型,也不是今天速度最快的模型,但它們做了一件很重要的事:很有系統地證明「把網路加深」真的能讓影像辨識更好。 這個觀念,後來幾乎影響了整個 CNN 發展方向。 VGG 系列其實有好幾種配置,但最有名的是 VGG16 和 VGG19。這裡的 16、19,不是指總共只有 16 層或 19 層所有運算,而是指 有權重的層數(weight layers)。 VGG16:13 個卷積層 + 3 個全連接層 VGG19:16 個卷積層 + 3 個全連接層 主要就是 VGG19 比 VGG16 再更深一些。兩者都延續同一種設計哲學:結構很整齊、規則,更容易理解。 它把 CNN 設計簡化成一種很清楚的原則:反覆堆疊小型卷積核,然後逐步加深網路。只要用夠小、夠一致的 3×3 卷積,並把深度推上去,就能做出非常強的模型。 2014 年 ImageNet(ILSVRC 2014),當年的 ImageNet 視覺辨識競賽,VGG 團隊在那一年的比賽中,拿下定位任務第 1 名,分類任務第 2 名。 雖然分類冠軍是 GoogLeNet,但 VGG 仍然成為整個電腦視覺領域最有代表性的里程碑之一。 下方是Colab上實測VGG19的辨識結果