私は3次元のバイト配列を持っています。
3 次元配列は jpeg 画像を表します。各チャネル/配列は、RGB スペクトルの一部を表します。
黒いピクセルを保持することに興味はありません。黒のピクセルは、次の非典型的な配置で表されます。
myarray[0,0,0] =0;
myarray[0,0,1] =0;
myarray[0,0,2] =0;
byte[] AFlatArray = new byte[width x height x 3]
したがって、これを行ってから座標にそれぞれ値を割り当てることにより、この 3 次元配列を 1 次元配列にフラット化しました。
しかし、私が言ったように、黒いピクセルは必要ありません。したがって、この配列には、x、y 座標のカラー ピクセルのみを含める必要があります。私が望む結果は、黒以外のピクセルのみを含む i 次元のバイト配列から画像を再表現することです。それ、どうやったら出来るの?
xy座標系のため、黒いピクセルも保存する必要があるようです。バイナリ ファイルに書き込もうとしましたが、jpeg ファイルは圧縮されているため、そのファイルのサイズは jpeg ファイルよりも大きくなります。
赤、緑、青のコンポーネントを持つ画像があるため、1 バイト配列が必要です。2つの画像の違いを保存したい。したがって、これは 3 次元配列です。すべてのピクセルが異なるわけではないので、違いだけを保存したいと思いました。ただし、サイズを平坦化しても、画像のバイト サイズよりも大きいままです (JPEG で圧縮されているため)。
emgu 画像フレームワークを使用しています。画像のデータを列挙すると、それぞれバイト配列の次元で表される 3 つのチャネルが得られます。私が使用している 3 つのチャンネルは、(R)ed、(G)reen、(B)lue です。HSL や HSV (など) の色空間で作業し、色相、彩度、輝度の 3 つのチャネルで作業することができます。