2013-04-10 41 views
4

我正嘗試以編程方式更改白點/白平衡。這是我想要實現的:
- 從圖像中選擇一個(隨機)像素
- 獲取該像素的顏色
- 轉換圖像,以便該顏色的所有像素都將轉換爲白色和所有其他顏色轉移到匹配iOS白點/白平衡調整示例/建議

我已經完成了前兩步,但第三步並沒有真正解決。

起初我以爲,按照蘋果的文檔CIWhitePointAdjust應做到準確的事情,但,儘管它確實改變了圖像它沒有做什麼,我想/希望它做的事。

然後,看起來CIColorMatrix應該是幫助我改變顏色的東西,但我仍然(並且仍然)不知道要用那些討厭的矢量輸入什麼東西。 我已經嘗試了幾乎所有的東西(所有矢量上的相同RGB值,每個矢量上的相應值(R代表R等),1 - 對應值,1 +相應值,1 /相應值,RGB值和不同(1 - X,1 + X,1/X)。

我也遇到CITemperatureAndTint在於,根據蘋果文檔還應該幫助,但我還沒有想出如何轉換RGB到色溫和色調。我有有關從RGB轉換爲Temperatur,但沒有關於色調看到算法和公式。我將繼續與這一點,雖然實驗。

任何幫助,非常感謝!

+0

白點調整不是你可以在一些行中解釋的。我在這篇關於我的學士論文中寫了一整章。當然你可能不需要所有的背景信息。我只是嘗試CIWhitePointAdjust,我無法想象這將用於什麼。你能告訴你的應用程序中的確切用例是什麼嗎? – guitarflow 2013-04-10 14:50:34

+0

我正在嘗試構建一個簡單的照片編輯器。我想選擇在光線不足的情況下(例如餐廳中的白色食物)的設備拍攝的照片顏色錯誤(白色的照片通常是黃色),然後轉換照片,使照片會變白,其他顏色會相應變化。 – 2013-04-10 14:58:58

+1

我認爲你需要研究色適應。有一些數學需要,但所有的公式都可用。 www.brucelindbloom.com是你最好的朋友。作爲一個公平的警告:這不是小事! – guitarflow 2013-04-11 19:52:35

回答

4

經過大量的實驗和數學工作後,我終於使我的應用程序幾乎按照我想要的方式工作。
如果其他人會發現自己面臨類似的問題,那麼這就是我所做的。
我結束了使用CITemperatureAndTint過濾器提供從所選像素RGB值和用戶可提供的色調值計算出來的Kelvins顏色。
要到達Kelvins I:
- 首先使用D65光源(即Daylight)將RGB轉換爲XYZ。
- 然後從XYZ轉換爲Yxy。這兩種轉換均使用從EasyRGB找到的算法進行。
- 然後,我使用我在紙here中找到的McCamry公式計算了Yxy的Kelvins。

這些步驟得到了在球場的圖像,但也不能令人信服,所以我加了一個UISlider爲用戶的色調值範圍從-100到供應100

有了選擇一個點,應該是白色的,並從色調刻度的正面選擇值(我手機上的所有圖像都傾向於更黃),現在可以將圖像轉換爲(更多)中性色。 Yey!

我提供了計算出的溫度和用戶選擇的色調作爲inputNeutral矢量值。
6500(D65日光)和0作爲inputTargetNeutral矢量值到CITTemperatureAndTint過濾器。

+0

嘿,我試圖看看這是否適用於我,但您與開爾文轉換的鏈接已損壞。這是一個Google文檔,看起來不再可用。正如你所描述的,我也無法從Apple文檔中找出如何控制色彩。你能夠發佈一些(或全部)你的代碼嗎? – Dov 2015-05-21 00:11:59

+0

[This DSP answer](http://dsp.stackexchange.com/a/8968)給出了一個相當有用的簡化計算。 – Dov 2015-05-21 00:40:39