Jeffrey Cross
Jeffrey Cross

コードボックス:行列乗算を使用して画像フィルタを作成する

カラーフィルタを使用すると、画像から色を除外して画像を変更できます。 Processingにはいくつかのフィルタが組み込まれていますが、独自のカスタムフィルタを作成できると便利なことがよくあります。たとえば、Anaglyph Methods Comparisonのサイトでは、3D画像を作成するのに便利なさまざまなフィルタについて詳しく説明しています。

このサイトからわかるように、フィルタは基本的に画像内のピクセルの赤、緑、青の成分に適用される数学的変換です。ステレオアナグリフサイトのようなフィルタを作成するには、元の画像の各ピクセルを引っ張り、その色成分に行列演算を適用してから、新しい画像の対応するピクセルでこの新しい値を使用する必要があります。このコードボックスでは、このような独自のフィルタを作成する方法を説明しています。

しかし、最初に、(潜在的に)毛むくじゃらの数学のためのちょっとしたレビュー。行列は、要素と呼ばれる数の2次元配列です。行列は、一連の方程式、3Dオブジェクトへの変換、およびカラーフィルタ(この例のように)を表すさまざまなアプリケーションで使用されます。

行列は通常、その次元によって特徴付けられます。行の要素数(横に並ぶ数)と列(縦に並ぶ数)です。慣例により、行数は常に最初に来ます。次の図は2つの行列を示しています。左側には2行3列の行列があり、これは通常2×3行列と呼ばれます。右側は3行2列の行列で、3×2行列とも呼ばれます。

2つの行列を掛け合わせるには(行列Aと行列Bと呼びましょう)、行列Aの列数と行列Bの行数が等しくなければなりません。これが重要です。そうでない場合、乗算は定義されません。 。 (これはゼロで割るようなものです - それは単に不可能です。)

この基準が満たされると仮定すると、2つの行列の積(行列Cと呼びます)は、行列Aと同じ行数と行列Bと同じ列数を持ちます。行列Cの要素は、の和に等しくなります。 Aの対応する列要素とBの行要素の積。これは少しややこしいですが、次の図では(これが望ましいと思いますが)これをもう少し明確にする必要があります。

次のスケッチmatrix_mult.pdeは、Processingで操作を行う方法を示しています。

スケッチを実行すると、次のように出力されるはずです。

[0][0] = 2.0 [0][1] = 0.0 [1][0] = 5.5 [1][1] = 2.0

それで、邪魔にならない基本的な数学で、私たちはフィルタコードを書く準備ができています。残りのしわは、Daniel Shiffmanによるこの素晴らしいImages and Pixelsチュートリアルで説明されているように、Processing内の画像は(x、y)座標の2次元配列ではなく、1次元の色配列で保持されるということです。チュートリアルでは、彼はあなたが(x、y)座標をimage配列の位置に写像するのに使うことができる良い式を与えます:

配列内の位置= x + IMAGE_WIDTH * y

次の図は、ここで機能している概念の大部分を説明するのに役立ちます。

さらに苦労することなく、行列乗算によってフィルタを実装するためのfilter.pdeというスケッチを次に示します。

More:Codeboxの全コラムをここでチェックしてください。

メーカーの小屋で:


Processing入門Processing、コードを使用して図面、アニメーション、インタラクティブグラフィックを作成するための簡単な言語であるProcessingを使用して、コンピュータプログラミングを簡単に学ぶことができます。プログラミングコースは通常理論から始まりますが、この本では創造的で楽しいプロジェクトに飛び込むことができます。基本的なプログラミングを学びたい人には理想的で、プログラミングのスキルを持っている人のためのグラフィックスの簡単な紹介としても役立ちます。

シェア

コメントを残します