2012-12-24 126 views
4

(UBYTE是無符號字符)UBYTE RGB值浮法RGB值,相較於顏色

這是在使用浮動值RGB值例如彩色類的點?它提供更高的準確性嗎?空間呢?使用float vs ubyte的性能好處/障礙是什麼?

回答

3

在所有的情形產生,它確實提供更高的精度。正如在另一個答案中提到的那樣,還有不必來回轉換的好處,這反過來又會對中間結果產生影響 - 想象一下,浮點數爲1.0的像素(一個字節爲255),以及你乘以0.65。然後將其轉換回整數,即166.75 - 但我們下降到166,所以我們失去了0.75。如果我們做進一步的數學運算,錯誤可能會變得更大......當然,如果某個中間步驟導致我們的值超過255(1.0)或低於0(0.0),那麼完全有可能保留新的價值一段時間,然後在需要時「稍後修復」。

當然,您不能在更少的空間(通常)中存儲更多的數據,因此典型的float大於一個字節的4倍。某些GPU具有16位浮點數,它們保存11位尾數和4-5位指數,這使它們適用於大多數簡單像素數學。但它的規模仍然是原來的兩倍,但不是「精確度」的兩倍(我的一個同事花了很多時間試圖使用16位浮點數來匹配32位浮點數的算法,但從未完全實現) 。

+0

那麼在你看來 - 從長遠來看真的值得使用浮點數超過ubytes(無符號字符)嗎? –

+0

在英語中,我們有一種說法是「多長時間是一段字符串」 - 這幾乎意味着「我無法回答」。這完全取決於你在做什麼,你如何做,以及你定義的「更好」或「值得」。更值得關注的是,存儲,說4倍的數據,還是丟失一些信息?你有沒有辦法對你的實現進行基準測試,並比較這兩種解決方案 - 測量同一組操作的內存使用率和執行速度。 –

+0

非常好的迴應!非常感謝您的解釋和建議。 –

4

臨:

  • 不需要從浮子做數學時被轉換爲/
  • 施加多個處理步驟順序地
  • 時更精確地保持中間值具有更大的動態範圍和分辨率
  • float是GPU等的自然格式

缺點:

  • 需要更多的存儲
+1

不要忘記,您還可以在以浮點格式存儲顏色時刪除伽馬校正。您不必在飛行中執行此操作,並且可以安全地進行大量「powf」調用。 – Florian