Camera(Under Construction!)

Camera

將3D物體轉換成2D圖片的機制。

課程

http://stanford.edu/class/ee367/
http://cs.brown.edu/courses/csci1290/
http://franchomelendez.com/index.php/computational-photography/
http://www.computationalimaging.org/research-overview/

Camera拍攝原理(Under Construction!)

Camera相機

把底片直接放在景物前面,相片最後就是一片亮。古人為了解決這個問題,做了個黑箱、挖了個針孔,嚴格限制光線從景物到底片的行進路線。

針孔導致光線不足,相片最後就是一片陰暗。古人為了解決這個問題,弄了個凸透鏡,讓光線折個彎,聚集光線。

每種顏色的折射率都有些微差異,光線經過透鏡就會色散,相片最後就有色差。古人為了解決這個問題,補了個凹透鏡,讓光線再折個彎,收束光線。

凡事有好就有壞。透鏡可以聚光,卻有像差:相片景物位移扭曲;卻有暈影:相片中心亮、外圍暗。

缺點也可以是優點。例如魚眼鏡頭、LOMO效果。透鏡的缺陷反倒成了藝術,讓許多人心嚮往之。

Depth of Field景深

複習一下高中物理的凸透鏡成像。不在焦距上的景物,光線到達底片就會散開,相片上的景物就會糊掉。

位於焦距上的景物是最清晰的。景物越偏離焦距,相片就越模糊。人類認為還算清晰的區間範圍,稱做景深

調整像深,使之位於景深之內、盡量接近焦距,讓相片清晰,叫做「對焦」。古人為了方便調整像深,搞了個透鏡組。

Aperture光圈、Exposure Time曝光時間

光圈是控制進光量的裝置,大致是圓的。升一檔就是光圈面積變兩倍(光圈直徑變sqrt(2)倍),降一檔就是光圈面積變一半(光圈直徑變1/sqrt(2)倍)。

曝光時間是打開光圈的時間。曝光時間也可以控制進光量。升一檔就是曝光時間變兩倍,降一檔就是曝光時間變一半。

進光量=光圈面積×曝光時間。升檔相片就亮、降檔相片就暗。光圈和曝光時間的檔數相加一樣多,那麼相片差不多一樣亮。

光圈大小,影響靜態景物清晰度。光圈越小,靜態景物越清晰,尤其是不在景深內的景物,令人感覺景深變廣。

曝光時間大小,影響動態景物清晰度。曝光時間越小,動態景物越清晰。

調配光圈和曝光時間,得到不同的視覺感受。散景:光圈超大,故意讓靜態景物不清晰,以凸顯景深範圍內的景物。長曝:曝光時間超大,故意讓動態景物不清晰,產生動態模糊的效果。

Camera圖片處理(Under Construction!)

White Balancing

白平衡。調整相片顏色,去除環境燈光影響,成為真實顏色。

High Dynamic Range Imaging(HDR Imaging)

高動態範圍成像。以各種曝光時間,拍攝多張相片,生成一張符合真實世界亮度的相片。相片的檔案格式從RGB換為RGBE,額外以浮點數儲存亮度。

一個場景當中,光線亮度經常相差好幾個數量級。一張相片當中,像素數值頂多只有0到255。相機拍攝的過程當中,喪失了許多亮度資訊(失真壓縮),現在要盡量還原亮度資訊。

相機拍攝時,光線亮度到像素數值的轉換過程,可以看作是一個函數。幸運的是,一台相機的函數是固定的──商家為了讓拍攝結果穩定一致。不幸的是,每一家相機的函數都不一樣,而且沒有公佈函數──這是商業秘密。

我們的目標是找到反函數!

經典的演算法是選定相機、固定光圈、調整曝光時間,令讓進光量屢次翻倍,各拍攝一張相片。觀察各張相片的同一個像素,得知光線亮度與像素數值的對應關係。

取n個像素,光通量是 E₁ E₂ ... Eₙ
曝光時間一倍 1E₁ ... 1Eₙ
曝光時間兩倍 2E₁ ... 2Eₙ
曝光時間四倍 4E₁ ... 4Eₙ

水平線段區間 [L₀, R₀) [L₁, R₁) ... [L₂₅₅, R₂₅₅)
其中 0 = L₀ < R₀ = L₁ < ... < R₂₅₄ = L₂₅₅ < R₂₅₅ = 10⁶
光通量落在 [L₀, R₀) ,則像素亮度為 0 ,以此類推。

每一張相片可以列出 2n 個不等式。
比如說第一張相片,E₁的像素亮度是20,E₂的像素亮度是24

L₂₀ <= E₁ < R₂₀  ====>  L₂₀ - E₁ <= 0 , E₁ - L₂₁ < 0
L₂₄ <= E₂ < R₂₄  ====>  L₂₄ - E₂ <= 0 , E₂ - L₂₅ < 0

有p種曝光時間、p張相片,得以列出 2np 個不等式
再加上區間 L₀ < L₁ < ... < L₂₅₅ < R₂₅₅ ,一共 255 個不等式
實施一次規劃演算法,求可行解!
另外還可以設定區間長度最少是d,
例如 L₀ + d < L₁ 這樣,以增加可行解的魯棒程度。

求出所有未知數,得到 [L₀, R₀) ... [L₂₅₅, R₂₅₅) 對 E₁...Eₙ 的函數。
最後套用單調三次內插,變成一對一函數,以求出反函數,
就可以替圖片上每個像素找到E了。

多取幾個像素,就可以解方程式,得到一個大概的對應表。拍越多照、取越多像素,對應表就越準確。但是也得考量執行時間,畢竟民眾希望馬上拍照馬上得到相片。n=14點像素是不錯的數字。

想要量測確實的彩度與亮度,可以使用亮度儀。只不過這裡的主角是數位相機。

Tone Mapping

色調映射。調整相片亮度,盡量接近人眼感受,讓亮處細節、暗處細節同時都能看清楚。此技術可以用在相片、液晶顯示器。

人類視覺,感知的亮度範圍是10⁻⁶ ~ 10⁶ cd/m²,橫跨12個數量級。人眼與人腦可以迅速調節亮度,同時看清楚亮處與暗處。甚至套用特殊視覺效果

一張相片,像素數值只有0到255,共256種離散數值。相片往往是亮的地方一片亮、暗的地方一片暗。

目標是讓數位相機與人眼一樣。

演算法非常多。例如先做HDR Imaging,再做biliteral filter

High Dynamic Range Printing(HDR Printing)

高動態範圍列印。概念類似於色調映射。物理限制從256種像素值,變成了顏料的混色、顏料的反光率。

Focus Stacking

焦點合成。以各種焦距,拍攝多張相片,堆疊成一張清晰相片。

也可以固定焦距,以各種距離,拍攝多張相片,堆疊成一張清晰相片。

Exposure Blending

曝光合成。以各種閃光燈方位,拍攝多張相片,堆疊成一張清晰相片。

效果比Image Sharpening演算法還好。

Focus Sweep(Coded Aaperture)

焦點掃描。以特殊的光圈結構,拍攝一張照片,之後可以漂亮地達成deblurring,得到一張清晰相片。

事先量測各種光圈大小、各種景物深度、各種景物偏角,在底片上面的模糊情況(point spread function),以便設計光圈結構。

http://franchomelendez.com/Uwr/teaching/COMPHO/_LECTURES/L7/coded_photography.html

Flutter Shutter(Coded Exposure)

顫振快門。以特殊的曝光節奏,拍攝一張相片。之後可以漂亮地達成motion deblurring,得到一張清晰相片。

http://stanford.edu/class/ee367/class10.pdf
http://cs.brown.edu/courses/csci1290/lectures/29.pdf

相機的數學知識:Fourier Optics

http://web.stanford.edu/class/ee368/Handouts/Lectures/2015_Autumn/8-LinearProcessingFiltering_16x9.pdf
page 67-71

Camera光場處理(Under Construction)

Light Field

光場。三維空間的每個地點、每種方向,各有一個光線顏色值。空氣所在之處通常是透明、不存在數值。

Light Field Camera

光場相機。有如方格馬賽克的玻璃窗,每一格都可以看到全景,但是視角略有不同。

設置大量底片,底片位置略有差異。同時拍攝大量相片,之後可以重新對焦,得到各種焦距的相片。

http://stanford.edu/class/ee367/class9.pdf

Light Field Transport

http://www.cs.columbia.edu/CAVE/projects/lightfield_transfer/

Camera模型處理(Under Construction!)

概論

講義資料集,知名函式庫如jsfeat

物體分解成點的觀點之下

   camera calibration
1. 一臺相機不動,給定很多的物體的表面座標,拍一張相片,算相機的位置、焦距、方向。

   ( 上古時代 )

   cemera calibration
2. 一臺相機不動,給定平坦物體的表面座標,物體移動,各拍一張相片,算上述東東。

   ( http://research.microsoft.com/en-us/um/people/zhang/Calib/  十幾年前)

   camera tracking
3. 一臺相機一直動,想做是多臺相機,各拍一張相片,算每個相機的位置、焦距、方向。

   ( voodoo / 新版的 blender 有這功能 )

   structure from motion
4. 承上,找到所有物體的3d座標

   point cloud to mesh
5. 承上,物體3d座標重新拼成MESH。

   match move
6. 一臺相機一直動,把東西塞進去場景裡面。

   augmented reality
7. 承上,塞進去的東西可以跟場景互動,例如碰撞偵測。

相機的數學知識:Projective Geometry

一臺相機。

請讀者非常熟悉計算幾何觀點線性代數觀點的二維幾何變換。

點是過原點直線,點的座標是過原點直線的方向向量。直線是過原點平面,直線的座標是過原點平面的法向量。兩點外積得連線,是兩條過原點直線的方向向量的外積,得兩線形成之平面的法向量。兩線外積得交點,是兩個過原點平面的法向量的外積,得平面相交之直線的方向向量。

線ax+by+c=0 ---> (a,b,c)      三個座標值一齊乘上任意倍率,仍等價
點(x,y)     ---> (x,y,1)      三個座標值一齊乘上任意倍率,仍等價
點p在線l上  ---> p dot l = 0
線l穿過點p  ---> l dot p = 0
兩線交點    ---> l1 cross l2
兩點連線    ---> p1 cross p2
兩線平行    ---> l1 cross l2 = (a,b,0)

相機的數學知識:Epipolar Geometry

兩臺相機。主題曲

拍攝多張相片,源自各種方位。找到各圖片的對應線、對應座標。

使用Image Feature Matching,擷取圖片特徵。

相機的數學知識:Trifocal Tensor

三臺相機。三點定位。楊戩。

相機的數學知識:Homogeneous Transformation

Camera Calibration(Camera Resection)

校準。拍攝多張相片,源自各種方位。求出相機參數,例如焦距、曲率。另外求出相機相對於物體的位置,例如平移、旋轉。

Image Registration

配準。拍攝多張相片,源自各種方位。找到每張相片的對應特徵,將特徵座標整合到世界座標系,得到點雲。

Image Alignment

對齊。拍攝多張相片,源自各種方位。相片實施三維幾何變換,整合到世界座標系。可以進一步製造矯正變形的效果。

Camera Tracking

追蹤。拍攝多張相片,源自各種方位。求出每張相片的相機方位,將相機方位整合到世界座標系。可以進一步製造圖片GPS的效果。

Scene Reconstruction(Structure From Motion)

重建。拍攝多張相片(影片),源自各種方位。建立模型。

Scene Compositing(Match Move)

合成。拍攝多張相片(影片),源自各種方位。將多餘物品塞入場景,配合相機方位。

Image Stitching(Image Mosaicing)(Panorama)

縫合。拍攝多張相片,源自各種方位。銜接成一張寬廣相片,稱作環景照。經典範例是谷歌街景這裡有作品

每張相片因為光線角度導致色彩差異、因為廣角鏡頭導致景物扭曲。需要校正亮度、曲線扳成直線、填補像素、裁切圖片。演算法Image DeformationImage Retargeting

Camera繪圖處理(Under Construction!)

Intrinsic Image

真相。去除光線影響,還原物體的真實顏色。

Image-based Modeling

拍攝相片,建立模型。可以想成是3D Graphics的反運算。

平面變立體、2D變3D。根據像素顏色,推論模型形狀。像素值,是素材與光線的綜合結果。去除素材影響,則得光線。再從光線強度,推估光線入射角,得到表面法向量。

這件事聽起來很蠢。想要建立模型,直接使用偵測模型的器材即可,何必使用相機?原因是幾乎人人隨身攜帶智慧型手機,那上面裝著計算機和相機;但是不是人人都有深度感測儀。

Shape From Shading:拍攝一張相片。
Photometric Stereo:拍攝多張相片,相機固定方位,光源源自各種方位。
View Synthesis:拍攝多張相片,相機源自各種方位。

http://www.cs.berkeley.edu/~barron/BarronMalikCVPR2012.pdf

Image-based Lighting

打光。拍攝多張相片,源自各種方位。偵測光源與光強,然後重新打光。

拍攝金屬球:相機對準金屬球中心,拍攝金屬球的半面。根據相片的金屬球的半面的表面亮度,運用光線入射角等於折射角的原理,推測半個環境的光源與光強。調整相機方位(例如水平周轉一圈),以各種方位拍攝,得到整個環境的光源與光強。

拍攝平面鏡:相機拍攝平坦的反光物體,以各種方位拍攝(例如直線平移),推測光源與光強。

拍攝場景:建立模型,運用Graphics領域的光線追蹤演算法,推測光源與光強。

Image-based Rendering

渲染。拍攝多張相片,源自各種方位。繪製模型。

Image-based Texturing

貼材質。在模型上貼材質。

Camera感測器處理(Under Construction!)

Image Demosaicing‎

去馬賽克。感測器產出的數據,轉換成圖片。RAW格式轉換成RGB格式。

數位相機的感光元件,有RGB三種,分別偵測紅光、綠光、藍光的強度,得到0到255的整數。

感光元件宛如方格棋盤,緊密地排列在平面上,不能互相重疊。最常見的排法叫做Bayer arrangement:

將三種感光元件分開來看,有很多漏洞。demosaicing‎就是指填補這些漏洞的數值。演算法非常多,例如一次內插、中位數。

最後將三個方格棋盤疊起來,每個方格都有RGB值,一個方格對應一個像素,形成彩色相片。

目前正在研發新型態的感光元件,可以同時偵測RGB。不久之後的將來應該就不需要demosaicing‎了。

Noise Reduction(Denoising)

去除雜訊。攝影器材不完美、周遭環境不理想,導致像素位置或數值改變。例如燈光昏暗時,相片上面多出許多莫名其妙的顏色。

不同的誤差有不同的解決方式,見招拆招。例如salt-and-pepper noise,可以取鄰近像素的中位數;例如quantization noise,可以使用一次內插。更複雜的演算法例如biliteral filternon-local means

Distortion Reduction(Aberration Reduction)

去除像差。透鏡表面不完美、光線介質不均勻,導致像素位置改變,相片景物扭曲變形。

http://www.cs.cmu.edu/~ILIM/projects/IM/globalopt/research_globalopt.html
http://www.cs.cmu.edu/~ILIM/projects/IM/water/research_water.html
http://www.cs.cmu.edu/~ILIM/projects/IM/document_rectification/document_rectification.html

Blur Reduction(Deblurring)

去除模糊。拍攝照片,沒有對焦,導致像素四散疊加。

Autofocus

自動對焦。目前多以物理方式處置。

Motion Blur Reduction(Motion Deblurring)

去除動態模糊。拍攝相片,相機震動搖晃,相機位置不斷改變,導致像素位移並疊加。令相片清晰。

Image Stabilization

安定。俗稱防手震。拍攝影片,相機震動搖晃,相機位置不斷改變,導致像素位移。令影片擺正對齊。目前多以物理方式處置。

Camera運鏡技巧(Under Construction!)

視覺錯覺

http://en.wikipedia.org/wiki/Anamorphosis

http://www.kongregate.com/games/tobeglad/evo-explores

廠下廣卞廿士十一卉半與本二上旦上二本與半卉一十士廿卞廣下廠下廣卞廿士十一卉半
與本二上旦上二本與半卉一十士廿卞廣下廠下廣卞廿士十一卉半與本二上旦上二本與半
卉一十士廿卞廣下廠下廣卞廿士十一卉半與本二上旦上二本與半卉一十士廿卞廣下廠下

Camera Control

http://www.amazon.com/dp/0123116341