sensor曝光分為逐行曝光和全局曝光。逐行曝光的sensor 技術(shù)難度較全局曝光sensor 低,價(jià)格便宜,且分辨率較大,對(duì)于一些靜態(tài)圖像拍攝是不錯(cuò)的選擇。
先看看,什么是幀?
簡(jiǎn)單來(lái)說(shuō),一幀就是一副圖像。顯示器上面我們看到的畫面就是一幀一幀的顯示的。只不過(guò)顯示的速度足夠快,人眼以為畫面是運(yùn)動(dòng)的。
(說(shuō)個(gè)現(xiàn)實(shí)中的例子,我們看武打片經(jīng)常看到慢動(dòng)作或者快動(dòng)作,它們都是怎么實(shí)現(xiàn)的呢?簡(jiǎn)單來(lái)說(shuō)就是,比如導(dǎo)演拍攝的時(shí)候以一秒30幀來(lái)拍攝的,播放給觀眾看的時(shí)候,如果以一秒15幀的速度播放,觀眾看起來(lái)就是快放;如果以每秒60幀的速度播放,觀眾看起來(lái)就是慢放。)
具體地,在將光信號(hào)轉(zhuǎn)換為電信號(hào)的掃描過(guò)程中,掃描總是從圖像的左上角開(kāi)始,水平向前行進(jìn),同時(shí)掃描點(diǎn)也以較慢的速率向下移動(dòng)。當(dāng)掃描點(diǎn)到達(dá)圖像右側(cè)邊緣時(shí),掃描點(diǎn)快速返回左側(cè),重新開(kāi)始在第1行的起點(diǎn)下面進(jìn)行第2行掃描,行與行之間的返回過(guò)程稱為水平消隱(也叫行消隱,H_BLANK)。一幅完整的圖像掃描信號(hào),是由水平消隱間隔分開(kāi)的行信號(hào)序列構(gòu)成,稱為一幀。
如下圖所示,是一幀的結(jié)構(gòu)圖,在最下面部分有一部分是V_BLANK。V_BLANK的由來(lái)是因?yàn)閽呙椟c(diǎn)掃描完一幀后,要從圖像的右下角返回到圖像的左上角,開(kāi)始新一幀的掃描,會(huì)有一段間隔時(shí)間,這一時(shí)間間隔,叫做垂直消隱(也稱場(chǎng)消隱,V_BLANK),V_BLANK的作用通常用來(lái)調(diào)節(jié)幀率。

sensor逐行曝光基本原理
sensor逐行曝光從第一行開(kāi)始曝光,一個(gè)行周期結(jié)束之后第二行才開(kāi)始曝光。依次類推,經(jīng)過(guò)N-1 行后第N 行開(kāi)始曝光。第一行曝光結(jié)束后開(kāi)始讀出數(shù)據(jù),讀出一行需要一行周期時(shí)間(含行消隱時(shí)間,即H_Blank)。至第一行完全讀出后,第二行剛好開(kāi)始讀出,依次類推,當(dāng)?shù)贜-1 行讀完后,第N 行開(kāi)始讀出,直到整幅圖像完全讀出。

sensor全局曝光基本原理
全局曝光Sensor的所有行同時(shí)開(kāi)始曝光,并同時(shí)結(jié)束曝光,在曝光結(jié)束后,Sensor將所有電子從感光區(qū)轉(zhuǎn)到存儲(chǔ)區(qū),之后逐行地讀出像素?cái)?shù)據(jù)。 這樣曝光的好處是獲得圖像每一行的曝光時(shí)間比較一致,并且在拍攝運(yùn)動(dòng)物體時(shí)圖像不會(huì)出現(xiàn)偏移和歪斜。

與sensor曝光相關(guān)的計(jì)算
1. line_time的計(jì)算:
line_time的計(jì)算公式:line_time = line_length / pclk
和這個(gè)公式相關(guān)的是下面三個(gè)變量的定義先說(shuō)下
? ? a). line_length: 一行的長(zhǎng)度(包含h_blank, h_blank變化,line_time也會(huì)變化,幀率也會(huì)變化)
? ? b). pclk: 是控制像素輸出的時(shí)鐘,即pixel采樣時(shí)鐘,一個(gè)clk采集一個(gè)像素點(diǎn) , 單位MHz。表示是每個(gè)單位時(shí)間內(nèi)(每秒)采樣的pixel數(shù)量
? ? c). line_time: 曝光一行的時(shí)間
所以,曝光一行的時(shí)間等于一行的長(zhǎng)度除以曝光一個(gè)像素需要的時(shí)間。
如果你不能理解,簡(jiǎn)單類比一下我們小學(xué)學(xué)過(guò)的距離計(jì)算公式:路程 = 速度 × 時(shí)間。要計(jì)算小明跑完400米操場(chǎng)花了多長(zhǎng)時(shí)間,是不是可以拿小明跑步的路程400米除以小明每秒鐘跑步的距離來(lái)計(jì)算。那么,把跑道換成一個(gè)個(gè)排列起來(lái)的像素不也是一樣的嗎?linetime就相當(dāng)于上面要計(jì)算的小明跑完400米要花的時(shí)間,line_length就相當(dāng)于400米的路程,pclk就相當(dāng)于跑步的速度,每個(gè)單位時(shí)間小明能跑多遠(yuǎn)。
2. exposure_time的計(jì)算:
exposure_time的計(jì)算公式:exposure_time = exposure_line * line_time
同樣和這個(gè)公式有關(guān)的幾個(gè)定義先說(shuō)下:
? ? a). exposure_time: 曝光時(shí)間。指這一幀曝光了多長(zhǎng)時(shí)間。
? ? b). exposure_line: 字面意思是曝光行。值得注意的是,曝光行不是指一次性曝光多少行,對(duì)于逐行曝光的sensor來(lái)說(shuō),永遠(yuǎn)都是一次曝光一行。所以,曝光行是指這一幀曝光了多少行。
? ? c): line_time: 曝光一行的時(shí)間
所以,可以用line_time即曝光一行的時(shí)間,乘以曝光了的行數(shù)exposure_line,等于整個(gè)曝光花費(fèi)的時(shí)間。
注:
1) 調(diào)節(jié)exposure_time曝光時(shí)間是通過(guò)寫exposure_line寄存器實(shí)現(xiàn)的;
2) 曝光時(shí)間以行長(zhǎng)為單位
3) 一般我們要求曝光時(shí)間是10ms的整數(shù)倍,不然會(huì)有flicker現(xiàn)象。原因是我國(guó)的交流電的頻率是50Hz, 一個(gè)完整的正弦波周期的時(shí)間20ms, 正弦波的上下均一樣,取一半,所以曝光時(shí)間要是10ms的整數(shù)倍
3. fps幀率的計(jì)算:
frame_length = Vsync = Dummy Line = VTotal = VTS = V_Size + V_Blank? // 幀長(zhǎng);? 不占用曝光時(shí)間,即可以通過(guò)調(diào)節(jié)V_Blank,調(diào)節(jié)幀長(zhǎng),從而改變幀率,但不會(huì)改變畫面的亮度(曝光)
line_length = Hsync = Dummy Pixel = HTotal = HTS = H_Size + H_Blank // 行長(zhǎng);? ? 會(huì)占用曝光時(shí)間,即可以通過(guò)調(diào)節(jié)H_Blank, 調(diào)節(jié)行長(zhǎng)
fps的計(jì)算公式:fps =? pclk / (VTS * HTS )= pclk / (frame_length * line_length) = 1 / (frame_length * line_time)
注:fps即表示1秒內(nèi)幀數(shù),此公式中l(wèi)ine_time單位是秒
同樣和這個(gè)公式有關(guān)的幾個(gè)定義先說(shuō)下:
? ? a). pclk: 是控制像素輸出的時(shí)鐘,即pixel采樣時(shí)鐘,單位MHz。表示是每個(gè)單位時(shí)間內(nèi)采樣的pixel數(shù)量
? ? b). frame_length:? 一幀的行數(shù)(包含v_blank)
? ? c). line_length: 一行的長(zhǎng)度(包含h_blank)
這里frame_length * line_length的意思是用一幀的行數(shù)乘以一行的長(zhǎng)度,即相乘得到一幀圖像總共有多少像素。pclk是像素時(shí)鐘,單位是MHz。如100MHz,就表示每秒鐘可以采集100M個(gè)像數(shù)。用pclk除以frame_length * line_length兩者之積,即是算1秒鐘內(nèi)采集的100M個(gè)像數(shù)點(diǎn)可以分成多少幀(frame_length * line_time = 一幀的時(shí)間)。
注:
1). line_time一組setting只有一個(gè)值,一般是不變的,可看做常數(shù),所以調(diào)節(jié)幀率是通過(guò)寫frame_length寄存器,即調(diào)節(jié)frame_length實(shí)現(xiàn)的。
2). 同理,回到上一個(gè)知識(shí)點(diǎn) 2. exposure_time的計(jì)算:可以發(fā)現(xiàn),exposure_time = exposure_line * line_time,而line_time一般是常數(shù)。所以,調(diào)節(jié)exposure_time曝光時(shí)間是通過(guò)寫exposure_line寄存器實(shí)現(xiàn)的,即通過(guò)寫曝光實(shí)現(xiàn)。
4.其他相關(guān)(V_Blank、dummy_line、frame_offset)
dummy_line:用來(lái)填充v_blank的行。
frame_offset:最小的dummy_line,是指一幀曝光結(jié)束到下次準(zhǔn)備好重新開(kāi)始曝光的時(shí)間
1. 幾個(gè)公式
frame_length = exposure_line + dummy_line
frame_length ≥ exposure_line +frame_offset
min_shutter<= shutter <= frame_length- frame_offset
5.幀長(zhǎng)的計(jì)算方式
回顧上述幾點(diǎn),我們知道一幀的計(jì)算方式:
1). frame_length(幀長(zhǎng)) = exposure_line(曝光行) + dummy_line
2). frame_offset是指最小的dummy_line。
dummy_line = dummy_line > frame_offset? > dummy _line : frame_offset
3). Max Exposure = VTS - frame_offset
6. 索尼sony也有自己的計(jì)算方式,但是本質(zhì)是一樣的: (IMX307為例)
1). VMAX(幀長(zhǎng),同VTS一個(gè)概念) = exposure_line(曝光行)? + (SHS1 + 1)
2). SHS1本意是表示Shutter釋放的時(shí)機(jī),以XVS信號(hào)為參照系,SHS1的值越大,說(shuō)明Shutter釋放得越晚,即dummy_line越大,曝光行越少. 該公式及說(shuō)明記載于Datasheet p.77
3). 結(jié)合第5點(diǎn)和第6點(diǎn),我們可以知道。dummy_line = SHS1+1
4). 對(duì)于IMX307這顆sensor來(lái)說(shuō),SHS1的范圍為1~(VMAX-2),記載于Datasheet p.78的表格
即dummy_line的范圍為2 ~ (VMAX-1), 即frame_offset的值為2。
7. 其他說(shuō)明
1).?MIPI rate與PCLK無(wú)關(guān)
2).?MIPI rate只與有效像素點(diǎn)有關(guān)。
比如,在4K(3840*2160) 60fps場(chǎng)景中,使用3Trio?CPHY,可以使用的最小的mipi rate為:726Msps/trio
公式: Mipi rate =每個(gè)trio每秒傳輸?shù)臄?shù)量量 = 每秒的有效數(shù)據(jù)量 / 每個(gè)trio的symbol / 3 trio 。
每秒的有效數(shù)據(jù)量 =?3840?×?2160?×?60?×?10bit = 4976Mbit;
每個(gè)symbol = 16 / 7 bit,即1 Sym = 16 / 7 bit;
對(duì)于3 Trio的CPHY,每Trio每秒的傳輸速率?= 4976Mbit? / (16 / 7) bit? per sym /?3 trio / 秒 = 726M ?per sym / 秒? per Trio = 726Msps / Trio
注:
1). A MIPI C-PHY lane is known as a Trio.
2). 16 / 7 的含義:C-PHY傳輸單位是symbol,16bit編碼成7個(gè)symbol,所以1個(gè)symbol=16/7 bits.
3).?MIPI C-PHY在走3條lane傳輸?shù)那闆r下,每條lane使用3線的傳輸模式,速率為2.5G symbol/s(V1.0),這樣的模式可以實(shí)現(xiàn)每個(gè)symbol傳輸2.28個(gè)bits,可實(shí)現(xiàn)高達(dá)2.28×2.5×3=17.1G bps的帶寬
4). 實(shí)例:
MIPI rate配置相關(guān)寄存器為:0x0312(分頻)和 0x0310(倍頻)
當(dāng)前配置:{0x0312, 0x0001},? ?{0x0310, 0x015E}
注:寫入0x0312寄存器的值是2的次方倍,這里是1,所以是2倍分頻。
主輸入時(shí)鐘(MCLK)為24MHz,分頻后為12MHz,倍頻后為12MHz × 0x15E = 4200MHz = 4200MHz,轉(zhuǎn)換成mipi rate, 除以2 就是2100Msps