2014-01-14 118 views
4

我正在爲家庭自動化系統中的燈光管理構建一個接口。我設法控制標準開/關和可調光燈爲各種提供商沒有問題,但現在我堅持與RGB光相關的問題。將RGBW顏色轉換爲標準RGB/HSB表示

我目前使用的燈是RGBW燈帶 - 具體來說,我正在使用低成本的RGBW燈:燈由四個LED組成,每個LED都可以單獨控制。

更清楚 - 我正在研究一些c#代碼,它應該檢索當前選擇的顏色並將其顯示在UI中,並使用戶能夠指定燈光的新顏色。爲了設置顏色並檢索它,我必須使用一個命令提供程序,它使我能夠通過Web服務發送和接收命令。

供應商使用RGBW顏色 - 紅色,綠色,藍色和白色的四個組件使用。要在我的界面上表示當前的淺色,我想將服務返回的RGBW顏色轉換爲更標準的RGB/HSB模式。

搜索網頁時,我發現的唯一顏色轉換參考(不包括從rgb到rgbw轉換的C++示例,基於我的理解,必須有一些嚴重錯誤)是本文顯示從HSI到RGBW,這與我所需要的相反:link here

我在尋找一些關於我如何實現這種轉換(或簡單的解釋爲什麼它是不可能的)的見解。據我所知,從RGB到RGBW的轉換是任意的 - 一個RGB值可以表示爲多個RGBW值,但相反的轉換應該是唯一的。還要注意,雖然我使用的是c#,但也可以自由引用其他語言的算法 - 語言不是問題,問題是我不知道進行顏色轉換的數學運算。

回答

3

如何將RGB轉換爲RGBW在以下紙張

http://www.mirlab.org/conference_papers/International_Conference/ICASSP%202014/papers/p1214-lee.pdf

思考的項2.1中描述你的LED作爲一個巨大的像素。奧利弗的答案使用Wo = min(Ri,Gi,Bi),計算簡單而且正常。本文解釋了其他可以減少功耗的替代方案,對於家庭自動化項目有什麼好處。我也在使用OpenHAB,Arduino和RGBW LED進行家庭自動化項目,一方面,論文提出的替代方案會很好,另一方面,一個巨大的LUT將無法正常工作並轉換Arduino eighter上的所有值。 我建議你嘗試使用文中引用的不那麼高效的技術來校正RGB值:

假設Ri,Gi,Bi是彩色輸入,整數從0到255,所以Q = 255,並且你的輸出均禾,RO,從0到255μgo和μbo與值:

M = max(Ri,Gi,Bi) 
m = min(Ri,Gi,Bi) 

Wo = if (m/M < 0.5) use ((m*M)/(M-m)) else M 
Q = 255 
K = (Wo + M)/m 
Ro = floor([ (K * Ri) - Wo ]/Q) 
Go = floor([ (K * Gi) - Wo ]/Q) 
Bo = floor([ (K * Bi) - Wo ]/Q) 

練習它在電子表格上禾=米,實施前,實驗平方公尺和-m^3 +平方公尺+米,用正確的Qw修正Wo值,你會驚訝於沒有修正的簡單解決方案不是人們所期望的,而且其他答案沒有太大的變化。檢查紙張顏色失真的結果,我想如果你不糾正RGB值,你會得到一些褪色的顏色。

+0

感謝您的信息羅伯託。可悲的是,我目前手邊沒有RGBW發光器,但是您提供的信息似乎是我希望找到的最準確的信息。如果/當我將能夠實際測試該研究論文中描述的算法時,將會更新。 – SPArchaeologist

1

我知道這是一個相當古老的問題,但我正在研究RGB-> RGBW算法,並發現這篇文章 - 雖然沒有答案 - 可能有幫助嗎?

http://web.archive.org/web/20101008153429/http://www.nouvoyance.com:80/files/pdf/Adding-a-White.pdf

在此,他們建議爲RGB-> RGBW一個轉換是簡單地從最小創建W(R,G,B)。

  • 的R - >ř
  • ģ - 「G
  • 乙 - >乙
  • W - >分(R,G,B)

的這個反向(爲您的方案),簡直是扔掉W.

  • 的R - > [R
  • ģ - 「G
  • 乙 - >乙
  • W - >空
+1

感謝您的意見,奧利弗。這是我開始項目時的總體方向。當我試圖向經理/下午解釋,如果在用戶界面上選擇的RGB值接近黑色,這並不意味着設備會突然開始發出黑光* – SPArchaeologist