- Max/MSP/Jitter 教程 11 - 矩陣混合
- Max/MSP/Jitter 教程 12 - Chromakeying 視頻去背景合成
- Max/MSP/Jitter 教程 13 - 列表和矩陣
00 翻譯自 Cycling74 的 Max/MSP/Jitter 官方文檔:Tutorial 12: Color Lookup Tables
本教程將講解如何使用顏色查找表(lookup tables)重新映射 Jitter 矩陣內(nèi)的數(shù)據(jù)。jit.charmap
對象是為此而設(shè)計的。我們還將研究生成查找表矩陣的不同策略,包括 jit.gradient
對象。
查找過程
查找表(通常稱為傳遞函數(shù)/transfer functions)是一個數(shù)組,以數(shù)字為表的索引。檢索存儲在該索引(地址或位置)的數(shù)字來替換原數(shù)字。任何函數(shù) graph - 每個 x 值(地址)有相應(yīng)的 y 值(輸出)- 都可以用作查找表。Max 對象如 funbuff
,table
和 MSP buffer~
對象是常用的查找表。本教程將以類似的方式使用 Jitter 矩陣。
打開教程 patch 讀取圖像
patch 左上角有一個 jit.movi??e
對象,讀取兩個文件。初始化對象(通過 loadbang)并加載文件 colorwheel.pct。也可以點擊 rain.mov
消息加載視頻。可以隨意切換兩個圖像源。
單擊 patch 頂部的開關(guān)啟動 metro
。色輪同時出現(xiàn)在頂部和底部的 jit.pwindow
。底部第三個(矩形)jit.pwindow
中出現(xiàn)漸變。
jit.charmap
的輸出和查找表矩陣
patch 底部有一個jit.charmap
對象,用它來重新映射圖像中的單元格值。對象有兩個入口,左入口連接到頂部的 jit.movi??e
。右入口連接到 jit.matrix colortable
。名為 colortable 的矩陣只有一維共 256 個單元,有四個 char 型數(shù)據(jù)平面。這是jit.charmap
用來重新映射左邊矩陣中單元格的顏色查找表。帶有名字 ctable 的receive
(一般縮寫為 r
)對象從 patch 的其他位置接收數(shù)據(jù)并發(fā)送到 jit.matrix
。打開頂部的開關(guān)發(fā)送一個 bang 到 jit.matrix colortable
,它將矩陣消息發(fā)送到jit.pwindow
和 jit.charmap
。
jit.charmap
用輸入(左)矩陣中的值,指向(右)矩陣中對應(yīng)的位置并復(fù)制那里的值,生成輸出矩陣。如果發(fā)送給jit.charmap
的矩陣包含一個在四個平面中值為 100 50 35 20
的單元格。如果查找表在平面 1 第 100 個單元格的值是 73,平面 2 第 50 個單元格的值是 25 ,平面 3 的第 35 個單元格的值是 0,平面 4 第 20 個單元格的值是 203,輸出單元的值是 73 25 0 203
。
jit.charmap
查找表是有 256 個單元格的一維矩陣,其平面數(shù)量與要重新映射的矩陣相同。因為 char 矩陣的值范圍是 0~255,因此需要 256 個數(shù)字來覆蓋查找表。
生成查找表
patch 的右上側(cè)包含三個 multislider
,可以設(shè)計 colortable 查找表矩陣 1-3 平面的傳遞函數(shù):
multislider
(有 256個 整數(shù) slider,范圍為 0~255)把列表發(fā)送到下面的 jit.fill
對象。它用 multislider
的值替換 colortable 矩陣當(dāng)前存儲在平面1-3(即紅,綠和藍)的值。當(dāng)矩陣采用新值時,jit.fill
發(fā)出 bang 到 patch 左邊連接到 jit.charmap
右入口的 jit.matrix
。這里忽略了平面 0,因為只有將 4 平面矩陣視為視頻時,它才包含 Alpha 值。
patch 中的 jit.matrix
和 jit.fill
的名稱相同(colortable)。這樣兩個對象從同一矩陣讀取和寫入,一個對象(jit.fill
)生成另一個對象(jit.matrix
)可讀取的數(shù)據(jù),而不必在兩個矩陣之間復(fù)制數(shù)據(jù)。這跟許多 MSP 對象(例如 peek~
,play~
,groove~
)可以共享存儲在單個 buffer~
中的樣本數(shù)據(jù)類似。關(guān)于命名矩陣請參見教程 13,18 和 19。
在 multislider
中隨意繪制一些形狀,看它如何影響查找表(較小的jit.pwindow
)和 jit.movi??e
的輸出圖像。可以來回切換兩個圖像源。
如果想重置任一平面為 y = “x”
傳遞函數(shù)(使所有值保持不變的固定斜率直線),可以單擊相應(yīng) multislider 上的按鈕。名為 p clear
的子 patch 用 uzi
初始化了 multislider
。
要點:與許多 Max 對象一樣,Jitter 對象會保留存儲在一個入口中的矩陣,即使另一個入口接收到了新矩陣。所以這個 patch 的
metro
只需要觸發(fā)jit.movi??e
。包含查找表jit.charmap
的jit.matrix
只需要在所存儲的數(shù)據(jù)發(fā)生變化時輸出值。
以下是一些查找表及其結(jié)果:
例 1 中,紅色和藍色查找表調(diào)換而綠色正常。結(jié)果是輸入圖像中較大的紅色和藍色值在輸出時變小,反之亦然。所以色輪的白色背景現(xiàn)在看起來是綠色的(單元格值 0 255 255 255 映射為 0 0 255 0)。
例 2 設(shè)置綠色平面為 0(查找表在整個輸入值范圍內(nèi)設(shè)置為 0)。紅色和藍色平面如果超過閾值也設(shè)置為 0,這時值會突然上升(紅色比藍色上升得更明顯)。結(jié)果是色輪大部分都是黑色的(特別是在綠色區(qū)域)。紅色平面僅在非常高的值(即色輪背景中的品紅色)中可見。
例 3 正常映射紅色平面。綠色平面是拋物線形狀,極值映射為高,中間陰影映射為低。藍色平面除了中間調(diào)中被歸零的范圍,其余正常。這種非線性表現(xiàn)為貫穿彩色輪頂部和右側(cè)的紅色“斷層線”。
有無數(shù)組合可以重新映射矩陣單元格的值。接下來研究另一個以更精確方式重新映射顏色值的對象。
jit.gradient 對象
打開 Duotone 子 patch,它顯示了使用 jit.gradient
生成查找表的方法:
jit.gradient
生成兩個單元格的值之間平滑漸變的單維 char 矩陣。start
和 stop
屬性是指定這些單元格的值列表。例如,start 屬性 0 0 0 0
和 end 屬性 0 0.5 1.0 0.5
將生成從黑色(矩陣中的單元格 0)到淺綠色(矩陣中最后一個單元格)的漸變。
我們已經(jīng)用參數(shù)指定 jit.gradient
為 256 單元寬,這樣當(dāng)它改變時可以存儲在 jit.matrix colortable
中。請注意, jit.gradient
在屬性列表中使用浮點數(shù)來指定 char 值(即屬性中用值 1.0 指定 char 值為 255)。
用 swatch
對象輸出的 RGB 列表轉(zhuǎn)換為 ARGB 浮點數(shù)來獲得格式化屬性。將屬性發(fā)送到 jit.gradient
對象后,它接收觸發(fā)對象發(fā)出的 bang,將矩陣輸出到 patch 左側(cè)的jit.matrix
。
嘗試在 swatch
中選擇顏色。start 和 end 屬性指定查找表的邊界,所以輸入圖像的值表現(xiàn)為在兩種顏色之間變化的雙色調(diào)外觀。patch 頂部的 multislider
將反映 jit.gradient
所生成的查找表。
例 1 是翻轉(zhuǎn)的圖像。查找表的 start 是白色(start 0 1.0 1.0 1.0
),end 是黑色(end 0. 0. 0. 0
)。結(jié)果是輸入值 0 映射到 255,反之亦然(y = 255 - x
)。
例 2 和 3 是雙色調(diào)漸變,將色輪的光譜重新映射到紅色和橙色(例 2)以及橄欖色和青色(例 3)之間。請注意,根據(jù)色輪中不同點的原始顏色,漸變曲線變得更陡峭或更和緩。
jit.gradient
的另一個屬性是 cheby,它指定在矩陣開始和結(jié)束值之間的變形曲線。cheby 屬性的參數(shù)列表是浮點數(shù)。這些參數(shù)是 Chebyshev polynomials(見下文的切比雪夫多項式)不同階數(shù)的振幅。使用查找表時,這些特殊功能曲線會產(chǎn)生不同的效果。patch 中設(shè)置 cheby 屬性的 multislider
,可以指定前 8 個 Chebyshev polynomials 曲線的相對振幅,形狀如下(如果將它們視為從黑色到白色的過渡):
技術(shù)說明:切比雪夫多項式通常用作數(shù)字合成算法中波形整形音頻信號的查找表(它們的特殊屬性可以將正弦波形扭曲成等效于不同階數(shù)幅度的諧波頻譜)。MSP
lookup~
對象可以與加載到buffer~
中的函數(shù)一起來完成音頻信號處理(跟本教程中的圖像處理類似)。更多內(nèi)容請參閱 MSP 手冊中的教程 12:綜合波形整形。
復(fù)位 gradient 中開始和結(jié)束點(單擊上面的消息框),緩慢調(diào)整 multislider
控制的 cheby 屬性。觀察顏色輪在顏色消失并在不同區(qū)域重新出現(xiàn)時如何變化。
在 jit.gradient
中使用 cheby 屬性時,即使將漸變起點和終點保留為黑色和白色,也可以得到一些非常有趣的顏色變形效果。以下是視頻剪輯 rain.mov 的一些例子:
左邊圖像顯示 rain.mov 中未處理的靜止圖像。中間圖像顯示了當(dāng)使用二階切比雪夫多項式(圖像中最暗的區(qū)域現(xiàn)在位于色譜的中間)生成梯度時色譜的變化。右側(cè)圖像顯示更復(fù)雜的梯度,色譜顯示多個峰和谷。
patch 頂部的 multislider
反映查找表的當(dāng)前狀態(tài)(由 jit.gradient
生成的矩陣被發(fā)送到 p showit
子 patch 中的 jit.iter
,在那里數(shù)字被組合以設(shè)定 multislider
的狀態(tài))。嘗試生成漸變,然后調(diào)整 multislider 手動修改查找表。這樣 jit.gradient
就作為更復(fù)雜的查找表的起始點。
小結(jié)
使用 jit.charmap
映射 char 矩陣中單元格的值。jit.charmap
的右入口接收 256 單元矩陣來定義要用于輸入矩陣數(shù)據(jù)的查找表(或傳遞函數(shù))。可以使用多種方法定義查找表,包括使用 jit.fill
從 Max 列表生成矩陣,或使用 jit.gradient
對象根據(jù) cheby 指定的曲線形狀,在開始和結(jié)束單元格值之間生成顏色漸變屬性。
- Max/MSP/Jitter 教程 01 - 什么是矩陣?
- Max/MSP/Jitter 教程 02 - Jitter 對象的屬性
- Max/MSP/Jitter 教程 03 - 播放 QuickTime 視頻
- Max/MSP/Jitter 教程 04 - 創(chuàng)建矩陣
- Max/MSP/Jitter 教程 05 - 矩陣的數(shù)學(xué)運算
- Max/MSP/Jitter 教程 06 - 控制視頻播放
- Max/MSP/Jitter 教程 07 - ARGB 顏色
- Max/MSP/Jitter 教程 08 - 調(diào)整顏色
- Max/MSP/Jitter 教程 09 - 調(diào)整圖像顏色
- Max/MSP/Jitter 教程 10 - 簡單混合
友情提示:獨自折騰 Max 易患上癔癥……不妨入群互助
??????