图像传感器与信号处理——SFR算法/ISO 12233解读
圖像傳感器與信號處理——SFR算法/ISO 12233解讀
- 圖像傳感器與信號處理——SFR算法/ISO 12233解讀
- 1. 前言
- 2. 基于視覺的分辨率測量方法
- 3. 基于邊界的SFR算法
- 4. 基于正弦波的SFR算法
圖像傳感器與信號處理——SFR算法/ISO 12233解讀
SFR的全稱是Spatial Frequency Response,空間頻率響應。介紹SFR算法的參考文獻主要是ISO 12233這篇英文文檔。和讀一般的論文感覺不同,文檔讀起來更加晦澀難懂,可能是因為太專業,反正第一遍我是沒有看懂的,后來參考了一些前輩的資料才搞明白SFR算法到底在干嘛。這篇博客我打算結合ISO 12233的部分內容以及一些參考資料,加入一些我自己的理解,對SFR算法進行一個總結。
1. 前言
以我的理解,ISO 12233這篇文章主要是規定了攝像頭分辨率的測量標準,一共有三種方法:基于視覺的分辨率測量方法,基于邊界的SFR算法以及基于正弦波的SFR算法。本博客以基于邊界的SFR算法為主,考慮到全面性,也簡單介紹下基于視覺的分辨率測量方法以及基于正弦波的SFR算法。
(1)那么首先我們得知道什么是分辨率?
在生活中,我們經常將分辨率定義為相機傳感器像素的數量,而在ISO 12233中,將分辨率定義為相機捕捉空間細節的能力,可以分為單值標準和多值標準,單值標準即通過基于視覺的分辨率測量方法測得,而多值標準即通過兩種SFR算法獲得。
(2)單值標準好理解,那么通過SFR算法獲得的多值標準是如何描述分辨率的呢?
這個通過SFR算法獲得的多值標準其實指的就是MTF,全稱是Modulation Transfer Function,調制傳遞函數。該函數是空間頻率的傳輸函數,典型的調制傳遞函數的示意圖如下圖所示:
如圖所示,典型的調制傳遞函數的示意圖都會表現為一條向右衰減的曲線,這是因為空間頻率越高(物體圖案中的細節越多〉,鏡頭對物體的再現能力越弱。可以認為高頻率下的高調制傳遞函數值指的是分辨率,而中等頻率下的調制傳遞函數值指的是對比度,下圖展示了該結論:
(3)最后,既然是測量相機的分辨率,那么具體是如何測量的呢?
在ISO 12233中給出了相機分辨率測量的條件,然后規定了一些列對于光照、白平衡、聚焦的設置要求,這里就不進行贅述,反正文檔里都有。當搭建的環境滿足以上要求后,將Test Chart放在規定位置,用待測的相機拍攝一張圖片,然后用基于視覺的分辨率測量方法或者SFR算法對圖片進行分析,最終獲得該相機的分辨率。當然,對于不同的算法所用的Test Chart也不相同,下面就開始對各個算法進行介紹。
2. 基于視覺的分辨率測量方法
如下圖所示是基于視覺的分辨率測量方法所用的Test Chart:
基于視覺的分辨率測量方法是利用圖像空間頻率過高而產生的混疊效應來進行判定的,如下圖所示待測相機在前文所述的測試環境下拍攝的Test Chart圖像的一部分,可以看到在圖像中箭頭所指的位置,最左側兩條線段出現了混疊效應,根據混疊效應產生位置,通過查表就可以獲得相機分辨率:
基于視覺的分辨率測量方法我覺得需要注意如下兩點:
(1)這種測試方法獲得的結果單位是LW/PH,即line widths per picture height;
(2)文中提到,相機拍攝的Test Chart可能并不是占據整張像,因此獲得的結果也需要按照Test Chart的大小比例進行放縮,例如,圖像中的Test Chart只占據整張圖像的1/2,按照Test Chart獲得的結果是2000LW/PH,那么相機的實際分辨率是4000LW/P。.
3. 基于邊界的SFR算法
如下圖所示是基于邊界的SFR算法所用的Test Chart(ISO 12233 2017版):
基于邊界的SFR算法的介紹可以參考博客SFR算法詳解(二)——斜棱法,這里結合前輩的博客和ISO 12233說一下我的理解:
算法的流程圖如下圖所示:
具體如下:
(1)選取ROI區域
ROI區域的選取如下圖紅色邊框區域所示,選擇的ROI區域由黑白兩部分組成,中間為分界線。分界線與的ROI區域的上下邊框交接點距離左右邊框不得小于兩個像素(其實就是所選取的ROI區域中的分界線不能太過傾斜),此外,ROI區域亮度調制比不得小于20%(其實就是黑白對比明顯)。
(2)進行數據歸一化
數據歸一化處理通過逆光電轉換函數(OECF)/逆Gamma校正對非線性的圖像編碼值(若為888位圖像,即灰度值0?2550-2550?255)進行逆向線性化處理,將其還原為一個類CCD原始光電采樣信號的序列。關于Gamma校正的原理可以參考色彩中的Gamma值是什么,在ISO 12233中這一步表示為:φ(p,r)=aOECF?[DNred]+bOECF?[DNgreen]+cOECF?[DNblue]\varphi(p, r)=a \operatorname{OECF}\left[DN_{\mathrm{red}}\right]+b \operatorname{OECF}\left[DN_{\mathrm{green}}\right]+c \operatorname{OECF}\left[DN_{\mathrm{blue}}\right] φ(p,r)=aOECF[DNred?]+bOECF[DNgreen?]+cOECF[DNblue?]其中DNredDN_{\mathrm{red}}DNred?,DNgreenDN_{\mathrm{green}}DNgreen?,DNblueDN_{\mathrm{blue}}DNblue?分別為各個通道的數字輸出,φ(p,r)\varphi(p, r)φ(p,r)為CCD上第rrr行,第ppp列原始光電采樣信號,aaa,bbb,ccc為各個通道的加權值
(3)計算每一行的矩心
在ISO 12233中通過如下公式進行計算:C(r)=∑p=1P?1p[?(p+1,r)??(p,r)]∑p=1P?1[?(p+1,r)??(p,r)]?0.5C(r)=\frac{\sum_{p=1}^{P-1} p[\phi(p+1, r)-\phi(p, r)]}{\sum_{p=1}^{P-1}[\phi(p+1, r)-\phi(p, r)]}-0.5 C(r)=∑p=1P?1?[?(p+1,r)??(p,r)]∑p=1P?1?p[?(p+1,r)??(p,r)]??0.5其中,PPP為ROI區域的總列數,C(r)C(r)C(r)為第rrr行的矩心位置,這里我們以SFR算法詳解(二)——斜棱法中的例子對公式進行說明,我們假定ROI區域光電采集信號如下表所示(為了方便解釋,這里仍然用圖像編碼值進行舉例說明):01215832362552540031397244253254211181102412522540031812424925325211221140251252255217261602532552543113417125225225412745189249254255\begin{array}{|c|c|c|c|c|c|c|c|} \hline 0 & 1 & 2 & 15 & 83 & 236 & 255 & 254 \\ \hline 0 & 0 & 3 & 13 & 97 & 244 & 253 & 254 \\ \hline 2 & 1 & 1 & 18 & 110 & 241 & 252 & 254 \\ \hline 0 & 0 & 3 & 18 & 124 & 249 & 253 & 252 \\ \hline 1 & 1 & 2 & 21 & 140 & 251 & 252 & 255 \\ \hline 2 & 1 & 7 & 26 & 160 & 253 & 255 & 254 \\ \hline 3 & 1 & 1 & 34 & 171 & 252 & 252 & 254 \\ \hline 1 & 2 & 7 & 45 & 189 & 249 & 254 & 255 \\ \hline \end{array} 00201231?10101112?23132717?1513181821263445?8397110124140160171189?236244241249251253252249?255253252253252255252254?254254254252255254254255??按照公式,首先用每一行相鄰兩列相減,得到下表:11136815319?103108414791?10179213111203151061254?1011911911113?1619134932?1?2033137810215381446051\begin{array}{|c|c|c|c|c|c|c|} \hline 1 & 1 & 13 & 68 & 153 & 19 & -1 \\ \hline 0 & 3 & 10 & 84 & 147 & 9 & 1 \\ \hline-1 & 0 & 17 & 92 & 131 & 11 & 2 \\ \hline 0 & 3 & 15 & 106 & 125 & 4 & -1 \\ \hline 0 & 1 & 19 & 119 & 111 & 1 & 3 \\ \hline-1 & 6 & 19 & 134 & 93 & 2 & -1 \\ \hline-2 & 0 & 33 & 137 & 81 & 0 & 2 \\ \hline 1 & 5 & 38 & 144 & 60 & 5 & 1 \\ \hline \end{array} 10?100?1?21?13031605?1310171519193338?688492106119134137144?153147131125111938160?1991141205??112?13?121??然后對每一行求加權平均獲得矩心,對于第一行來說即C(1)=1?1+2?1+3?13+4?68+5?153+6?19+7??11+1+13+68+153+19?1=4.669291C(1)=\frac{1*1+2*1+3*13+4*68+5*153+6*19+7*-1}{1+1+13+68+153+19-1}=4.669291 C(1)=1+1+13+68+153+19?11?1+2?1+3?13+4?68+5?153+6?19+7??1?=4.669291對每一行都進行同樣的操作及獲得每一行矩心的位置:4.6692914.5984254.5753974.432544.3976384.2619054.2390444.086614\begin{array}{|r|} \hline 4.669291 \\ \hline 4.598425 \\ \hline 4.575397 \\ \hline 4.43254 \\ \hline 4.397638 \\ \hline 4.261905 \\ \hline 4.239044 \\ \hline 4.086614 \\ \hline \end{array} 4.6692914.5984254.5753974.432544.3976384.2619054.2390444.086614??
(4)對矩心進行直線擬合
在ISO 12233中公式如下:m=[ΔrΔC(r)] ̄m=\overline{\left[\frac{\Delta r}{\Delta C(r)}\right]} m=[ΔC(r)Δr?]?這個公式的意思就是求相鄰兩行之間的矩心的斜率,然后對所有斜率求均值mmm,最后獲得函數:S(r)=R/2?rmS(r)=\frac{R / 2-r}{m} S(r)=mR/2?r?其中RRR是總ROI區域的總行數,S(r)S(r)S(r)并不是擬合的直線,但是在后面和其他公式結合起來之后起到了相當于矩心直線的作用。
(5)獲得邊緣擴散函數ESF
這一步相對來說比較復雜,在ISO 12233中公式如下:ESF′(j)=∑r=1R∑p=1P?(p,r)?α(p,r,j)∑r=1R∑p=1Pα(p,r,j)E S F^{\prime}(j)=\frac{\sum_{r=1}^{R} \sum_{p=1}^{P} \phi(p, r) \cdot \alpha(p, r, j)}{\sum_{r=1}^{R} \sum_{p=1}^{P} \alpha(p, r, j)} ESF′(j)=∑r=1R?∑p=1P?α(p,r,j)∑r=1R?∑p=1P??(p,r)?α(p,r,j)?其中函數α(p,r,j)\alpha(p, r, j)α(p,r,j)作用是將上述ROI光電采集信號歸并到邊緣擴散函數ESF中,其定義如下α(p,r,j)={1,?0,125≤[p?S(r)?j]<0,1250,otherwise?\alpha(p, r, j)=\left\{\begin{array}{ll} 1, & -0,125 \leq[p-S(r)-j]<0,125 \\ 0, & \text { otherwise } \end{array}\right. α(p,r,j)={1,0,??0,125≤[p?S(r)?j]<0,125?otherwise??其中jjj為整數,其實也就是邊緣擴散函數的下標,這個公式看起來其實不是很好理解,下面通過繼續演示前文的例子來說明這個過程。上面已經可以得到每行矩心的位置,那么記下來計算各列到矩心的距離,例如第一行第一列有:1?4.669291=?3.6692911-4.669291=-3.669291 1?4.669291=?3.669291則所有距離如下表所示:?3.66929?2.66929?1.66929?0.669290.3307091.3307092.3307093.330709?3.59843?2.59843?1.59843?0.598430.4015751.4015752.4015753.401575?3.5754?2.5754?1.5754?0.57540.4246031.4246032.4246033.424603?3.43254?2.43254?1.43254?0.432540.567461.567462.567463.56746?3.39764?2.39764?1.39764?0.397640.6023621.6023622.6023623.602362?3.2619?2.2619?1.2619?0.26190.7380951.7380952.7380953.738095?3.23904?2.23904?1.23904?0.239040.7609561.7609562.7609563.760956?3.08661?2.08661?1.08661?0.086610.9133861.9133862.9133863.913386\begin{array}{|r|r|r|r|r|r|r|} \hline-3.66929 & -2.66929 & -1.66929 & -0.66929 & 0.330709 & 1.330709 & 2.330709 & 3.330709 \\ \hline-3.59843 & -2.59843 & -1.59843 & -0.59843 & 0.401575 & 1.401575 & 2.401575 & 3.401575 \\ \hline-3.5754 & -2.5754 & -1.5754 & -0.5754 & 0.424603 & 1.424603 & 2.424603 & 3.424603 \\ \hline-3.43254 & -2.43254 & -1.43254 & -0.43254 & 0.56746 & 1.56746 & 2.56746 & 3.56746 \\ \hline-3.39764 & -2.39764 & -1.39764 & -0.39764 & 0.602362 & 1.602362 & 2.602362 & 3.602362 \\ \hline-3.2619 & -2.2619 & -1.2619 & -0.2619 & 0.738095 & 1.738095 & 2.738095 & 3.738095 \\ \hline-3.23904 & -2.23904 & -1.23904 & -0.23904 & 0.760956 & 1.760956 & 2.760956 & 3.760956 \\ \hline-3.08661 & -2.08661 & -1.08661 & -0.08661 & 0.913386 & 1.913386 & 2.913386 & 3.913386 \\ \hline \end{array} ?3.66929?3.59843?3.5754?3.43254?3.39764?3.2619?3.23904?3.08661??2.66929?2.59843?2.5754?2.43254?2.39764?2.2619?2.23904?2.08661??1.66929?1.59843?1.5754?1.43254?1.39764?1.2619?1.23904?1.08661??0.66929?0.59843?0.5754?0.43254?0.39764?0.2619?0.23904?0.08661?0.3307090.4015750.4246030.567460.6023620.7380950.7609560.913386?1.3307091.4015751.4246031.567461.6023621.7380951.7609561.913386?2.3307092.4015752.4246032.567462.6023622.7380952.7609562.913386?3.3307093.4015753.4246033.567463.6023623.7380953.7609563.913386??然后以[?0.125,0.125][-0.125,0.125][?0.125,0.125]為第000區間,以0.250.250.25為區間長度朝正負方向進行延伸,對以上距離進行區間劃分,例如[0.125,0.375][0.125,0.375][0.125,0.375]為第111區間,[?0.375,?0.125][-0.375,-0.125][?0.375,?0.125]為第?1-1?1區間,由此可獲得下表:?15?11?7?315913?14?10?6?2261014?14?10?6?2261014?14?10?6?2261014?14?10?6?2261014?13?9?5?1371115?13?9?5?1371115?12?8?40481216\begin{array}{|c|c|c|c|c|c|c|c|} \hline-15 & -11 & -7 & -3 & 1 & 5 & 9 & 13 \\ \hline-14 & -10 & -6 & -2 & 2 & 6 & 10 & 14 \\ \hline-14 & -10 & -6 & -2 & 2 & 6 & 10 & 14 \\ \hline-14 & -10 & -6 & -2 & 2 & 6 & 10 & 14 \\ \hline-14 & -10 & -6 & -2 & 2 & 6 & 10 & 14 \\ \hline-13 & -9 & -5 & -1 & 3 & 7 & 11 & 15 \\ \hline-13 & -9 & -5 & -1 & 3 & 7 & 11 & 15 \\ \hline-12 & -8 & -4 & 0 & 4 & 8 & 12 & 16 \\ \hline \end{array} ?15?14?14?14?14?13?13?12??11?10?10?10?10?9?9?8??7?6?6?6?6?5?5?4??3?2?2?2?2?1?10?12222334?56666778?910101010111112?1314141414151516??上表中的區間值其實就是公式中定義的參數jjj,最后一步就是按照上表中的區間值對位于同一區間的光電信號進行平均,以第?15-15?15區間為例,即0/1=10/1=10/1=1,以第?14-14?14區間為例,即(0+2+0+1)/4=0.75(0+2+0+1)/4=0.75(0+2+0+1)/4=0.75,那么將獲得邊緣擴散函數ESF如下表所示:x?15?14?13?12?11?10?9?8y00.750210.512x?7?6?5?4?3?2?10y22.25471517.53045x12345678y83117.75165.5189236246.25252.5249x910111213141516y255252.5253.5254254253.75254255\begin{array}{|c|c|c|c|c|c|c|c|c|} \hline \mathrm{x} & -15 & -14 & -13 & -12 & -11 & -10 & -9 & -8 \\ \hline \mathrm{y} & 0 & 0.75 & 0 & 2 & 1 & 0.5 & 1 & 2 \\ \hline \mathrm{x} & -7 & -6 & -5 & -4 & -3 & -2 & -1 & 0 \\ \hline \mathrm{y} & 2 & 2.25 & 4 & 7 & 15 & 17.5 & 30 & 45 \\ \hline \mathrm{x} & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \\ \hline \mathrm{y} & 83 & 117.75 & 165.5 & 189 & 236 & 246.25 & 252.5 & 249 \\ \hline \mathrm{x} & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 \\ \hline \mathrm{y} & 255 & 252.5 & 253.5 & 254 & 254 & 253.75 & 254 & 255 \\ \hline \end{array} xyxyxyxy??150?721839255??140.75?62.252117.7510252.5??130?543165.511253.5??122?47418912254??111?315523613254??100.5?217.56246.2514253.75??91?1307252.515254??82045824916255??進而可以獲得邊緣擴散函數ESF的曲線圖(關于這個下標jjj其實我有點糾結,按照公式推導橫坐標確實會有負值,但是下文中LSF又是從222開始)
(7)四倍超采樣
在獲得邊緣擴散函數的過程中采用的離散距離單位縮小為0.250.250.25個像素,我們將邊緣擴散函數的橫坐標乘以444倍,然后將沒有函數值的橫坐標位置,向前尋找非零的函數值進行替換。這樣將離散距離單位歸為111,但它代表的還0.250.250.25個像素,而這也就是我們說的四倍倍超采樣。
(8)生成線性擴散序列LSF
在ISO 12233中公式如下:LSF?W′(j)=W(j)ESF?′(j+1)?ESF?′(j?1)2,for?j=2,…,N?1\operatorname{LSF}_{W}^{\prime}(j)=W(j) \frac{\operatorname{ESF}^{\prime}(j+1)-\operatorname{ESF}^{\prime}(j-1)}{2}, \text { for } j=2, \dots, \mathrm{N}-1 LSFW′?(j)=W(j)2ESF′(j+1)?ESF′(j?1)?,?for?j=2,…,N?1其中W(j)=0,54+0,46cos?[2π(j?2X)/4X]W(j)=0,54+0,46 \cos [2 \pi(j-2 X) / 4 X] W(j)=0,54+0,46cos[2π(j?2X)/4X]其實線性擴散序列LSF就是邊緣擴散函數ESF均值濾波后再進行微分,在此基礎上通過漢明窗濾波去除噪聲,線性擴散序列LSF的圖像大致如下圖所示:
上面是根據前面的例子計算得到的線性擴散函數LSF,而理想的線性擴散函數LSF應該如下圖所示
(9)歸一化離散傅里葉變換
在ISO 12233中公式如下:e?SFR(k)=D(k)∣∑j=1NLSFW′(j)e?i2πkj/N∑j=1NLSFW′(j)∣,for?k=0,1,2,…,N/2,or?(N+1)/2if?Nis?odd?e-S F R(k)=D(k)\left|\frac{\sum_{j=1}^{N} L S F_{W}^{\prime}(j) e^{-i 2 \pi k j / N}}{\sum_{j=1}^{N} L S F_{W}^{\prime}(j)}\right|, \text { for } k=0,1,2, \ldots, N / 2, \text { or }(N+1) / 2 \text { if } N \text { is odd } e?SFR(k)=D(k)∣∣∣∣∣?∑j=1N?LSFW′?(j)∑j=1N?LSFW′?(j)e?i2πkj/N?∣∣∣∣∣?,?for?k=0,1,2,…,N/2,?or?(N+1)/2?if?N?is?odd?即對上述線性擴散序列應用歸一化離散傅里葉變換即可過得最后的結果,大致如下圖所示:
4. 基于正弦波的SFR算法
如下圖所示是基于正弦波的SFR算法所用的Test Chart:
但是關于這一部分算法,網上能夠參考的資料較少,我反復看了ISO 12233文檔好幾遍,始終沒能理解算法是怎么實現的,因為之后不一定會用到這一部分知識,所以不打算再話更多時間來研究這個算法,如果有同學剛好看到了這篇博客,和我有相同的問題,希望可以相互交流下~當然,如果有大佬能夠直接指點下就最好了!
這篇博客先寫到這里了,歡迎指正交流。
總結
以上是生活随笔為你收集整理的图像传感器与信号处理——SFR算法/ISO 12233解读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文阅读——《Online Photom
- 下一篇: 图像降噪算法——图像噪声模型