ImageData Class

【ImageDataクラス】画像の輝度値(画素値)の取得/設定

BorderTypeプロパティInterpolationModeプロパティのページでも少し紹介していますが、画像の輝度値を取得/設定するには

var img = new ImagingSolution.Imaging.ImageData("image.bmp");
// 輝度値の取得
var bright = img[2, 3];
// 輝度値の設定
img[2, 3] = 234;

のようにImageDataクラスオブジェクトを、あたかも配列として値の取得/設定ができるようになっています。

 

また、画像の輝度値の値は通常8bit(0~255)なので、

 

img[2, 3] = -45;  や  img[4, 5] = 258;

 

のようには設定できないのですが、上記のように設定すると、クラス内部的には

 

img[2, 3] = -45;  →  img[2, 3] = 0;

img[4, 5] = 258;  →  img[4, 5] = 255;

 

として設定されるので、輝度値を設定するときに、if文で0~255の範囲チェックは必要ありません。

また、 img[2, 3] = -45;  と設定した場合ですが、MinusValueModeプロパティを使って

 

img.MinusValueMode = ImagingSolution.Imaging.ImageData.MinusValueModeEnum.Absolute;

 

のように設定すると img[2, 3] = -45; は  img[2, 3] = 45;  として設定されます。

MinusValueModeプロパティは何も設定しないとMinusValueModeEnum.Zeroに設定されています。

 

値の取得/設定にはC#のインデクサという機能を用いているのですが、このインデクサに下記4つのオーバーロードを用意しています。

int this[int row, int column] // 取得/設定
int this[int row, int column, int ch]  // 取得/設定
int this[float row, float column]  // 取得のみ
int this[float row, float column, int ch] // 取得のみ

この引数の部分の並びを[row, column]とするか、[column, row]にするか悩んだのですが、画像データを多次元配列で表したときに同じ並びになる[row, column]の順番なので、ご注意ください。

座標っぽく表示すると[y, x]という順番です。

 

row(行番号)とcolumn(列番号)の位置関係ですが、画像の左上を原点[0, 0]として、モノクロ画像(8bit,1channel)の場合、次のようになります。

ImageDataクラス 画像の輝度値の取得/設定

 

カラー画像(24bit,3channel)の場合、

 this[int row, int column]

の形式で輝度値を参照すると、下図のようになります。

ImageDataクラス 画像の輝度値の取得/設定

 

これだと、少し分かりづらいので、chの引数を用いて

 this[int row, int column, int ch]

の形式で参照すると、下図のようになります。

 

ImageDataクラス 画像の輝度値の取得/設定

 

カラー画像(32bit,4channel)は、下図のようになります。

 

ImageDataクラス 画像の輝度値の取得/設定

 

ImageDataクラスライブラリへ戻る

 

コメント

  1. […] 3/19 【ImageDataクラス】画像の輝度値(画素値)の取得/設定 […]

  2. […] 3/19 【ImageDataクラス】画像の輝度値(画素値)の取得/設定 […]

タイトルとURLをコピーしました