2017-08-16 34 views
0

有許多掃描儀可以在其設置中設置圖像伽瑪,但不幸的是,這個伽瑪可以在掃描儀軟件中進行調整,而不是在掃描儀側進行調整(通過模擬方式或至少使用更多分辨率不僅僅是8位)。比方說,我們從掃描器的線性響應最初,所以255是最大亮度,128是半亮等,然後圖像經過一個LUT:通過跳過的級別確定圖像伽馬

0 -> 0, 
1 -> 21, 
2 -> 28 
... 
127 -> 186, 
128 -> 186, 
... 
254 -> 255, 
255 -> 255 

問題是:我們得到一些一束掃描具有未知伽瑪設置的頁面,並希望自動處理它們,而無需人工仔細檢查。

我們希望檢測像缺少某些特定亮度級別的圖像(此處,gamma = 2,2我們錯過1..20,22..27等),並基於該圖像分配相應的亮度級別伽馬值的圖像,所以它會被正確處理後。順便說一下,我們會提醒用戶由於伽瑪轉換導致信息丟失,所以用戶應儘可能關閉它。

這很容易確定這個最常見的gamma = 2.2的情況,我們只是檢查相應的零。 Gamma = 1也很容易:在這種情況下,我們應該完全沒有失誤。

但是,這將是最優雅的解決方案,以確定不只是這些情況下,但由獨特的價值缺失任意伽馬。例如,gamma = 1,01除了20以外的所有值。在gamma = 1,2(Plustek Opticbook掃描儀喜歡灰度圖像的這個值)時,我們有1,2,5,7,9,12,...缺失, 等等。

有一個問題:有些低值和高值可能會丟失,有時僅僅是因爲頁面上沒有額外的白色或額外的黑色區域,所以我們應該切斷這些「尾巴」,並且僅使用內部錯過的級別。

我們可能花費大量時間建立某種決策樹,但是所有的處理過程都應該儘可能快:這些圖像有600 dpi的分辨率。

任何想法?

回答

1

只是因爲它更容易,我要談的水平從0.0到1.0,而不是0到255,所以你的伽瑪校正是這樣的:

OUT =在^(1 /γ)或在輸出亮度區域,您有足夠的像素來檢測由伽馬校正引起的直方圖零點,沒有像素的級別比例取決於輸入和輸出曲線的相對斜率。

empty_level_proprotion(下)=最大(1 - DIN/DOUT,0)

DOUT/DIN給我們:

empty_level_proprotion(下)= MAX(1-(γ *總分^(γ-1)),0)

對於伽馬2.2它看起來像這樣:

https://www.wolframalpha.com/input/?i=plot+max(1-(2.2%2Ax%5E(1.2))+,+0)++from+0+to+1

該公式允許我們檢測應用的伽馬校正。我想:

  1. 將圖像直方圖到32個亮度帶
  2. 丟棄所有沒有足夠的像素在它們的頻段。例如,要求像素的像素數爲波段中不同級別的20倍像素
  3. 計算每個波段中沒有像素的級數
  4. 將上述公式生成的曲線與其餘數據相匹配以找到伽馬最能解釋數據的價值。

如果您的原創思路有效,那麼這應該會很好。請注意,有事情,可以搞砸了:

  • 它不會對JPEG壓縮圖像的工作,因爲他們將在缺少層次填寫
  • 如果掃描儀做了白平衡,對比度,亮度或在進行伽馬校正之前修正相同的8位數據,那麼這些操作可能會通過引入更多的缺失級別來搞亂數據。這基本上只是將上面的更改爲每個顏色通道的不同值,所以如果您使曲線擬合更加複雜,則可以檢測到這一點。