2011-02-23 53 views
7

我正在做一些關於圖像處理應用程序的工作(爲了好玩),並且正在努力完全理解ColorMatrix轉換的工作原理。我獲得了線性/仿射變換的基礎知識,並且可以通過在線複製示例得到很好的結果,但我想完全掌握爲什麼有效,而不是僅僅滿足於它的工作原理。關於ColorMatrix轉換如何工作的說明

例如,在圖像上做一個簡單的變換,以產生其負(每種顏色被轉換成其相應的免費)使用以下矩陣:

[-1, 0, 0, 0, 0] 
[0, -1, 0, 0, 0] 
[0, 0, -1, 0, 0] 
[0, 0, 0, 1, 0] 
[1, 1, 1, 0, 1] 

據我所知,-1是180degrees的餘弦,這是將顏色「翻轉」爲互補所需的旋轉,但我不明白的是顏色矢量如何與上述矩陣相乘併產生正確的互補矢量。例如,如果像素具有[247,255,0,255,1](使用RGBAW空間)的顏色矢量,則對上述矩陣執行乘法運算產生[-247,-255,0,...,255] 255,1],但這是不正確的,因爲上面的實際互補色是[8,0,255,255,1]。

我錯過了一些很明顯的東西,很高興承認我不完全確定我在做什麼:)被轉換的顏色矢量是否代表其他座標系? (例如不是0-255)

如果有人可以幫助提供我的理解「缺失的環節」,我會非常感激。

編輯

我才發現,原來下面的矩陣也適用,實際上是mathemtically直觀(它產生正確的矢量)。

-1 0 0 0 0 
0 -1 0 0 0 
0 0 -1 0 0 
1 1 1 1 0 
0 0 0 0 1 

所以我的新問題是:爲什麼這兩個矩陣的工作?後者爲我提供了更令人滿意的解決方案,因爲我可以從代數的角度理解它爲什麼起作用。這四行用於縮放嗎?如果是這樣,爲什麼縮放會添加255?它從哪裏獲得價值?

對不起,如果這些都是真正愚蠢的問題,我試圖讓這個下來拍。

+2

你忘了然後1-s在底行。他們被添加(縮放255)。 255 + -247 = 8。 – 2011-02-23 20:14:34

+0

真的嗎?我認爲最後一行是翻譯不是縮放? – 2011-02-23 20:27:55

+0

我不明白爲什麼會這樣,因爲實際的矩陣代數不會產生8.是否ColorMatrix類將特殊規則應用於矩陣中的某些位? – 2011-02-23 20:37:11

回答

3

你說的是翻譯的底線是正確的。漢斯在他的評論中說的是,有一個縮放因子255涉及到,這可能會讓你感到困惑。一種看待這種情況的方法是,首先將所有ARGB值除以255,然後應用矩陣乘法,然後將所有值乘以255以提供正確的ARGB值。另一種看待它的方式是將翻譯值視爲255。兩種方式你都會得到相同的結果。

((247/255) * -1 + 1) * 255 = 8 
or 
247 * -1 + 255 = 8 
+0

這種縮放是否會將值保持在0和1之間? – 2011-02-24 11:44:28

+0

另一個問題:爲什麼我的文章中的第二個矩陣(通過編輯添加)也可以工作?第4行是否也進行翻譯? – 2011-02-24 12:12:13

+0

1)是的。 2)它將alpha通道的值乘以1。而且由於你的alpha通道(在這種情況下)是255,所以你碰巧得到了相同的行爲。 :-) – 2011-02-24 12:44:40