來源:視科儀器SCOCIE
相機圖像處理過程
在開始前介紹兩個知識點:
集成信號處理器(Integrated signal processor, ISP):
指的是專門用來處理感光件信號并生成最終圖像的硬件,通常會作為一個模塊集成到片上系統。
典型的圖像過程:
光線進入鏡頭,到達【帶有RGB濾光陣列的傳感器】,得到最原始的電信號。這個信號經過【ISO增益和原始圖像處理】【RGB去馬賽克】和【降噪】,就會得到raw格式的圖片,對它接著進行【白平衡以及色彩空間轉換】和【色彩處理】,并【映射到sRGB輸出】,這時圖片已經呼之欲出,只要【JPEG壓縮】并【保存成文件】,儲存卡里就會增加一張JPEG格式的照片。
接下按照典型的圖像過程依次介紹:
【帶有RGB濾光陣列的傳感器】
CMOS傳感器是相機中用于感受光的部分,幾乎所有的消費級相機的傳感器都是基于CMOS技術。
大家應該都見過類似這樣的傳感器尺寸對比圖,傳感器越大,每個像素上接收到的光就越多,從而相對噪聲就越小。智能手機的傳感器往往是最小的。
相機傳感器其實就是我們理想中的能夠衡量光線強弱的裝置,取同樣長的時間,如果到達傳感器某個像素點的光亮度變成兩倍,那么該點的數值也會變成兩倍。但要注意的是,傳感器只能測量光的強弱,并不能區分顏色,那么我們的彩色是哪里來的呢?這就需要將不同顏色的濾鏡和傳感器結合起來,實現這一過程的技術叫做拜爾陣列(“Bayer” pattern)。
于是我們就得到了具有色彩陣列(color filter array, CFA)的相機傳感器。通過這樣的設計,傳感器得到的數值就可以用來衡量不同通道信號的強弱了。不同的相機有著各自的傳感器陣列,不同陣列的濾光色就構成了相機色彩空間(raw RGB)的三原色,因此相機的raw RGB空間不是一個通用的色彩空間。下面兩張圖展示了不同相機raw RGB空間的原色以及raw圖片的色差。
【ISO增益和原始圖像處理】
傳感器接受光并直接傳過來的信號非常原始,根本不能看,還需要接下來的一系列操作。
首先是ISO增益,這里要先明確一個概念:什么是ISO?
ISO,全稱為International Standardization Organization,它對相機的對光線的敏感程度,也就是感光度,進行了量化規定,而那已經是膠卷時代的事了。對于現代相機,ISO并不是像快門時間或者光圈那樣具有直白的物理含義,而是通過信號處理想要滿足的標準。
為了達到與設置相對應的ISO,相機會將接收到的信號進行增益,增益倍數越大,也就對光線越敏感——當然,也會對噪音越敏感。下圖展示了不同ISO設置下的效果(曝光時間進行了相應的調整)。
這里需要指出的是,我們經常說像素的強度,但其實像素值是沒有單位的,它取決于曝光時間、增益和硬件本身,因此我們實際上關注的是圖像上的相對值,而非絕對值。
原始的圖像處理是指對相機硬件的一系列校準,包括黑光減法、缺陷像素遮蔽和平場矯正加粗樣式。
黑光減法(Black light subtraction)是說對無光像素值的矯正。我們希望沒有接收到光的像素值是0,但由于傳感器本身的噪聲,事情往往不是這樣。同時這個噪聲并不是恒定的,它會隨著溫度的變化而改變。為了進行校準,可以通過黑屏設置一系列無光的像素,得到光學黑的信號,再從整體中減去,實現校準。
缺陷像素遮蔽(Defective pixel mask)是為了處理CMOS傳感器中的壞點。這一校準會在工廠中進行,通過拍攝無光的圖像,來發現數值異常的點來制作遮蔽,被遮蔽處的壞像素會被周圍點的插值所代替(也就是估算出這個點的值)。
平場矯正(Flat-field correction)是由于均勻落在傳感器上的光在圖像中可能并不均勻,這可能是由鏡頭、傳感器在相機中位置誤差等原因引起的,提前記錄這一變化并予以矯正,從而得到一個“平”的圖像。
【RGB去馬賽克】
還記得拜爾陣列嗎?那個聰明的設計讓我們的傳感器得以分辨顏色,但同時也使得我們的圖片變得離散。我們得到了每個像素點的RGB三通道之一的值,但我們實際上希望得到每個像素點的三個值,所以我們需要進行插補。
讓我們來看一個最最簡單的插補算法。
在位置5,拜爾陣列只給了我們R值,G和B就需要用周圍的其他位置來進行估算,這里采用了平均值。可以想見這樣的算法基于“相近位置顏色都差不多”的假設,那么當遇到不同顏色的分界處,這樣的假設自然就不再成立,于是可以加入一個邊界判斷,發展成“邊界感知”型插值算法(聽起來還蠻高大上的)。
上面的算法僅是為了幫助理解,實際上在IPS中進行的算法會復雜也強大得多,有時候去馬賽克的過程還會有一些附加效果,如高光調整(Highlight clipping)、銳化、降噪等。
【降噪】
所有的傳感器都自帶噪音,大多數相機會在模數轉換后加入一個降噪。
而對于高端相機,可以能會根據不同的ISO設置采用不同的降噪策略,當ISO較高時會采取更激進的降噪。手機的相機因為傳感器較小,往往都會采取激進的降噪策略,所以手機自拍比較好看。
這里同樣給出一個最簡單的算法來對降噪有一個感性認識。
噪音往往比較突兀,因此可以使用模糊來減小噪音。但模糊也會影響細節,因此考慮將去掉部分中信號較強的區域補回圖像(甚至會加強以后補回來)。
于是就得到了我們的算法:
【白平衡以及色彩空間轉換】
到這里,我們已經得到了raw RGB空間里的圖片,除了顏色怪異,多少是能看了。接下來就要好好處理一下顏色。
我們希望把raw RGB這一依賴于設備的色彩空間轉換到一個無關設備的色彩空間里。在這里采用CIE XYZ為例子,實際上大多數相機會使用一個叫ProPhoto RGB的色彩空間。
轉換分為兩步,白平衡和色彩空間轉換。
白平衡也就是矯正RGB相等的點(白點),只要對三個通道分別進行放縮就行了,也就是一個對角矩陣的事。
但怎么定義白點呢?
如果由用戶手動設置,這件事就比較簡單。相機一般會提供一些預設的白平衡數據,用戶根據拍照的光照環境進行選擇。下圖是一些預設白平衡的例子。
如果沒有手動指定,就會啟用自動白平衡(auto white balance, AWB)算法,這件事就會變得很難,算法必須要能夠確定任意照片的場景光亮。
這樣的算法往往假設“白色”就是對場景光源的自然反射,如果我們可以定義圖像中哪些像素屬于“白色”,就可以得到場景光照的RGB表示。注意,這里的“白色”并不一定是白色,也有可能是灰色(白色就是最亮狀態的灰色),有時我們會稱這樣的像素點為“消色差”或者“中性區”。
這里介紹兩個簡單的算法,灰色世界算法Gray world和白塊算法White patch。
灰色世界算法假設一個場景的平均反射光是消色差的(也就是灰色的),因此首先算出平均值再進行白平衡轉換即可。
如果白平衡在去馬賽克之前,那么不同通道的像素數量將會不一樣。
前面說過,每個像素絕對值意義不大,有相對的就行,所以可以將綠通道取1。
接下來看白塊算法,這個算法假設場景中的高亮點就是我們想要找的白點。也就是以最大值的RGB作為白色的數值。
基于這樣的假設,算法工作如下:
上圖是這兩種算法的效果展示。
這兩種算法都是非常基礎的算法,當圖像有大面積單色時很容易失敗(比如藍天),對于AWB的算法研究有很多論文研究,相機往往也會有自己獨特的白平衡算法。注意,這些算法并不一定為了復原場景光照而設計,而是會出于審美考慮,留有一些色差。
進行了白平衡,接下來就要進行色彩空間轉換(color space transform, CST),將圖片從raw RGB空間轉換到獨立于設備的色彩空間,如CIE XYZ。
白平衡僅能努力接近真實的色彩恒定,因此在相機上進行的色彩空間轉換還會包含一個依賴于工廠預設的插值。在工廠中會對不同的CCT預設色彩轉換矩陣CST,在實際處理時,用場景的CCT根據預設的CST矩陣進行插值,得到想要的CST矩陣。
【顏色操作】
現在我們得到了處于CIE XYZ空間的圖片,距離我們常見的處于sRGB的jpg文件只剩一步之遙,但在此之前,還有一個讓每家相機各顯身手的舞臺,這就是【顏色操作】步驟。
各家相機會施展不同的秘法,來讓照片變得更加好看。這個步驟有很多叫法:色彩調控、沖洗階段(photo-finishing)、色彩渲染、YUV處理引擎。一般會允許用戶對這個階段進行一定的控制和選擇,下圖來自佳能的用戶手冊。
這些色彩操作可以分為兩類,三維和一維的,三維變換同時處理三個通道,一維曲線則是作用于每個通道,下圖是一些變換的例子。這里說到的查詢表(look up table, LUT)就相當于函數或者說映射。
可以看到,這些變換幾乎都是非線性的變換,經過了這一步,像素值的強弱就不再能夠反映場景中光線的強弱了(當然可能在此之前就已經有過非線性操作了)。
【映射到sRGB輸出】
經過了這一步,我們可以將圖片【映射到sRGB輸出】了。這在之前已經解釋過,會先從CIE XYZ映射到linear sRGB,再經過伽馬變換(2.2)得到sRGB空間。
【JPEG壓縮】
接著要進行【JPEG壓縮】,這是為了減小文件大小而進行的有損壓縮。
其中較難理解的是離散余弦變換(Discrete Cosine Transform , DCT)變換的步驟,在這里做感性介紹,幫助理解。
DCT可以理解為對傅里葉變換的采樣,變換結果都是實數。傅里葉變換能夠將原本在時域的信號轉換到頻域上,對于圖像來說,就是將原本在空間上分布的像素值信號,轉變為不同頻率的二維三角函數的帶權重加和。同時結合一個經驗:低頻的信息要比高頻的信號更重要(可以想象一個低頻余弦和高頻余弦加和,結果就是一個長了毛刺的山坡——山坡的信息更為重要),從而進行一個量化的操作(相當于濾波),將更多低頻的信息保留,從而減小數值尺度的同時盡可能保留重要信息,這之后會再進行編碼,提取數據的特征存儲,從而實現更高的壓縮比例。
在DCT上進行量化操作的數量會影響品質,操作越多,得到的圖像質量就越低。在相機中往往可以選擇jpeg格式的質量。
【保存成文件】
接下來就是【保存成文件】了,給照片加上日期時間、相機設定、輸出的色彩空間、地理位置等等信息,寫到存儲卡里,就大功告成了。
國際色彩聯盟(International Color Consortium, ICC)是一個負責制定色彩操作國際標準的組織,下圖是來自ICC-ISO 22028的流程圖,可以看到更多關于處理流程的細節。在這里,與raw RGB相關的RGB值都被稱為“場景相關的”(scene referred),而轉換到sRGB空間以后,就被稱為“輸出相關的”(output referred)。
還要注意的是,sRGB色彩空間和JPEG正在慢慢被取代,sRGB是為了90年代的顯示器設計的,太過于古老了。JPEG也在逐步被壓縮率更高的HEIC編碼取代。蘋果設備上已經開始用heic替代jpeg了,同時蘋果設備使用Display P3的色彩空間,它是一種數字電影提倡的DCI-P3空間的變體,比sRGB要大25%,也包含了伽馬變換。越來越多的安卓設備也會開始支持這個色彩空間。
再次強調一下,上面的這些步驟僅僅是一個指南,現代相機中的處理流程會更加復雜。對于不同品牌/型號的相機,操作的順序可能會有不同,(如在去馬賽克之后再白平衡),操作的方法也可能不一樣(如把銳化和去馬賽克結合)。
而對于工業/機器視覺相機,其ISP往往提供的是最小程度的處理,如有的只會進行白平衡,再在raw RGB空間上進行伽馬變換,因此很多時候輸出的圖像仍然在設備的色彩空間內。
審核編輯:湯梓紅
-
處理器
+關注
關注
68文章
19259瀏覽量
229653 -
圖像處理
+關注
關注
27文章
1289瀏覽量
56723 -
相機
+關注
關注
4文章
1350瀏覽量
53581 -
片上系統
+關注
關注
0文章
186瀏覽量
26807
原文標題:相機圖像處理過程
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論