已經記不清這是在那些**中收集的各種資料了。有中文的,有英文的,有自己理解的。如有侵權,請告知。
大家都知道,hdr代表高動態範圍。什麼是動態範圍呢?它是場景中最低亮度和最高亮度之間的比率。
我們的眼睛的動態範圍約為10000:1,也就是說眼睛能夠在這樣的亮度範圍內捕捉細節。然而,真實場景的動態範圍可能是10倍或100倍(例如100000:1).
更糟糕的是數位相機的動態範圍比我們的眼睛還要低。目前市面上常見的攝像頭的動態範圍為10evs左右。例如,佳能5d的動態範圍約為11evs。那11evs到底是什麼意思?2ev 比1ev亮2倍,4ev比2ev亮2倍,4ev比1ev亮4倍……以此類推,我們可以將ev轉換為2的冪次方,並將比率寫為:
2 ^ ev_value : 1, 即,2^11=2048:1, 只有2.000:1!
這是乙個非常強大的相機,但是跟我們的眼睛比起來,差5倍!
然而,現實卻變得更糟,由於攝像機的設計,他們的感測器關於亮度的資料並不是均勻分布的。相反,最亮灰度級對應所有資料的50%,降低乙個級對應所有資料的25%,再降低乙個級對應12.5%,這意味著3個最亮的灰度級對應所有資料的近90%!這意味著沒有太多留給最黑暗的部分,意味著他們不會像高光那樣有很明顯的細節資訊。因此,雖然相機可以捕捉10ev的場景資訊,但很少有關於陰影的資訊。這就是為什麼我們需要特別注意正確捕捉陰影中的細節,這也是將影象正確**的原因。但即使是在正確的合適的**,我們也不會覆蓋大多數情況下的整個動態範圍。那怎麼辦呢。這個時候,hdr就該上場了。
(這裡賣個關子,hdr的部分另外再做深入的**,這個章節,主要是**巨集觀上的理解。)
一般情況下,可在顯示器上顯示的影象,其每通道只有8位,一般顯示器甚至不能顯示16位影象。這意味著每個通道(即紅色、綠色和藍色)只能有255個不同的值。
hdr通常與每個通道32位的影象相關聯。這就意味著每個通道可以儲存更多的資料(32位精度允許4294967296個不同的值儲存在乙個通道中)。這足以以正確的方式表現現實生活中的場景。因此,hdr更多的是一種影象表示,而不是許多人將其與後處理技術聯絡在一起的技術。hdr與色彩飽和度過高、光暈或其他許多使用者和攝影師抱怨的典型問題無關,它與重影、對齊等也沒有關係。因為這些都是成像演算法。
hdr是儲存影象的概念,因此它包含所有必要的亮度資料。ldr(低動態範圍-如典型**)和hdr影象都可以看作是現實的模型,但事實是hdr更接近現實,因為它可以儲存比典型ldr影象所能儲存的更多亮度資訊。也就是說,它能更好地代表現實。它捕獲的資訊不比現實場景中的資訊多,但它可以捕獲比我們看到的更多的資訊。很多人認為hdr是不真實的。這其實是一種誤解,主要還是因為我們看到的世界是彩色的,而顯示器顯示的是色調對映導致出現不真實的結果。
正如前面所說,直接在顯示器上顯示hdr影象有乙個問題,因為當前一代的顯示裝置無法處理具有如此多不同亮度值的影象。
您可以嘗試在一些應用程式中顯示hdr影象,它基本上顯示了影象**的一部分,陰影和高光中的許多細節無法顯示,因為顯示器無法顯示它們。
由於我們希望能夠在顯示器上顯示hdr影象,我們需要做的是將我們的高動態範圍影象對映到顯示器可以顯示的亮度範圍,也就是在乙個稱為色調對映的過程中將我們的影象轉換回ldr影象。一開始這聽起來可能很傻,因為捕獲hdr影象只是為了將其轉換回ldr,這個目的是什麼?但是如果只是直接用相機拍攝ldr影象,再顯示不就行了,為啥還要hdr轉ldr?還是前面提到的,我們想看到更多細節資訊。
色調對映可能是乙個非常簡單(甚至微不足道)或非常複雜的函式。以最簡單的形式,它可以線性地縮放影象的所有亮度:
色調對映亮度畫素=(亮度畫素–最小亮度)/(最大亮度–最小亮度),
上面的運算子被稱為線性色調對映運算子,是我能想到的最簡單的運算子之一。但是描述一些色調對映的原理是很好的。它包含3個簡單步驟:
1.將hdr影象轉換為亮度圖。
hdr是關於光和細節而不是顏色,因為它是非常真實的。光在計算機圖形學中是發光的,亮度表示顏色(或在物理上基本相同的光)有多亮。你可能認為亮度是0.33*r+0.33*g+0.33*b計算的,其中r、g、b分別代表乙個畫素的紅色、綠色和藍色值。恐怕沒那麼簡單,因為我們的眼睛對每一種波長的感知方式略有不同。藍色似乎是我們眼中最暗的顏色,綠色是最亮的。所以研究人員提出了一些計算亮度的公式,例如:
亮度=0.299*r+0.587*g+0.114*b,(photoshop使用的)
亮度=0.27*r+0.67*g+0.06*b
因為色調對映的第一步是計算所有畫素的亮度。影象所有畫素的亮度可以稱為亮度圖。正如你從上面看到的,也就是乙個灰度影象。
2.色調對映。
色調對映的輸入是第一步中計算的灰度影象。假設在hdr影象的情況下,紅色、綠色和藍色的值可能遠遠大於255,那麼灰度值也大於255。因此,它需要將所有畫素的亮度都壓縮到0-255的範圍。所以,您可以將色調對映視為無損耗壓縮方法。此外,在這一步中,可能需要確保在陰影和高光中保留足夠的細節(線性色調對映操作則不會,需要開發其他演算法)。
也就是說,將大範圍的亮度對映到顯示器的亮度範圍,而不是顏色。此步驟的輸出是灰度影象,所有亮度對映到顯示器可顯示範圍。
3.對色調對映影象應用顏色。
在這個階段,亮度已經符合顯示器可以顯示的範圍,但影象仍然是黑白的。所以在這一步我們只是恢復顏色。不同演算法的計算方法不同,但在最簡單的情況下,每個顏色通道的計算方法如下:
紅色=hdr影象中紅色的畫素值*(第二步中色調對映後值/第一步中輸出的灰度值)
這是乙個紅色通道的例子,但是綠色和藍色頻道也一樣。當然,可能還有一些額外的步驟,比如伽瑪校正。
以上內容就是帶你對hdr有個初步的了解,即使你在做專案的時候,不會因為這些知識盲區,導致不能很好的理解。
第一節綜述
shader是什麼?shader是著色器。渲染流水線的概念?渲染流水線的工作任務在於由乙個三維場景出發,生成一張二維影象。渲染流程分為3個階段 應用階段 幾何階段 光柵化階段。1 應用階段 由cpu負責實現,由開發者主導。最重要的輸出是渲染所需的幾何資訊,即渲染圖元。這些渲染圖元傳遞給幾何階段。2 ...
第一節 熱機
一.熱機 內燃機是熱機的一種,以汽油或柴油為燃料 二.汽油機 練1.三.柴油機 練2.從能量轉化的角度看,一台四衝程內燃機在乙個迴圈中 1 哪個衝程存在著化學能轉化為內能的過程?2 哪個衝程存在著內能轉化為機械能的過程?3 哪個衝程具有很明顯的機械能轉化為內能的過程?練3.關於單缸四衝程內燃機,下列...
第一節 linux c編譯
在linux中開發c或c 程式的步驟 先用vim編輯c或c 程式 c儲存為.c c 儲存為.cc 或.cpp檔案 對於.c格式的c檔案,可以採用gcc或g 編譯 對於 cc cpp格式的c 檔案,應該採用g 進行編譯 gcc編譯過程 gcc所支援字尾名 預處理階段 對包含的標頭檔案 include ...