省型旧形国電の残影を求めて

戦前型旧形国電および鉄道と変褪色フィルム写真を中心とした写真補正編集の話題を扱います。他のサイトでは得られない、筆者独自開発の写真補正ツールや補正技法についても情報提供しています。写真補正技法への質問はコメント欄へどうぞ

CTL プログラミング Tips: 行列を扱う組み込み関数

 

f:id:yasuo_ssi:20210904211415j:plain

 CTL は C / C++ のサブセットになっていますが、仕様が拡張されている部分もあります。C / C++ の標準ではない組み込み関数が用意されています。今回は行列を計算する組み込み関数を紹介します。

https://ampasctl.sourceforge.net/CtlManual.pdf

■行列を計算する組み込み関数

float[3] mult_f_f3 (float f, float x[3])

float[3] add_f3_f3 (float x[3], float y[3])

float[3] sub_f3_f3 (float x[3], float y[3])

float[3] cross_f3_f3 (float x[3], float y[3])

float dot_f3_f3 (float x[3], float y[3])

float length_f3 (float x[3])

float[3][3] mult_f33_f33 (float A[3][3], float B[3][3])
float[4][4] mult_f44_f44 (float A[4][4], float B[4][4])

float[3][3] mult_f_f33 (float f, float A[3][3])
float[4][4] mult_f_f44 (float f, float A[4][4])

float[3][3] add_f33_f33 (float A[3][3], float B[3][3])
float[4][4] add_f44_f44 (float A[4][4], float B[4][4])

float[3][3] invert_f33 (float A[3][3])
float[4][4] invert_f44 (float A[4][4])

float[3][3] transpose_f33 (float A[3][3])
float[4][4] transpose_f44 (float A[4][4])

float[3] mult_f3_f33 (float x[3], float A[3][3])

float[3] mult_f3_f44 (float x[3], float A[4][4])

 

 以上の組み込み関数の内、頭の float[3] などという部分は、戻り値の変数型を示し (例えば、float[3] なら浮動小数点の要素3の配列)、実際に使う時はユーザは指定する必要はありません。引数の float x[3],  float A[3][3] という部分は引数の変数型を示します。なお、x は行、y は列、A, B は正方行列です。基本、各ピクセルの r, g, b もしくは、r, g, b, l 計算を行うので、組み込み関数で用意されているのは最大 4 x 4 の行列の計算までです。

 そして、組み込み関数名を見ると何をする関数かが分かり、add は加算、sub は減算、mult は積算、transpose は転置、invert は逆行列、cross は外積 (クロス積)、dot は内積 (ドット積)  です。

 そのあと f3 なら float型の3要素の配列、f44 なら float型の 4 x 4 の配列という意味です。