上一篇的最後一句是:「去馬賽克連量測標準都沒有——ISO 12233 量的是最終影像的解析度,那是去馬賽克、鏡頭、抗鋸齒濾鏡、銳化四件事混在一起的結果,拆不開。」這句話有兩個地方要修,而且第二個比第一個嚴重得多。
第一個修法很單純:有標準,只是不叫解析度標準。 ISO/TS 19567-2:2019(Photography — Digital cameras — Part 2: Texture analysis using stochastic pattern)用隨機圖樣量紋理再現,IEEE 1858 的 texture acutance 把它壓成一個分數,ISO 12233 自己從 2017 年起也多了一條對銳化不敏感的正弦法。上一篇把「沒有演算法標準」誤讀成「連量都沒人量」,不對。
第二個修法才是今天的主線。問題不在四件事混在一起,問題在 ISO 12233 用來量解析度的圖案全都是中性灰的——而在一個完全中性的場景上,去馬賽克這個問題根本不存在。 這不是修辭。我把它算出來了:一個最笨的「直通」去馬賽克器(把馬賽克陣列原封不動複製到 R、G、B 三個通道),在中性正弦光柵上的重建誤差是 RMSE = 0.00000000,所有頻率都是,包括 Nyquist 以上。同一張圖換成等亮度的色度光柵(R 加、B 減、G 不動),Malvar-He-Cutler 在 0.20 cyc/px 上的 PSNR 從中性時的 32.51 dB 掉到 14.70 dB——同樣的頻率、同樣的調變振幅、同樣的演算法,差 17.81 dB,也就是 7.77 倍的均方根誤差。
還有一個順序要更正。上一篇那張管線總表把「去馬賽克」排在「白平衡」前面。真實的實作全部反過來:LibRaw 的 scale_colors()(白平衡就在裡面)跑在 interpolate() 之前,darktable 的 pixelpipe 也是 white balance 在 demosaic 之前。而且這個順序不是慣例問題,它是整個色差先驗的支點——用典型日光的 raw 白平衡倍率算,一塊場景中性的灰,在白平衡之前帶著相當於亮度 27.5 % 的 φ_C1 色差訊號,而且是全頻寬的;白平衡之後,精確等於 0。
今天把這幾件事算完:為什麼中性圖上最笨的演算法贏過最聰明的、ISO 12233 四個版本各改了什麼、斜邊法被銳化灌水多少(Imatest 實測是 2.8 倍)、dead leaves 的三條公式與它們各自的病、acutance 怎麼把 MTF 壓成一個數字,以及當像素縮到 0.7 µm 之後,繞射怎麼把整個問題關掉。
📖 學
一、更正 1:白平衡在去馬賽克之前,而且這不是細節
先把事實擺清楚。LibRaw 的處理流程有一串固定的回呼點,順序是 pre_scalecolors_cb(在 scale_colors() 之前)→ pre_preinterpolate_cb(在內插之前)→ post_interpolate_cb(在去馬賽克之後)。白平衡就在 scale_colors() 裡面。LibRaw 論壇上的官方回覆說得更直接:
Some interpolation methods are based on proper lightness calculation. For these methods, demosaic w/o prior white balance will provide wrong (and visually very bad) results.
darktable 那邊一樣:pixelpipe 的模組順序是固定的,raw 資料先做白平衡,才做去馬賽克,而且文件明講早期模組因為技術限制不能被拖動重排。
所以上一篇那張表把去馬賽克排在白平衡前面,是把 DNG 規格描述的「對應關係」誤讀成「執行順序」。DNG Specification 第五章講的是怎麼從 raw 值映射到線性參考值,第六章講怎麼從相機色彩空間映射到 XYZ,它描述的是一組數學關係,不是一條流水線的時間順序。實作有相當大的自由決定誰先誰後,而在去馬賽克與白平衡這一對上,所有人都選了同一個順序。
為什麼都選同一個?把數字算出來就懂了。用上一篇推的那組分解:
φ_L = ( R + 2G + B ) / 4
φ_C1 = ( R − 2G + B ) / 4
φ_C2 = ( R − B ) / 4
現在考慮一塊場景上完全中性的灰——比如 ISO 12233 圖卡上的一塊灰階,或者 dead leaves 圖卡 18 % 的灰底。它在 raw 檔裡是什麼樣子?不是 R = G = B。感測器的三條光譜響應對日光的積分不一樣,綠色通道通常最高,所以 raw 值是歪的,要靠白平衡倍率拉回來。拿一組典型的日光 raw 倍率(R ×2.13、G ×1.00、B ×1.50,這是示範值,實際值逐機型不同)反推,一塊場景中性、亮度為 1 的灰在 raw 裡是:
R = 1/2.13 = 0.4695
G = 1/1.00 = 1.0000
B = 1/1.50 = 0.6667
代進分解:
| 狀態 | raw R | raw G | raw B | φ_L | φ_C1 | φ_C1 / φ_L | φ_C2 | φ_C2 / φ_L |
|---|---|---|---|---|---|---|---|---|
| 白平衡之前(日光) | 0.4695 | 1.0000 | 0.6667 | 0.7840 | −0.2160 | 27.5 % | −0.0493 | 6.3 % |
| 白平衡之後 | 1.0000 | 1.0000 | 1.0000 | 1.0000 | 0.0000 | 0.0 % | 0.0000 | 0.0 % |
看 φ_C1 / φ_L 那一欄。白平衡之前,一塊中性灰帶著佔亮度 27.5 % 的 φ_C1 訊號。而且——這才是關鍵——這個色差訊號在空間上跟亮度完全成正比。
因為比例是常數:、、,其中 由白平衡倍率決定、與位置無關。所以
φ_C1(x,y) = (a − 2b + c)/4 · L(x,y)
φ_C2(x,y) = (a − c)/4 · L(x,y)
色差的空間頻譜和亮度的空間頻譜一模一樣。 亮度有多寬,色差就有多寬。
去馬賽克唯一的先驗——上一篇說的「色差是空間低頻」——在這裡完全失效,而且是在最常見、最無辜的場景內容上失效:一面白牆、一張灰階圖卡、一片陰天的天空。如果你在白平衡之前做去馬賽克,每一塊中性區域都會被演算法當成「高頻色差」來處理,而它處理高頻色差的方式就是把它壓掉或者猜錯。
白平衡倍率一乘下去,, 和 同時精確歸零。先驗從「完全錯」變成「完全對」。
所以白平衡不是為了讓顏色正確才先做的,它是為了讓去馬賽克的先驗成立才先做的。 這件事在 LibRaw 的那句「demosaic w/o prior white balance will provide wrong (and visually very bad) results」裡面,只是沒人把理由寫出來。
二、中性測試圖上,去馬賽克這個問題不存在
把上面那件事推到極限。假設白平衡之後每個像素都滿足 ——一張純灰階的圖。那麼感測器讀到的馬賽克陣列是:
I_CFA = m_R·R + m_G·G + m_B·B
= (m_R + m_G + m_B)·V
= 1 · V
= V(x,y)
因為三個遮罩互斥且窮盡,總和恆等於 1。
馬賽克陣列就是原圖本身。 不是近似、不是內插得很好,是恆等。一個把 I_CFA 原封不動複製到三個通道的「直通」演算法,誤差 0,在任何空間頻率上都是 0,包括遠超過 Nyquist 的頻率。跑出來確認(256×256、水平正弦光柵、振幅 0.4、滿刻度 1.0、RGGB、八個隨機相位平均):
| 頻率 (cyc/px) | 直通 RMSE(中性) | 直通 RMSE(等亮度色度) |
|---|---|---|
| 0.05 | 0.00000000 | 0.3057 |
| 0.10 | 0.00000000 | 0.3055 |
| 0.15 | 0.00000000 | 0.3056 |
| 0.20 | 0.00000000 | 0.3055 |
| 0.25 | 0.00000000 | 0.3055 |
| 0.30 | 0.00000000 | 0.3055 |
| 0.35 | 0.00000000 | 0.3054 |
| 0.40 | 0.00000000 | 0.3055 |
| 0.45 | 0.00000000 | 0.3053 |
左邊是零,右邊是完全失敗(振幅 0.4 的訊號,誤差 0.305,幾乎等於把訊號整個丟掉)。
跟上一篇那張頻寬表對起來讀:上一篇說色差半寬 是自由參數, 時亮度拿到 81.25 % 的頻譜面積。中性場景就是 的極限,亮度拿到全部 。上一篇說那是理論極限,現在可以說得更強:那個極限可以被一行程式碼精確達成。
把真實演算法放進來,事情變得有趣:
| 演算法 | 中性光柵 @ 0.20 cyc/px | 等亮度色度光柵 @ 0.20 cyc/px |
|---|---|---|
| 直通(R=G=B=CFA) | ∞ dB(RMSE = 0) | 10.3 dB |
| 雙線性 | 18.45 dB | 18.96 dB |
| 色差內插(先 G 再內插 R−G、B−G) | 23.84 dB | 18.96 dB |
| Malvar-He-Cutler | 32.51 dB | 14.70 dB |
三件事。
第一,在標準測試圖的場景類型上,最笨的演算法是唯一完美的。 Malvar-He-Cutler 在 0.20 cyc/px 的中性光柵上做到 32.51 dB,換算成 8 位元是 6.04 個階的均方根誤差;直通是 0 個階。MHC 是業界公認的好演算法,它在這裡輸給了四行程式碼。
理由不神祕:MHC 是固定 α 的演算法,濾波器係數寫死,無條件替色差保留一塊頻寬,不管這張圖有沒有色差。中性圖上那塊頻寬是白留的,代價就是亮度細節被切掉一點。
第二,那 17.81 dB 的落差才是去馬賽克的真實性能區間。 8 位元階數是 6.04 階對 46.94 階。如果有人拿中性圖的數字說「這個去馬賽克器誤差只有 6 個階」,那個數字是真的,而且完全誤導——和上一篇「平均 ΔE 1.416、最大 29.392」是同一個病:量測協定選在先驗成立的地方。
第三,也是最反直覺的:在色度細紋上,Malvar-He-Cutler 比雙線性還差。 14.70 dB 對 18.96 dB,MHC 的誤差是雙線性的 1.63 倍。
這不是 bug。MHC 的優勢來自梯度修正項——假設不同通道的邊緣位置一致,用綠通道的梯度修正紅藍通道。等亮度色度光柵上綠通道是常數(沒有梯度)、紅藍反相變化,這個假設成立的是反面。雙線性沒有先驗,所以它在任何地方都平庸,也在任何地方都不會特別災難。
先驗不是免費的。它在成立的地方給你 14 dB,在不成立的地方跟你收 4 dB。 這件事上一篇只推到「先驗失效時輸出偽色」,沒算出代價的正負號。代價是負的。
三、更正 2:MHC 自帶銳化,所以「拆不開」是對的,但理由和我說的不一樣
上一篇說 ISO 12233 量的是「去馬賽克、鏡頭、抗鋸齒濾鏡、銳化四件事混在一起」。結論對,機制講錯了——我當時的說法像是在說四個低通濾波器相乘。實際上更糟:去馬賽克本身就是一個銳化器。 同一組模擬,看中性光柵上的 MTF(輸出振幅 / 輸入振幅):
| 頻率 (cyc/px) | 雙線性 MTF | 色差內插 MTF | MHC MTF |
|---|---|---|---|
| 0.05 | 0.998 | 1.023 | 1.023 |
| 0.10 | 0.955 | 1.043 | 1.043 |
| 0.15 | 0.896 | 1.058 | 1.058 |
| 0.20 | 0.826 | 1.050 | 1.050 |
| 0.25 | 0.750 | 1.001 | 0.997 |
| 0.30 | 0.673 | 0.898 | 0.898 |
| 0.35 | 0.603 | 0.766 | 0.766 |
| 0.40 | 0.547 | 0.635 | 0.635 |
| 0.45 | 0.511 | 0.536 | 0.536 |
看 MHC 那一欄的前四列:MTF 大於 1,最高在 0.15 cyc/px 的 1.058。
MTF 超過 1 只有一個意思:它在放大那個頻率。MHC 的梯度修正項本質上是高通濾波器(那些 −1、−1.5 的負係數就是),設計目的是補回內插損失,而它補過頭了 5.8 %。
這在真實影像上看不出來,因為太小;但在斜邊 SFR 量測上它直接加在讀數上。你拿 ISO 12233 圖卡量出來的 MTF,其中最多 5.8 % 不是鏡頭也不是感測器,是去馬賽克器。 而這還只是 MHC 這種保守的線性演算法,現代 ISP 的去馬賽克模組帶更激進的邊緣增強。
所以「拆不開」的真正理由是:去馬賽克不是鏈條上的一個低通環節,它是一個同時含低通與高通、行為隨內容改變的非線性環節。它不只讓 SFR 讀數變模糊,它讓 SFR 讀數變大。
四、ISO 12233 四個版本改了什麼
既然要談量測,先把這份標準的演化講清楚。
2000(第一版):高對比(≥ 40:1)雙曲線楔形加條紋圖。已經不是標準的正式內容,但那張圖卡到今天還在流通。
2014(第二版):三種圖卡——CIPA 楔形、低對比斜邊 SFR、西門子星。關鍵改變是斜邊對比從 ≥40:1 降到 4:1。理由很直接:40:1 的邊在真實相機上幾乎必然裁切(暗端壓到 0、亮端頂到 255),裁切之後的邊緣擴散函數已經不是系統響應了。4:1 讓相機留在比較線性的區間,對曝光誤差、gamma 估計誤差、過度銳化都比較不敏感,也更接近真實場景的邊緣對比。
2017(第三版):維持三圖卡架構,把正弦西門子星法(s-SFR)寫成正式方法,並允許用 ISO 14524 的 20 塊灰階環做 OECF。
2023(第四版):「斜方塊」換成四週期斜星(four-cycle slanted star),讓量測可以在對角方向做——同時給出徑向(sagittal)與切向(tangential)的 SFR,而不只是水平與垂直。楔形從雙曲線改成對數,讓同一張圖卡涵蓋更寬的解析度範圍。另加 2 塊色彩色塊,對應 24 色 ColorChecker 第二列的第 8 與第 12 塊。
這份標準的適用範圍寫著:「applicable to the measurement of both monochrome and colour cameras」。
讀完第二節之後,這句話可以換一個讀法:在這張圖卡上,單色相機和彩色相機本來就是同一台相機。
那 2 塊色彩色塊是用來量色彩準確度的,不是量解析度的。四版下來,用來量解析度的所有特徵——斜邊、斜星、楔形、西門子星——始終是中性的。
五、斜邊法的三個前提,現代 ISP 一個都不守
斜邊法(e-SFR)的數學很漂亮:拍一條和像素格線夾約 5 度的邊,每一列的邊緣位置差一點點,把所有列按次像素位置重排,就得到超取樣的邊緣擴散函數(ESF);微分得到線擴散函數(LSF);傅立葉變換得到 SFR。用一條邊換到遠超過感測器取樣率的頻率解析度。
這套推導有三個前提。線性:ESF 微分成 LSF 假設系統響應線性,中間有 gamma、色調曲線或裁切,微分出來的就不是 LSF——4:1 對比正是為了這件事,但現代 ISP 的色調曲線是逐區、內容自適應的,線性在任何一段都不真正成立。位移不變:把不同列的取樣併成一條超取樣 ESF,前提是每一列被同樣處理,而內容自適應的銳化與降噪明顯違反這點。雜訊可忽略:微分是高通,會放大雜訊,高 ISO 下這仍是主要誤差來源。
這三件事的後果,Image Engineering 說得很白:e-SFR「affected by certain factors such as sharpening」,而 s-SFR(正弦西門子星)「is much more robust against sharpening and other image enhancement algorithms」,而且不需要 raw 資料就能用。
那麼銳化到底灌水多少? Imatest 有一組實測,拿兩支手機比:
| 量測方法 | Phone B 的銳化增益倍率 |
|---|---|
| Spilled Coins(dead leaves) | 1.8 × |
| 斜邊(slanted edge) | 2.8 × |
同一支手機,斜邊讀數被灌水 2.8 倍,dead leaves 讀數被灌水 1.8 倍。比值 。
而 Imatest 對這支手機的實際畫質評語是:它「completely obliterates low contrast texture」——低對比紋理被完全抹掉——但 MTF 讀數看起來還有競爭力,因為高對比邊界附近的銳化假影本身帶有高頻能量,把測到的 MTF 頂上去。放大看會看到「glaringly obvious (and ugly)」的光暈。
這個 1.56 的比值是可以拿來用的診斷量。 兩種方法量同一台相機,差得越多,代表越多的「銳利度」是場景相依的加工,不是光學與感測器給的。這正好回答上一篇說的「拆不開」:單獨看一個數字拆不開,看兩個數字的差就拆開了一部分。
(同一頁還提到 Phone B 在 Log F-Contrast 圖卡上「drops drastically for modulation < 0.15」——調變度低於 0.15 直接崩掉,這是激進降噪的簽名,而 dead leaves 的傅立葉分析沒抓到。所以要多圖卡交叉驗證。)
六、Dead leaves:為什麼要用一張隨機圓盤圖
Dead leaves(落葉模型)出自數學形態學:把一堆隨機大小、位置、灰度的平面形狀(通常是圓盤)依時間順序一片片丟到平面上,後丟的遮住先丟的。這個「遮擋」機制是關鍵——它在所有尺度、所有方向上自然產生邊緣,而且各種對比度都有,包括低對比的細邊,那正是降噪最愛吃掉的東西。
為什麼是這個圖? 因為它的功率譜是冪律 ,和真實自然影像一樣()。這給它兩個別的圖卡沒有的性質:尺度不變(放大縮小統計性質不變,所以結果不依賴圖卡擺多遠),以及——這才是實質理由——它長得像自然場景,所以內容自適應的 ISP 沒辦法把它辨識成「測試圖」然後特殊處理。 傳統圖卡(邊、正弦、均勻色塊)在統計上和自然場景差很遠,而現代 ISP 就是靠統計特徵決定怎麼處理一塊區域。拿一張長得像圖卡的圖卡去量一個會辨識圖卡的系統,量到的是它對圖卡的行為。
從 dead leaves 影像算紋理 MTF,目前有三條路,病各自不同:
方法一:直接 FFT 比值。
Î / Ô = OTF + N̂ / Ô
MTF_texture1 = | Î / Ô |
其中 是拍到的影像的傅立葉變換, 是參考圖(圖卡原始檔)的傅立葉變換。這條最乾淨,但它要求拍到的影像和參考圖次像素級對齊。沒對齊,結果按 Imatest 的說法是「obviously meaningless」。
方法二(Cao 等人):功率譜比上冪律模型。
MTF_texture2 ≈ √( |Î|² / T̂^k )
用冪律 取代未知的參考譜,不需要對齊。病在於:在高頻端參考能量趨近零時,分母變小,雜訊讓分子不趨近零,結果產生正偏差。 簡單說,雜訊會把紋理 MTF 頂高,甚至頂過 1。這就是為什麼一台噪點大的相機可以在 dead leaves 上拿到漂亮的分數——雜訊被算成了紋理。
方法三(Kirk 等人,2014):交叉功率譜。
MTF_texture3 ≈ | Î · Ô* / T̂^k |
用拍到的影像和參考圖的互相關(頻域上就是交叉功率譜密度,CPSD)。關鍵在於雜訊和參考圖不相關,所以在取期望值之後雜訊項會消掉,而訊號項不會。這就是 Kirk、Herzer、Artmann、Kunz 在 Description of texture loss using the dead leaves target: current issues and a new intrinsic approach(Proc. SPIE 9023, 2014)裡提的「intrinsic approach」,也是後來進 ISO/TS 19567-2 的那一條。
ISO/TS 19567-2:2019 還做了一件很少見但很必要的事:ISO/TC 42 委員會直接提供那張 dead leaves 圖卡的原始檔,向量格式和高解析點陣格式都有。理由就是方法一和方法三都要參考圖,而參考圖不一樣,答案就不一樣——這在「大家能對同一個結果達成共識」這個標準的核心目的上是硬需求。
圖卡本身的規格(以 Imatest 按 CPIQ 做的版本為例):對比 3:1,18 % 灰底,周圍 8 個對位標記、16 塊 OECF 灰階、以及 2:1 與 4:1 的斜邊。
注意那個 3:1 對比,比斜邊的 4:1 還低。這是刻意的:紋理損失的定義就是低對比細節的損失,圖卡對比太高降噪就不出手,量不到東西。
七、Texture acutance:把一條 MTF 曲線壓成一個數字
MTF 是一條曲線,但採購、評測、產品規格都要一個數字。IEEE 1858(Camera Phone Image Quality,CPIQ)給的答案是 texture acutance:用人眼的對比敏感度函數當權重,對 MTF 做加權積分。
A = ∫₀^Nyquist CSF(ν) · MTF_1D(ν) dν
CSF(ν) = a · ν^c · e^(−bν) , b = 0.2 , c = 0.8
是正規化常數,讓 CSF 在 0 到 Nyquist 上的積分等於 1,所以一個完美系統(MTF ≡ 1)的 acutance 正好是 1.0。
先看這條 CSF 的形狀。求極值:
d/dν [ ν^0.8 · e^(−0.2ν) ] = 0
0.8·ν^(−0.2)·e^(−0.2ν) − 0.2·ν^0.8·e^(−0.2ν) = 0
0.8/ν = 0.2
ν = c/b = 0.8/0.2 = 4.0 cycles/degree
峰值在 4 cyc/deg。 這是整個 acutance 指標的重心所在:人眼對每度 4 個週期的細節最敏感,再細下去敏感度掉,再粗上去也掉。
的單位是「每視角度的週期數」,所以 acutance 必然依賴觀看條件。換算式是
α = (180/π) · arctan( P / D ) [每像素張角,單位:度]
是顯示時一個影像像素的實體尺寸, 是觀看距離。Nyquist(0.5 cyc/px)換算成 cyc/deg 就是 。
算兩個常見情境:
| 觀看條件 | P | D | α (度/像素) | Nyquist (cyc/deg) |
|---|---|---|---|---|
| 螢幕 100 % 檢視(約 127 ppi)@ 50 cm | 0.200 mm | 500 mm | 0.02292 | 21.82 |
| 300 ppi 印刷 @ 25 cm | 0.0846 mm | 250 mm | 0.01939 | 25.79 |
現在做一個示範計算,把第五節那件事量化。我設三條 MTF(這是我自己設的模型,不是任何一台相機的實測):
系統本身 MTF_sys(f) = exp( −(f/0.35)² )
銳化增益 G(f) = 1 + 0.8 · [ 1 − exp( −2π²·0.8²·f² ) ] (USM,半徑 0.8 px,量 0.8)
降噪衰減 D(f) = 1 / [ 1 + (f/0.25)² ]
邊上量到的是 MTF_sys × G(ISP 把它當高對比邊,全力銳化);紋理上量到的是 MTF_sys × G × D(ISP 把低對比紋理當雜訊,銳化之後又降噪)。
在螢幕 100 % 檢視的條件下:
| 量到的是什麼 | Nyquist 處 MTF | MTF 最大值 | Acutance |
|---|---|---|---|
| 系統本身(拿不到的真值) | 0.130 | 1.000 | 0.7360 |
| 斜邊量到的 | 0.229 | 1.009 | 0.8881 |
| 紋理量到的 | 0.046 | 1.000 | 0.6378 |
斜邊 0.8881,紋理 0.6378,中間隔著 0.2503。 而真值 0.7360 落在兩者之間——斜邊高估了 0.152,紋理低估了 0.098。
注意「MTF 最大值 1.009」那一格:銳化讓斜邊 MTF 超過 1,這是可以直接目視的灌水簽名,不需要任何參考值。任何一份 SFR 報告,只要曲線爬過 1.0,那份報告量到的就不只是系統。
換到 300 ppi 印刷條件,三個數字變成 0.7764 / 0.9165 / 0.6869——全部往上移,因為印刷把像素壓小,Nyquist 推到 25.79 cyc/deg,更多高頻掉進 CSF 權重低的區域。同一張照片在螢幕與紙上的 acutance 差 0.04 到 0.05,這不是誤差,是指標定義本來就含觀看條件。
(上面三個 acutance 值來自我自己設的 MTF 模型與自己寫的數值積分,是示範不是量測。可信的是機制與量級:銳化與降噪各自把 acutance 推開 0.1 到 0.15,而兩種量法之間的落差有 0.25。)
八、更正 3:「中性圖卡」這個洞,2012 年就有人指出來了
第二節那個結論——標準用中性圖卡,所以量不到去馬賽克的真正失敗模式——我原本以為是自己推出來的。查下去才發現這是一篇十四年前的論文的第一句話。
Uwe Artmann 與 Dietmar Wueller,Improving texture loss measurement: spatial frequency response based on a colored target,Proc. SPIE 8293, Image Quality and System Performance IX,2012 年 1 月。摘要指出的核心問題是:紋理損失量測所用的圖卡在色彩上是中性的,而這可能正是測試實驗室的結果與實際使用經驗對不上的原因。 他們的做法就是把 dead leaves 圖卡換成彩色的。
所以這不是新發現,是一個被明確寫下來、發表在同儕審查的會議論文上、然後在十四年裡沒進標準的缺口。上一篇的收尾說「標準只負責讓大家能對同一個結果達成共識,不負責讓大家做出同一個結果」;今天可以再補一層:標準連「量哪一種場景」都是選出來的,而選中性是因為中性可重現、可印刷、可校準、對光源不敏感——不是因為中性能代表攝影。
彩色圖卡難在哪?難在參考值。中性灰階可以用光度計量、可以照 ISO 14524 的 OECF 協定校準,而且反射率平坦所以對光源光譜幾乎不敏感。彩色圖卡的反射光譜一旦不平坦,量到的結果就和光源光譜、和相機光譜響應糾纏在一起——也就是上一篇整篇在講的同色異譜。要量彩色解析度,得先解決彩色準確度;而彩色準確度的 Vora 值平均只有 0.918。這是一個循環。
我沒查到 2026 年有任何 ISO 或 IEEE 標準定義色度 SFR(chroma MTF)或等亮度目標的解析度量測。已標存疑——有可能存在而我沒查到,也有可能在工作組裡但還沒發表。但可以確定的是 ISO 12233:2023 沒有,ISO/TS 19567-2:2019 沒有。
順帶補一個相關但不同的東西:彩色摩爾紋是有在量的,用反射式的雙曲線楔形圖卡。 但那是目視判讀——看在哪一個楔形寬度上開始出現彩色條紋——不是一個 MTF 曲線,也不是一個分數。它告訴你「這台相機在某個空間頻率以上會產生偽色」,不告訴你「這台相機保留了多少色度細節」。
而且 dead leaves 的紋理 MTF 可以逐通道算(R、G、B 各一條),但這跟色度 MTF 不是同一件事。逐通道 MTF 量的是三條亮度軸;色度 MTF 要量的是三條軸之間的差。 中性圖卡上三條軸幾乎重合,逐通道算出三條幾乎一樣的曲線,那個「幾乎」反映的是縱向色差和白平衡殘差,不是去馬賽克的色度損失。
九、0.7 µm 的像素把整個問題關掉了
上面所有討論都預設一件事:感測器會混疊。也就是說,鏡頭送到感光面上的空間頻率超過了 Nyquist,所以才需要抗鋸齒濾鏡、才需要聰明的去馬賽克器。
但這件事是有條件的,而條件正在改變。
繞射對圓形光圈的截止頻率是
f_c = 1 / (λ · N) [cycles/mm]
超過這個頻率,鏡頭送出去的調變度精確等於零——不是「很小」,是零,這是繞射的硬截止。取 λ = 550 nm:
而繞射 MTF(非同調、圓形光圈、無像差)是
MTF(s) = (2/π) · [ arccos(s) − s·√(1 − s²) ] , s = f / f_c
把感測器的 Nyquist 頻率代進去,看鏡頭在感測器的 Nyquist 上還送得出多少調變:
45 MP 全片幅(4.35 µm 像素,Nyquist = 114.9 cy/mm):
| 光圈 | 繞射截止 (cy/mm) | s | Nyquist 處 MTF |
|---|---|---|---|
| f/2.8 | 649.4 | 0.177 | 77.6 % |
| f/4 | 454.5 | 0.253 | 68.1 % |
| f/5.6 | 324.7 | 0.354 | 55.9 % |
| f/8 | 227.3 | 0.506 | 38.5 % |
| f/11 | 165.3 | 0.695 | 19.2 % |
| f/16 | 113.6 | ≥1 | 0.0 % |
Sony LYTIA 901(0.7 µm 像素,Nyquist = 714.3 cy/mm):
| 光圈 | 繞射截止 (cy/mm) | s | Nyquist 處 MTF |
|---|---|---|---|
| f/1.8 | 1010.1 | 0.707 | 18.2 % |
| f/2.55 | 714.3 | 1.000 | 0.0 % |
| f/2.8 | 649.4 | ≥1 | 0.0 % |
兩張表放在一起讀。45 MP 全片幅在 f/11 以下的所有光圈,都是結構性的混疊機器。 f/2.8 時鏡頭在 Nyquist 上還有 77.6 % 的調變度可以送——而且這是完美無像差鏡頭的數字。近十年多數機身把光學低通濾鏡(OLPF)拿掉了,所以那 77.6 % 完整打在 Bayer 排列上。混疊、偽色、摩爾紋不是缺陷,是設計選擇的必然結果。要讓繞射單獨完成低通,得縮到 f/16,而那時整張影像的 MTF 已經爛掉了。
0.7 µm 的手機感測器,在 f/2.55 以上完全不可能混疊。 手機主鏡頭常見的 f/1.6–f/1.8,繞射在 Nyquist 上也只剩 25.6 % 與 18.2 %,而真實手機鏡頭在那個尺度上受像差主導,實際更低。
推論一下(這是我的推論,不是廠商的說法):把像素縮到繞射斑以下,是對去馬賽克問題最徹底的工程解答。 OLPF 的邏輯是「花掉解析度買正確性」,0.7 µm 的邏輯是「你本來就沒有那個解析度,所以不用花」——而 OLPF 是一片要錢要空間的雙折射晶體,小像素是免費的副產品。
代價要講清楚:2 億畫素在光學上不是 2 億畫素的解析度。它的用途在別的地方——像素合併(binning)換訊噪比、數位裁切換等效焦距、在 Nyquist 附近超取樣以改善去馬賽克的條件。上一篇算過最大 SNR = √飽和電子數,而 0.7 µm 的井很淺,所以 binning 不是行銷,是這個設計成立的前提。
十、去馬賽克演算法之間差多少:把 dB 換成看得到的東西
最後把文獻上的 PSNR 數字翻譯成人話。
PSNR 和均方根誤差的關係是 (8 位元),所以
| PSNR | 均方根誤差(256 階中的階數) |
|---|---|
| 14.70 dB | 46.94 |
| 18.45 dB | 30.48 |
| 32.51 dB | 6.04 |
| 41.05 dB | 2.26 |
| 44.26 dB | 1.56 |
文獻上的實測(Kodak 24 張標準測試集):
- Malvar-He-Cutler 相對雙線性:綠通道 +6.34 dB、紅藍通道平均 +7.69 dB。換算成誤差比: 倍、 倍。
- 學習式方法:DMCNN-VD 在 Kodak 上 41.05 dB;NLS 42.85 dB;較新的方法報到 44.26 dB。
所以從 2004 年的 Malvar 到 2026 年最好的學習式方法,Kodak 上的平均誤差大約從 2 到 3 個階降到 1.56 個階。
這個數字有兩個問題。Kodak 資料集是掃描的底片:內容偏平滑、色度細節少,底片粒子本身就是一層低通。用色度細節稀薄的測試集比較「色度細節的重建能力」,和用中性圖卡量解析度是同一個病。而且這是平均——上一篇算過 Canon 5D2 平均 ΔE 1.416、最大 29.392,最大是平均的 20.8 倍。去馬賽克是同一個分布形狀:平坦區域所有演算法幾乎一樣,細紋區域天差地遠,而平坦像素佔絕大多數。
所以誠實的說法是:學習式去馬賽克在平均上比 Malvar 好大約 1 個階(256 階中),在先驗失效的地方好多少,Kodak 的平均值答不出來。 而先驗失效的地方正好就是你會抱怨的地方——那件細條紋襯衫、那片屋瓦、那個電路板。
這跟上一篇的結論完全一致,只是換了一個量。上一篇說「再大的神經網路也只是換一個更好的先驗」;今天可以補上:而且衡量它的那把尺,也是在先驗成立的地方刻的。
十一、修訂後的量測總表
把上一篇那張表的最後兩欄拆得更細:
| 階段 | 演算法有標準嗎 | 量測有標準嗎 | 量測用什麼場景 | 有量到失敗模式嗎 |
|---|---|---|---|---|
| 光譜 → 三個濾鏡響應 | 無 | ISO 17321(SMI / SSF) | ColorChecker 18 塊,單一光源 | 部分(色塊光譜有限) |
| CFA 空間取樣 | 無 | — | — | 否 |
| 白平衡(在去馬賽克之前) | DNG 定資料格式,不定時機 | — | — | 否 |
| 去馬賽克 | 完全沒有 | ISO 12233(e-SFR / s-SFR) | 中性斜邊 / 斜星 / 楔形 | 否——中性場景上此問題不存在 |
| 去馬賽克 + 降噪 + 銳化(合併) | 無 | ISO/TS 19567-2、IEEE 1858 | 中性 dead leaves,3:1 對比 | 部分(量到紋理損失,量不到色度) |
| 彩色混疊 | 無 | 反射式雙曲線楔形 | 中性楔形 | 目視判讀,無數值 |
| 色度解析度 | 無 | 查不到 | — | — |
| 電荷 → DN | 無 | EMVA 1288 / ISO 15739 | 均勻灰場 | 是(雜訊是主要失敗模式) |
| ColorMatrix / ForwardMatrix | DNG Ch.6 | — | — | 可逆,無失敗模式 |
看第四列和倒數第三列。整張表上唯一「連量都沒在量」的格子,正好是去馬賽克唯一會真正失敗的地方。
上一篇的結論是「沒有規格的地方,正好就是不可逆的地方」。加上今天這一層:
有量測標準的地方,量測協定被選在該階段不會失敗的工作點上。不是造假,是可重現性的代價——中性、平坦、低彩度的目標才印得準、才對光源不敏感、才能讓兩個實驗室對得上。可重現性和代表性在這裡是直接衝突的,而標準每一次都選了可重現性。
這也解釋了為什麼實驗室評測分數和使用者體感時常對不上:不是評測作弊,是評測量的那個場景在定義上不含爭議內容,而爭議內容正是差異所在。Artmann 與 Wueller 在 2012 年就是這樣寫的。
🧠 記
白平衡在去馬賽克之前,不是慣例是前提。 LibRaw 的 scale_colors() 跑在 interpolate() 之前,darktable 的 pixelpipe 也是 white balance 在 demosaic 之前。官方說法是「demosaic w/o prior white balance will provide wrong (and visually very bad) results」。
理由是先驗的支點。 用日光 raw 倍率算,一塊場景中性的灰在白平衡前帶著佔亮度 27.5 % 的 φ_C1,而且因為 、、 比例固定,色差的空間頻譜和亮度完全一樣寬。白平衡之後精確歸零。「色差是低頻」這個先驗,是白平衡乘出來的。
中性場景上馬賽克陣列就是原圖。 ,所以 。「直通」演算法(CFA 直接複製到三通道)誤差精確為 0,所有頻率都是,包括 Nyquist 以上——這是上一篇那張頻寬表 的極限,可以被一行程式碼達成。所以最笨的演算法在標準測試圖上是唯一完美的:MHC 在 0.20 cyc/px 的中性光柵上是 32.51 dB(6.04 個階),直通是 ∞。MHC 固定 α,無條件替色差留頻寬,中性圖上那塊是白留的。
17.81 dB 是去馬賽克的真實性能區間。 MHC 在 0.20 cyc/px:中性 32.51 dB、等亮度色度 14.70 dB,7.77 倍的均方根誤差,6.04 階對 46.94 階;同樣的頻率、振幅、演算法。而在色度細紋上 MHC 比雙線性還差 4.26 dB(1.63 倍誤差)——它用綠通道梯度修正紅藍,而等亮度色度光柵上綠是常數。先驗在成立時給你 14 dB,在不成立時跟你收 4 dB。
去馬賽克本身是銳化器。 MHC 在中性光柵上的 MTF 在 0.15 cyc/px 達到 1.058——超過 1 的 5.8 % 來自梯度修正項的高通成分。斜邊 SFR 讀數裡有一部分是去馬賽克器,不是鏡頭也不是感測器。
ISO 12233 四版的解析度特徵始終是中性的。 2000 版 ≥40:1 楔形;2014 版斜邊降到 4:1(為了留在線性區、避免裁切);2017 版正式納入 s-SFR;2023 版把斜方塊換成四週期斜星以支援對角量測、楔形改對數、加 2 塊 ColorChecker 色塊(那 2 塊量色彩準確度,不量解析度)。標準說它「適用於單色與彩色相機」——讀法是:在這張圖卡上兩者是同一台相機。
斜邊法的三個前提現代 ISP 一個都不守:線性(逐區色調曲線)、位移不變(內容自適應銳化)、雜訊可忽略(微分是高通)。Image Engineering 說 e-SFR 受銳化影響,s-SFR 對銳化「much more robust」。實測的銳化灌水倍率:斜邊 2.8 ×、dead leaves 1.8 ×(Imatest 的 Phone B),比值 1.56。兩種方法的差就是「有多少銳利度是場景相依的加工」的量度;而那支手機實際上「completely obliterates low contrast texture」。
紋理 MTF 三條公式三種病:直接 FFT 比值最乾淨但要次像素對齊;Cao 的功率譜冪律法不用對齊但雜訊會把 MTF 頂高(噪點大的相機反而拿高分);Kirk 等人 2014 的交叉功率譜法用互相關把雜訊消掉,這條進了 ISO/TS 19567-2。委員會直接發布圖卡原始檔,因為參考不同答案就不同。
Texture acutance = ∫ CSF·MTF dν,CSF(ν) = a·ν^0.8·e^(−0.2ν),峰值在 ν = c/b = 4 cyc/deg,依賴觀看條件 。
中性圖卡這個洞,Artmann 與 Wueller 在 2012 年(SPIE 8293)就寫了:紋理損失量測所用的圖卡在色彩上是中性的,這可能正是實驗室結果與實際體驗對不上的原因。十四年過去,標準版本仍是中性的。這不是新發現,是一個被明確發表、然後在十四年裡沒進標準的缺口。
要量彩色解析度,得先解決彩色準確度——而 Vora 值平均只有 0.918。這是一個循環。 逐通道紋理 MTF 不是色度 MTF(前者是三條亮度軸,後者要量軸之間的差),而彩色摩爾紋只有目視判讀、沒有數值。2026 年查不到任何色度 SFR 標準(已標存疑)。
45 MP 全片幅在 f/11 以下全是結構性的混疊機器。 Nyquist 114.9 cy/mm,f/2.8 時繞射在 Nyquist 上還送得出 77.6 % 的調變,要繞射單獨完成低通得縮到 f/16——而 OLPF 早就被拿掉了。0.7 µm 像素則在 f/2.55 以上完全不可能混疊(Nyquist 714.3 cy/mm,繞射截止在 f/2.55 剛好等於它;f/1.8 時 Nyquist 處只剩 18.2 %)。把像素縮到繞射斑以下,是對去馬賽克問題最徹底的工程解答(我的推論)。代價:2 億畫素不是 2 億畫素的解析度,而井淺使 binning 成為前提而非行銷。
PSNR 換算:44.26 dB = 1.56 個階(256 階中),41.05 dB = 2.26 階,32 dB = 6.41 階。 Malvar 相對雙線性:綠 +6.34 dB(2.08 倍)、紅藍 +7.69 dB(2.42 倍)。但 Kodak 是掃描底片,色度細節稀薄,而且那是平均,和上一篇「平均 ΔE 1.416、最大 29.392」同一個分布形狀。學習式去馬賽克在平均上比 Malvar 好約 1 個階;在先驗失效的地方好多少,Kodak 的平均值答不出來。
修訂後的規律:有量測標準的地方,量測協定被選在該階段不會失敗的工作點上。 不是造假,是可重現性的代價——中性、平坦、低彩度的目標才印得準、才對光源不敏感、才能讓兩個實驗室對得上。可重現性和代表性直接衝突,而標準每一次都選可重現性。這就是評測分數和體感對不上的結構原因。
✍️ 實踐
把中性對色度那組模擬自己跑一次。 這是今天最短、結論最硬的實驗,只要 numpy,不到四十行:
- 建一張 256×256、水平正弦光柵、振幅 0.4、中心值 0.5 的影像,兩個版本:中性版(R = G = B = 0.5 + 0.4·sin)與等亮度色度版(R = 0.5 + 0.4·sin、G = 0.5、B = 0.5 − 0.4·sin)。
- 用 RGGB 遮罩取樣成單通道 CFA 陣列。
- 跑三個去馬賽克器:直通(三個通道都等於 CFA)、雙線性、Malvar-He-Cutler(5×5 線性濾波器,四組係數在 Malvar 2004 那篇裡)。
- 對每個頻率算重建 RMSE,並對八到二十個隨機相位取平均——相位一定要隨機,否則在 0.25 cyc/px 那一點紅藍子晶格剛好落在取樣零點上,你會得到一個純粹是相位造成的假結果。
先確認直通在中性版上的誤差是 0.00000000(所有頻率);如果是很小但非零的數字,檢查遮罩是不是互斥且窮盡。再確認 MHC 在中性版 0.20 cyc/px 落在 32 dB 附近、色度版落在 15 dB 附近。
做完這個實驗,你對任何一份 MTF 報告的讀法會永久改變——你會先問一句:那張圖卡是什麼顏色的。
算出你自己機身的混疊終止光圈。 :4.35 µm 得到 f/15.8,5.94 µm 得到 f/21.6,3.2 µm 得到 f/11.6。在這個光圈以下,你的相機一定會混疊,和鏡頭好壞無關。 然後拍一組同場景、同對焦、從最大光圈縮到 f/16 的序列,找一個有細密規則紋理的被攝物(紗窗、遠處磚牆、西裝布料),看偽色在哪一格消失。理論值和實測值通常差一到兩級,因為真實鏡頭有像差,而像差本身就是低通。
用同一張 raw 檔切換去馬賽克器。 這直接回答上一篇說的「拆不開」——鏡頭、感測器、抗鋸齒濾鏡、曝光全部被同一個檔案釘死,唯一的變因就是演算法。 拆得開,只是標準沒在拆。用 rawpy 的 demosaic_algorithm,或 LibRaw 的 -q 0(雙線性)、-q 1(VNG)、-q 2(PPG)、-q 3(AHD)、LMMSE、DCB,同一張 raw 輸出五個版本,全部關掉銳化與降噪,然後:
- 先找一塊平坦低彩度的區域(天空、白牆),算五個版本兩兩之間的差。應該幾乎是零——這證明你的流程設定對了。
- 再找一塊高彩度細紋(磚牆、花布、屋瓦、遠處的欄杆),算同樣的差。這一塊的差就是去馬賽克演算法在這張照片上的貢獻。
- 把兩塊的差值放大 10 倍存成圖來看。你會看到偽色與摩爾紋只出現在第二塊。
拍一張同時含中性與彩色細紋的圖,自己驗證那 17.81 dB。 印一張同樣線寬、一組黑白一組紅青的條紋,同距離同光線拍一張,用同一個演算法解出來看哪一組先崩。黑白那組會一路撐到 Nyquist,彩色那組在一半的頻率就開始出現偽色。
量一次你手機的「斜邊與紋理落差」。 需要一張同時含 4:1 斜邊與 dead leaves 的圖卡,同一次曝光拍下來,分別算 MTF,兩條曲線的比值就是那個 1.56——比值越大,代表越多的銳利度是 ISP 針對高對比邊緣加工出來的。沒有圖卡也有粗版:找一個同時有高對比邊(建築輪廓、窗框)和低對比細紋(遠處樹葉、草地、混凝土)的場景拍一張,100 % 放大看兩處。邊緣銳到有光暈、樹葉糊成一團塑膠,你不需要任何儀器就知道那個比值很大。
🔗 延伸學習
- ISO 12233 — Resolution and SFR(Imatest) — 四個版本(2000 / 2014 / 2017 / 2023)的逐版差異寫得最完整的一份公開資料:高對比楔形被淘汰的理由、4:1 斜邊對比的動機、2023 版把斜方塊換成四週期斜星以支援對角量測、對數楔形、以及新增的 ColorChecker 色塊位置。讀的時候留意一件事——從頭到尾,用來量解析度的特徵都是中性的。
- Dead Leaves measurement issue(Imatest) — 那組 Phone B 的實測:斜邊銳化增益 2.8 倍、Spilled Coins 1.8 倍,而它實際上把低對比紋理完全抹掉。最有價值的是方法論建議:單一圖卡會被騙,要用斜邊 + Log F-Contrast + dead leaves 交叉驗證,並說明每一種圖卡各自抓得到什麼。
- Introduction to Texture MTF(Strolls with my Dog) — 把紋理 MTF 的三條公式並排推導:直接 FFT 比值、Cao 的功率譜冪律法、Kirk 等人的交叉功率譜法,每一條的偏差來源都寫清楚,還附了合成 dead leaves 加高斯模糊加手機雜訊的對照實驗。要理解「為什麼雜訊會把紋理 MTF 頂高」,這是最直接的一份。
- Dead leaves model for measuring texture quality on a digital camera(DXOMARK / EI 2010) — dead leaves 進入影像品質量測的源頭論文之一:隨機遮擋模型、冪律功率譜、尺度不變性,以及為什麼這個統計性質讓內容自適應的 ISP 無法針對性處理。
💬 問 AI
我在研究數位相機的「解析度量測」這一段,想釐清一件事:現行標準到底量到了什麼、沒量到什麼。請盡量引用標準條文編號、論文出處或參考實作原始碼,並嚴格區分「來源明確這樣說」與「你自己的推論」。
第一組:管線順序
1. 白平衡與去馬賽克的執行順序。我查到 LibRaw 的 scale_colors() 跑在 interpolate() 之前、darktable 的 pixelpipe 也是 white balance 在 demosaic 之前。有沒有反例——任何一個主流 raw 處理器或手機 ISP 是先去馬賽克再白平衡的?如果有,它怎麼處理「未白平衡的中性區域帶有全頻寬色差」這個問題?
2. Adobe DNG Specification 第五、六章描述的是資料映射還是執行順序?DNG SDK 原始碼裡這兩步的先後在哪個檔案哪個函式?另外:白平衡倍率偏離正確值對去馬賽克品質的影響,有沒有人量化過?
第二組:標準用中性目標這件事
4. ISO 12233 各版本的解析度特徵(斜邊、斜星、楔形、西門子星)是否全部是中性的?標準原文有沒有規定這些特徵的色度容差?2023 版新增的兩塊 ColorChecker 色塊,標準怎麼說它們的用途?
5. 我的論證是:白平衡後的完全中性場景上,I_CFA = V(x,y) 恆等,所以一個把 CFA 直接複製到三通道的演算法誤差為零,去馬賽克問題在標準目標上結構性地不存在。這個論證有沒有漏洞?有沒有論文正式陳述過這一點?
6. Artmann & Wueller 2012(SPIE 8293)提出彩色 dead leaves 目標之後,ISO/TC 42 或 IEEE CPIQ 工作組有沒有後續?2026 年有沒有任何標準或技術規範定義色度 SFR / chroma MTF / 等亮度目標的解析度量測?如果沒有,工作組公開的理由是什麼?
第三組:量測方法的偏差
7. Imatest 報的「斜邊銳化增益 2.8 倍、dead leaves 1.8 倍」有沒有更系統性的研究?兩種方法的比值能不能當成正式的「ISP 加工量」指標?有沒有跨裝置的統計分布?
8. 去馬賽克本身對斜邊 SFR 讀數的貢獻,有沒有人單獨量過?我模擬 MHC 在中性光柵上的 MTF 峰值是 1.058,這個量級對嗎?AHD、DCB、LMMSE 與學習式的各是多少?
9. IEEE 1858 的 texture acutance:CSF(v) = a·v^c·e^(−bv) 的 b = 0.2、c = 0.8 是怎麼定出來的?根據哪組心理物理實驗?標準規定的觀看條件是什麼?acutance 與主觀評分的相關係數有公開過嗎?
第四組:先驗的代價
10. 我模擬出:在等亮度色度光柵上,Malvar-He-Cutler 比雙線性差 4.26 dB。也就是「更好的演算法在先驗失效時輸得更慘」。這個現象有沒有論文系統性地研究過?有沒有一個去馬賽克演算法的「最壞情況」基準測試集(對照 Kodak 這種平均基準)?
11. 學習式去馬賽克在 Kodak 上報 44 dB 出頭,但 Kodak 是掃描底片、色度細節稀薄。有沒有針對高彩度細紋內容的基準?學習式方法在那種內容上相對傳統方法的優勢,是變大還是變小?
第五組:對我的意義
12. 如果我要為「細節與紋理」挑一台相機或一個 raw 轉檔流程,現有的公開評測數字(DXOMARK 的 acutance、DPReview 的測試場景、Photons to Photos)裡,哪一個最不受本文說的這些偏差影響?請排序並給理由。
13. 然後請給我最強的反方論證:有沒有可能「中性目標」根本不是缺陷,而是正確的工程決策——因為真實照片絕大多數像素本來就是低彩度的,所以中性目標上的表現本來就該是主要指標,而我花時間在等亮度色度光柵上是在最佳化一個罕見的極端情況?請用真實照片色度能量分布的統計數據(如果有的話)認真論證,不要敷衍。
每一點請標明你的把握程度。查不到出處的請直接說查不到,不要用推測填空。第 4、6、9 點我特別懷疑流傳的說法多半是輾轉引用而沒有一手依據。