Color Matrix係點樣表示一個顏色?

本帖最後由 3ldk 於 2018-2-15 21:49 編輯

一個color matrix係咪只係用黎表示一個pixel的一個rgba的顏色?

如果係的話, 唔明點解一個rgba本來只係需要4個數字, 點解變成用20個字去表示?

另一樣唔明既係, 又話第一row係r, 二row係g, 三row係b, 四row係a

但圖入面又寫col一係r, col二係g, col一係b, col一係a




一、颜色矩阵
颜色矩阵是一个用来表示三原色和透明度的4x5的矩阵,表示为一个数组的形式

[ a, b, c, d, e,
    f, g, h, i, j,
    k, l, m, n, o,
    p, q, r, s, t ]
一个颜色则使用[R, G, B, A]的方式进行表示,所以矩阵与颜色的计算方式则为

颜色矩阵计算



从上述的公式可以看出,颜色矩阵的功能划分如下

a, b, c, d, e 表示三原色中的红色
f, g, h, i, j 表示三原色中的绿色
k, l, m, n, o 表示三原色中的蓝色
p, q, r, s, t 表示颜色的透明度
第五列用于表示颜色的偏移量

回覆 1# 3ldk


    師兄好唔熟 Matrix 咁喎, 甚至影嚮到你對條公式o既理解.
    首先條公式涉及兩隻顏色 C 同 C1 , 兩者都係師兄平時睇開 R G B A , 只係 C 攝多咗個 1 .
C 係 input , C1 係 output . M 係一個 constant matrix. 去到呢步起碼都知舊 concept 無錯先啦!
    其實條式係 generalize C1 係 linear function (algebra o野, 好難三言兩語講) of C  . 簡單講, output o既 R1 G1 B1 A1 , 每一個都係一個 linear function of R G B A , 個 constant 1 係畀你 shift .

TOP

完全冇背景資料好難Get你想具體問乜

http://www.c-sharpcorner.com/art ... d-the-color-matrix/

你係想做一個Color transformations?
咁C同C1係典型RGBA,補1落去係指冇位移。M係transformation方法。

要清楚理解,就要將Color Map落3D/4D Space先會有直觀概念。

TOP

唔係唔熟, 係完全忘記晒, 而家上網睇返資料, 果個1係咪只係為左另到C的row數同M的col數一樣, 等佢地可以相乘, 所以先加落去?
如果係咁的話, 點解M唔一開始就整做4個col?
而且我要改顏色的話, 點解唔直接操作RGB既value? 例如我想紅色深多一倍的話, 將R*2咪得, 點解要特登整個M黎改顏色? (如果太複雜就唔洗解釋了, 我再搵資料)

注意事项编辑
当矩阵A的列数等于矩阵B的行数时,A与B可以相乘。
矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。

-----------

背景的前因後果係, 我手上有一個C++的function, 係用黎修補一張圖片上的某種顏色問題, 而家我需要係ios上面做返出黎, 本來諗住用CIColorCube去做, 但佢要我提供一個叫LUT的資料比佢轉色, 無從入手既情況下, 唯有睇下android係點做法, 於是見到colormatrix依樣野, 感覺上好類似, 但依然係理解唔到

背景就係咁, 我相信知道之後都無辦法get到我想做乜
我而家只想了解上述的改顏色原理, 咁或者仲有機會可以完成我依個task

TOP

回覆 4# 3ldk


    其實無影嚮, 你只係將你條公式變成廿幾個 constant 而已.
如你講, 要 R*2 , 條公式就係 R1=2 * R , G1=G , B1=B , A1=A , 個 matrix 就係
[  2 0 0 0 0 ]
[  0 1 0 0 0 ]
[  0 0 1 0 0 ]
[  0 0 0 1 0 ]

對於 programming 嚟講, 由處理你寫o既 function , 改為處理一個 matrix 乘數.

TOP

本帖最後由 Charcoal99 於 2018-2-16 09:43 編輯

Color Matrix M 並不是一個像素顏色值, 而是一個變換矩陣, 公式裡的 C 及 C1 才是像素顏色。
(嚴格來說, 因為有透明值Alpha, 要跟底下Layer疊加後才是最終RGB顏色值。)

這個 M 是一個變換矩陣, 假設你有一個 Bitmap,
當中用這個矩陣乘上每一個像素時便可達到線性變換的效果, C1 = M * C,
C 是原像素, C1 是變換後的像素結果。
用實例來理解, 最簡單及常用的變換是改變圖像的 Brightness, Contrast 及 Saturation.
只要改變 M 矩陣的值, 用同一個變換子程式便可以作出所有 線性變換(或Filter) 更改。
程式參考 http://chargedweb.com/labs/2010/ ... ontrast_saturation/

至於為何不是 4 x 4 而要多加一列變成 4 x 5,
這是由於 4 x 4 變換有一矩陣線性算術運算不能單用乘法來處理,
便是單增加 R G B A 的偏移值, 如紅色值增加 10 或透明度增加 10, 這時要用上矩陣加法,
將 4 x 4 矩陣擴展到 4 x 5 其實只是 4 x 4 的乘法及 4 x 1的加法合併起來,
一個通用矩陣便可以做到各種變換而已。

TOP