Max/MSP/Jitter 官方教程翻譯05 - 矩陣的數學運算
本教程介紹如何對儲存在 Jitter 矩陣中的資料做簡單的數學運算,使用 jit.op
物件來縮放矩陣單元格或單個平面。
教程分為三個簡單的例子,你可以使用 jit.op
物件執行這些操作。jit.op
對矩陣的所有物件而不是單個數字執行數學運算。
向矩陣中的所有單元格新增常量
第一個示例顯示了連線到 jit.op
的 jit.matrix
物件,其輸出可由 jit.pwindow
檢視。每次改變連線到 jit.op
右輸入口的數字框,都會從 jit.matrix
輸出一個新的矩陣。從引數中可以看出,jit.matrix
生成一個 4x3 的單平面 char(0-255) 矩陣。jit.pwindow
把這個矩陣視覺化為一個灰度影像。拖動數字框將改變顯示的灰度級別(黑色 0 ~ 白色 255)。
請注意,jit.matrix
輸出了一個所有單元格都為 0 的矩陣。如果將 jit.matrix
和 jit.pwindow
物件繞過 jit.op
連線在一起,無論向 jit.matrix
傳送多少次 bang 訊息,都只能看到黑色影像。jit.op
向 jit.matrix
和 jit.op
之間的矩陣的所有單元都加上了一個值(由數字框給定)。
@ 運算子
jit.op
根據引數指定的運算(用 @op 表示)向矩陣加了一個值(不是乘或除)。@op 之後的引數是一個符號(或符號列表),它定義了 jit.op
在輸入矩陣上執行的數學運算。
image
在這個例子中,op 屬性設定為 + ,它對從左入口輸入的任何矩陣都執行加法操作。右側入口中的整數值會加到矩陣中的所有單元格。這個值被稱為標量(scalar),因為它向整個矩陣新增了相同的值(在教程 11 中我們會展示 jit.op
如何使用兩個矩陣進行數學運算)。
要點:更改
jit.op
右側入口中的標量值不會輸出新矩陣。如果斷開數字框和按鈕之間的接線,jit.pwindow
將停止顯示任何新內容。原因在於,大多數 Jitter 物件與大多數 Max 物件一樣,僅在資料進入其最左側入口時才會輸出資料。在上面的例子中,每次更改數字框時
jit.op
都會儲存新的標量值。此時按鈕傳送一個 bang 給jit.matrix
,讓它將新的矩陣(所有值設定為 0)傳送到jit.op
的左入口,觸發輸出矩陣。如果在按鈕上方的接線上放置一個斷點,然後 shift-cmd-T 逐步執行訊息,就能看到它是如何運作的。(有關如何使用斷點功能跟蹤 Max 訊息,請參閱教程:訊息順序和除錯)
使用 jit.op
的 val 屬性,標量值也可以作為常量。例如,如果想要為矩陣的所有單元格新增 134,可以使用 val 屬性並省去數字框:
將標量設定為屬性
類似地,如果想要更改由任何給定的 jit.op
物件執行的數學運算,可以用訊息 op
後跟數學符號,傳送到物件的左入口。
多平面資料的數學運算
第二個示例顯示了使用 jit.op
將值傳入矩陣的更復雜的例子。
為矩陣的每個平面使用單獨的標量
這個 patch 跟第一個類似,區別在於現在使用的是 4 平面矩陣。這由 jit.matrix
的第一個引數給出。jit.pwindow
現在有顏色了,它正在解析矩陣 α/紅/綠/藍 4 個單獨儲存顏色通道的平面。這個例子中的 jit.op
包含 op 屬性的四個符號的列表:每個符號設定輸入矩陣的一個平面的數學運算。在這個 patch 中,保留第一個(alpha)平面不做改動,而為其他 3 個平面做加法運算。
pak
物件向 jit.op
右輸入口傳送四個打包的整數。pak
和 pack
的唯一區別是,當更改任何數字時,pak
都會輸出一個新列表(pack
需要一個新數字或左側入口的一個 bang 來觸發輸出新列表)。由 pak
生成的四個數字決定了傳入 jit.op
矩陣的每個平面的標量值。
在上面的示例中,平面 0 沒有新增任何內容(op 屬性的第一個引數是 pass)。平面 1,2 和 3 將分別新增 161,26 和 254。jit.pwindow
將輸出矩陣的單元格解析為洋紅色(即使只看到一種顏色,矩陣中實際上有 12 個單元格,都設定為相同的值)。
要點:如果
jit.op
物件的 op 屬性只有一個值(只使用一個數字作為標量),jit.op
將在輸入矩陣的所有平面都使用該運算子號和標量值。
修改影像中的顏色
第三個例子說明如何在矩陣中使用 jit.op
,這個矩陣已經儲存了相關資料:
將單個平面與標量相乘
單擊訊息框 importmovie colorbars.png
,jit.matrix
的 importmovie
訊息將影像或 QuickTime 影片檔案中的單幀影像載入到物件儲存的矩陣中。它會將原影像縮放到矩陣的尺寸(320 x 240)。
單擊按鈕,jit.pwindow
中顯示影像校準顏色條。這時 jit.op
的算術運算子設定為:alpha 平面不做修改(pass), 其他平面設定為 *(乘)。這個矩陣有 4 個平面,因此使用 4 個浮點數列表設定每個標量。平面 1~3 中的值都是 1.,結果是顯示原始的影像:
所有標量均為 1
如果將標量設定為 1.0,0 和 0.,會看到以下影像:
image
包含顏色條的矩陣的所有平面(平面 1 除外)都乘以 0。這將消除矩陣的α,綠色和藍色平面,僅留下紅色(平面 1)。
將中間值(例如 0.,0.,1. 和 0.5)設定為 jit.op
的標量,會得到顏色欄看起來不同的影像:
image
在這種情況下,忽略 alpha 通道並將紅色通道歸零。藍色平面的值是它們的一半。綠色通道(平面 2)保持不變。
要點:
jit.op
中的一些數學標量使用浮點數,有些則使用整數。這取決於相關運算子(由 op 屬性定義)以及輸入矩陣的型別。本教程所有示例都使用了 char 矩陣,因此在新增時可以使用整數(任何浮點數都將被截斷,因為矩陣資料保留 0-255 範圍內的整數)。如果使用 float32 矩陣作為輸入,就需要新增浮點數。同樣,用 char 乘以浮點標量的矩陣也可以(240 * 0.5 = 120,整數)。但是,由於
jit.op
輸出的矩陣仍然是 char 矩陣(參見下面的註釋),因此仍然只能獲得 0-255 範圍內的值。
如果你嘗試使用標量值,容易看到某些顏色條消失或與相鄰條形圖合併。這是因為顏色條都設定為範圍相似的標準顏色值。如果一次只顯示一個通道(設定一個平面為 1,其餘為 0),頂部七個條形中的四個將顯示顏色。
本教程中只演示了 + 和 * 運算子,實際上 jit.op
物件可以執行許多其他的數學運算。運算子的完整列表請檢視參考文件,或雙擊 jit.op
幫助檔案中的 p op_list 子 patch。
調整大小
建立 jit.pwindow
物件時,它預設顯示為 80 畫素寬,60 畫素高。它可以像 Max 中的許多 UI 物件一樣改變大小。如果要精確地指定大小,可以使用 inspector 或向其傳送尺寸訊息,後跟寬度和高度(以畫素為單位):
更改 ``jit.pwindow`` 的大小
如果給某個固定尺寸(畫素)的 jit.pwindow
傳送不同的尺寸的矩陣,jit.pwindow
會按自身的大小來縮放傳入的矩陣。如果將非常小的矩陣傳送到非常大的 jit.pwindow
,會做畫素化處理(影像中顏色完全相同的矩形區域)。如果傳送大矩陣到一個小的 jit.pwindow
,可能會丟失不同程度的細節。
要點:在上面的示例中,含有顏色塊的
jit.matrix
的大小(由其維度決定)為 320 x 240 個單元格,planecount 為 4,型別是 char。jit.op
物件(以及大多數 Jitter 物件)識別出資訊並自動適配計算、輸出相同規格的矩陣。如果要更改
jit.matrix
的大小,jit.op
將立即識別變化並重新適應。jit.pwindow
也適配傳入的矩陣,但方式略有不同。如果輸入矩陣小於其自身的尺寸,則使用重複資料填充所有畫素。(這會產生前一段中描述的畫素化效果)如果輸入矩陣大於其自身的維度,則必須忽略某些資料,只顯示它可以顯示的內容。因此,即使教程 patch 中的jit.pwindow
跟輸入矩陣的大小不同,它們也會盡可能適配jit.op
矩陣。最後一個例子中的
jit.pwindow
儘可能顯示了jit.op
輸出的整個矩陣,但它必須忽略所有其他行和列,以使其接收的 320x240 矩陣適合自己的 160x120 顯示區域。
小結
jit.op
對矩陣上的所有資料進行數學運算。可以分別對矩陣單元格中的整體或每個平面執行計算。jit.op
的 op 屬性決定要執行什麼數學運算,可以輸入 @op [operator]
屬性引數,或者由左入口中的 op [operator]
訊息提供。
對於多平面矩陣(例如彩色圖片和影片),可以給出運算子列表(例如,op pass * * *)來指定每個平面的操作,並且可以為每個平面提供不同的標量值。在教程 11 中我們會看到如何使用矩陣來代替簡單的標量。
你可以使用 size [width] [height]
訊息設定 jit.pwindow
的大小。jit.pwindow
將盡可能適應接收到的矩陣的大小。如果輸入矩陣小於其維度,它將複製資料;如果輸入矩陣大於其自身維度,它將忽略某些資料。大多數 Jitter 物件都儘量適應它們接收的矩陣的維度、型別和平面數量。對 jit.op
而言,它沒有自己的維度,所以它自動適配傳入的矩陣大小。
作者:Kidult
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/200/viewspace-2816305/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Max/MSP/Jitter 官方教程翻譯11 - 矩陣混合矩陣
- Max/MSP/Jitter 官方教程翻譯12 - Chromakeying 視訊去背景合成
- ZooKeeper 官方教程[翻譯]
- [翻譯]CMAKE官方教程
- Golang實現微型數學運算直譯器Golang
- [OpenGL](翻譯+補充)投影矩陣的推導矩陣
- Pyplot tutorial,Pyplot官方教程自翻譯
- Python數學運算Python
- 基於c++的數學運算C++
- matlab計算含有未知數的矩陣Matlab矩陣
- 正則實現數學運算
- Unity3D Shader官方教程翻譯(一)Unity3D
- Unity3D Shader官方教程翻譯(二)Unity3D
- lxml官方入門教程(The lxml.etree Tutorial)翻譯XML
- 矩陣計算矩陣
- Eigen教程(3)之矩陣和向量的運算矩陣
- Moya官方文件翻譯
- Julia的矩陣運算矩陣
- 計算矩陣的秩矩陣
- C# Math 中的常用的數學運算C#
- 【矩陣的乘積/複合變換】- 圖解線性代數 05矩陣圖解
- OpenCV矩陣運算OpenCV矩陣
- docker官方文件翻譯3Docker
- docker官方文件翻譯4Docker
- rabbitmq 官方文件翻譯-2MQ
- docker官方文件翻譯5Docker
- docker官方文件翻譯2Docker
- docker官方文件翻譯1Docker
- Core Foundation 官方文件翻譯
- Numpy中的矩陣運算矩陣
- POJ 1050-To the Max(最大子矩陣和)矩陣
- 矩陣:如何使用矩陣操作進行 PageRank 計算?矩陣
- 藍橋杯-矩陣翻硬幣矩陣
- HTTPie 官方文件中文翻譯版HTTP
- Flutter-Cookbook 非官方翻譯Flutter
- BBNorm官方指導文件翻譯ORM
- [翻譯]ElasticSearch官方文件-簡介Elasticsearch
- Redis-py官方文件翻譯Redis