画像処理ソリューション
これを見れば画像処理の入門から基礎~応用まで全てがわかるのを目指して!
   
翻訳(Translate)

プロフィール

Akira

ニックネーム:Akira
東京都の町田事業所に勤務
画像処理ソフトの開発を行っています。リンクフリーです!
詳細プロフィールは こちら
お問い合わせは、こちら↓

【補助HP】
画像処理ソリューションWeb版 【Newブログ】
イメージングソリューション

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

02 | 2008/03 | 04
S M T W T F S
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

趣味のブログ

iPhone萬歳!
iPhoneの情報いろいろ。
ブログ学習帳
ブログ、SEO、アフィリエイト情報など(まだまだこれから)
俺流クラフト日記
ハンドメイド作品の記録(現在、放置中)

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C++/CLI】8Bitモノクロのカラーパレット設定

モノクロ8Bitの画像を新規に作成する場合の、モノクロのカラーパレットは、以下のように作成します。

     //8BitのBitmap作成
     Bitmap^ bmp = gcnew Bitmap(pictureBox1->Width, pictureBox1->Height,
                      Imaging::PixelFormat::Format8bppIndexed);

     Imaging::ColorPalette^ pal = bmp->Palette;

     for (i = 0; i < 256; i++){
      pal->Entries[i] = Color::FromArgb(255, i, i, i);
     }

     bmp->Palette = pal;


この処理を使ったサンプルプログラムはこちら(右ボタンクリック⇒対象をファイルに保存)
Visual C++ 2005 Express Editionで作成しています。

プログラムのイメージはこんな感じです。
モノクロ8Bitカラーテーブルの設定


Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

奇関数・偶関数の積分

奇関数・偶関数でも説明したように、

奇関数の -a~a の範囲での積分は
  奇関数の積分

偶関数の -a~a の範囲での積分は
  偶関数の積分

となります。
一般的な式では奇関数と偶関数に分けて積分を行います。

計算例
  奇関数・偶関数の積分

となります。
こうすることで、計算量を格段に減らすことができます。

現実的には、-a~a の範囲で積分することは、あまりなく、a~b の範囲で
積分することの方が多いかと思います。

そこで、グラフ全体を a と b の中心[(a + b) / 2 ]が原点位置に来るように
平行移動を行い積分範囲が原点に対し対称になるように調整します。
(この処理を行っても、積分の結果には影響はありません。)

  奇関数・偶関数の積分           奇関数・偶関数の積分数          

こうすることで、一般的な積分においても、計算量を減らすことができます。
この考え方を用いるとで、画像処理プログラムが高速になる場合もあります。

その例を最小二乗法を最適化で紹介しています。


Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

グラフ(関数)の拡大縮小、平行移動

■拡大、縮小

XとYであらわせる関数
 関数の式

をX軸方向に  、Y軸方向に  倍の拡大縮小すると
 グラフの拡大縮小

となります。
(拡大の場合、Sx,Syは1以上、縮小の場合、Sx,Syは1以下となります。)

■回転移動

関数 f(X,Y)を原点周りにθ度回転すると
グラフの回転
となります。 

■平行移動

関数 f(X,Y)をX軸方向に  、Y軸方向に  だけ平行移動すると
 グラフの平行移動

となります。

拡大縮小してから平行移動した場合は
 グラフの拡大縮小、平行移動

となります。


グラフ(関数)を拡大、縮小、回転、平行移動するときに、実際にX、Yの値の変換は全て逆!つまり

  拡大の場合:縮小
    θ度回転の場合:-θ度回転
    +方向へ移動の場合:-方向へ移動

の処理をしています。 何だかとっても違和感がありますが、グラフ(関数)を移動していると思うのではなく、グラフ(関数)はそのままに、XY軸を変換していると思うと、少しはしっくり来るでしょうか...

グラフの拡大

グラフの回転

グラフの平行移動 

 


 また、拡大縮小、回転、平行移動を同時に行う場合は、変換の順番に注意が必要です。
行列の計算と同じように、計算の順番が異なると計算結果も異なります。基本的には

  拡大縮小 ⇒ 回転 ⇒ 平行移動

の順番で変換を行うのが、一番よいでしょう。
もちろん、分かっていて別の順番で変換するのは構いません。 


 

  ■具体

半径1の円の式、グラフは
円の式
円のグラフ
となり、このグラフをX軸方向に  、Y軸方向に  倍の拡大縮小すると
円の拡大縮小
楕円のグラフ
となります。
式を変形すると楕円の公式そのものとなります。

  楕円の公式

さらにX軸方向に  、Y軸方向に  だけ平行移動すると
  楕円の平行移動
   楕円グラフの平行移動
となり、円のグラフを拡大縮小、平行移動することで楕円の一般式となります。

■応用

2点を通る直線の式を、グラフの平行移動の考え方を用いて求めます。 

 2点を通る直線の式

2点を通る直線の式は
  直線の式

より、よくある直線の式の解き方は、XとYに2点の座標を代入して、2つの式を作成し、
連立方程式を用いて、未知数の  と 
 を求めると思います。

しかし、直線の傾き  はグラフを見て分かる通り、(Yの増分)/(Xの増分)であるから
  直線の傾き

となり、あとは切片の  を求めるだけになります。

ここで、少し見方を変えて、原点を通る傾き  のグラフを下図のように
原点(0,0)から点(X1、Y1)へ平行移動します。

直線の平行移動

これを式であらわすと
  直線の式の求め方

となり、直線の式を求めることができます。
この式をそのまま覚えている方もいると思いますが、グラフの拡大縮小、平行移動の
考え方は汎用的に使うことができ、応用範囲がとても広がります。


他にも 
 
Y = sinθ

という波形に関して、

  Y軸方向の拡大率は振幅
  θ軸方向の拡大率は周期
  θ軸方向の平行移動は位相のズレ

というように、置き換えて考えることもできます。

このように考えるようになると、高校時代に一生懸命覚えたけど、すぐに忘れてしまうこのへんの公式↓

 sin ( - θ ) = - sin θ      、 cos ( - θ ) = cos θ

sin ( 90°+ θ ) = cos θ  、 sin ( 90°- θ ) = cos θ

cos( 90°+ θ ) = - sin θ 、 cos ( 90°- θ ) = sin θ

sin ( 180°+ θ ) = - sin θ 、 sin ( 180°- θ ) = sin θ

cos ( 180°+ θ ) = - cos θ 、 cos ( 180°- θ ) = - cos θ

 

 は全て拡大縮小、平行移動として考えることが出来ます。

例えば sin ( 90°- θ ) は sin ( -(θ - 90°) ) と書きかえると
sin波形をθ方向に-1倍(Y軸に対して対称移動)してから、+θ方向に90°平行移動すれば良い事が分かります。
最初に手元にsin波形を描いておけば、変換後、どのような波形になるのか?は見ればわかりますよね?!



Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

ロバスト推定法(M推定法)

ロバストとは?

ロバスト(Robust)という言葉を辞書で調べると、「頑健なさま、がっしりした様子」という意味が載っています。
画像処理的には、ノイズや影、明るさの変動などの影響を受けにくく、安定した処理結果が得られる、ぐらいの意味として捉えれば良いでしょう。

ロバスト推定法

通常の最小二乗法では下図のように、数点の大きな誤差が含まれるだけでも、近似した直線が大きくズレてしまう場合があります。
この誤差の影響をできるだけ受けないようにしたのが、ロバスト推定法です。

   最小二乗法とロバスト推定法との比較

 処理アルゴリズム

まずは最初に、通常の最小二乗法を行います。
直線の式(y=ax+b)で近似する場合は以下のように行列を用いて解くことができます。

 通常の最小二乗法の式

この近似した直線から遠く離れたデータを除去するだけでも、大きな誤差のデータの影響を受けなくなりそうですが、ここでは、誤差の大きさに応じて重みを付けるTukeyのBiweight推定法という手法を紹介します。

近似データ(Xi、Yi)と近似直線との誤差d=Yi - (aXi + b)を用いて、誤差が大きければ大きいほど、最小二乗に与える影響力(重み)が小さくなるように、以下のような式を用いて重み計算します。

 d < -Wの場合
  ロバスト推定の重みの式

 -W <= d <= Wの場合
  ロバスト推定の重みの式
  
 W < dの場合
  ロバスト推定の重みの式

  ただし、大文字のは誤差の許容範囲を示します。

この重みの関数w(d)をグラフで示すと、このようになります。
  ロバスト推定の重みのグラフ

この重み(Wi)を各近似データ(Xi、Yi)に関して計算し、Wiを付加した最小二乗法を再度行います。

  重み付き最小二乗法

こうして求めた近似式(y = a'X + b')は最初に求めた近似式よりも、測定データに近づきます。
この処理を誤差の許容範囲()を小さくしながら、誤差が少なくなるまで繰り返すことで、より測定データに近づいた近似式を得ることができます。

今回の例では一次式について示していますが、他のn次式などについても、同様に行列の各要素に重みを付加することで、ロバスト推定を行うことができます。


■参考文献
最小二乗法による実験データ解析―プログラムSALS (UP応用数学選書 7)
私にはちょっと難しめでしたが、役には立ちそうです。


Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

ビットマップファイルフォーマット

目次ページへ

ビットマップファイル(*.bmp)のファイルフォーマットです。

ビットマップ全体の構造

BITMAPFILEHEADER14Byte
BITMAPINFOHEADER40Byte
カラーテーブル(無い場合もあり)4Byte*Index数 
画像データ

BITMAPFILEHEADER
typedef struct tagBITMAPFILEHEADER {
  WORD     bfType;
  DWORD   bfSize;
  WORD     bfReserved1;
  WORD     bfReserved2;
  DWORD   bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;

bfTypeファイルタイプ'BM'
bfSizeファイル全体のサイズ(バイト数)
bfReserved1予約領域常に0
bfReserved2予約領域常に0
bfOffBitsファイル先頭から画像データまでのオフセット数(バイト単位)

BITMAPINFO

typedef struct tagBITMAPINFO {
  BITMAPINFOHEADER  bmiHeader;
  RGBQUAD                   bmiColors[1];
} BITMAPINFO, *PBITMAPINFO;

BITMAPINFOHEADER

typedef struct tagBITMAPINFOHEADER{
  DWORD  biSize;
  LONG     biWidth;
  LONG     biHeight;
  WORD    biPlanes;
  WORD    biBitCount;
  DWORD  biCompression;
  DWORD  biSizeImage;
  LONG     biXPelsPerMeter;
  LONG     biYPelsPerMeter;
  DWORD  biClrUsed;
  DWORD  biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER; 

biSize構造体のサイズ40
biWidth画像の幅(ピクセル数)
biHeight画像の高さ(ピクセル数)
値が負の場合、画像の上下が逆になる
biPlanesプレーン数常に1
biBitCount1画素あたりのビット数

1
4
8
16
24
32

biCompression 圧縮形式BI_RGB
BI_RLE8
BI_RLE4
BI_BITFIELDS
BI_JPEG
BI_PNG
biSizeImage画像データのサイズ(バイト数)

 BI_RGBの場合
0でも可

biXPelsPerMeter 水平方向の1Mあたりの画素数 0でも可
biYPelsPerMeter 垂直方向の1Mあたりの画素数 0でも可
biClrUsed

 カラーテーブルの色数

 0でも可
biClrImportant 表示に必要なカラーテーブルの色数 0でも可


カラーテーブル
typedef struct tagRGBQUAD {
  BYTE    rgbBlue;
  BYTE    rgbGreen;
  BYTE    rgbRed;
  BYTE    rgbReserved;
} RGBQUAD;

rgbBlue青の輝度値0~255
rgbGreen緑の輝度値0~255
rgbRed赤の輝度値0~255
rgbReserved予約領域 常に0

biBitCountが1,4,8のとき、RGBQUAD構造体のカラーテーブルが指定されます。
biBitCountが24,32のときは存在しません。
ただし、biCompressionがBI_BITFIELDS かつ、biBitCountが16,32の場合、
多ビット(10Bit,12Bitなど)が表示可能となり、ビットフィールドが指定されます。
(ビットフィールドについては多ビット(10Bit、12Bit)画像データの表示、フォーマット
説明しています。)

画像データ
モノクロ画像の場合、輝度値が格納されています。
24Bitカラーの場合、B,G,R,B,G,R・・・の順で各輝度値が格納されています。
32Bitカラーの場合、B,G,R,A,B,G,R,A・・・の順で各輝度値が格納されています。

画像データは、画像の左から右、下から上へ向かう順番で格納されます。
画像データ

また、1行あたりのメモリのサイズは4の倍数バイトになるように調整されています。
この値は以下のようにして計算しています。
VBの場合
  ((biWidth * biBitCount + 31) \ 32) * 4
Cの場合
  ((biWidth * biBitCount + 31) / 32) * 4

4の倍数バイト(32ビットの倍数)になるように調整しています。

ビットマップファイルを開く場合の注意点について

ビットマップファイルを開く場合、ヘッダ情報をもとに画像データ格納用のメモリを確保し、
そのメモリにデータを格納しますが、ヘッダの値はすべて正しく記載されているとは限りません。私の場合、以下の値を信じてメモリの確保などを行っています。

biWidth, biHeight, biBitCountを用いて画像データ格納用メモリの確保
biOffBitsを用いて、画像データまでのファイルのシークを行う。

biSizebiSizeImageなどは信じない方が良いと思います。

 


Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

多ビット(10Bit、12Bit)画像データの表示、フォーマット

目次ページへ

多ビット(10Bit、12Bitなど)の画像データは10Bitや12Bitの型が存在しないため、モノクロの場合はushort型の16bit中、下位10Bit、12Bitを使って画像データを格納します。
カラー10Bitの場合(RGB101010)は32Bit中の下位30Bitを使って画像データを格納します。

この××Bit中のどのビットをR,G,Bの色に割り振るかは、ビットフィールドというもの
使います。
ビットフィールドを使うにはBITMAPINFOHEADERbiCompressionBI_BITFIELDSに設定します。

どのビットをR,G,Bの色に割り振るかはRGBQUAD型の32Bitを使って有効ビットを指定します。
bmiColors[0]R(赤)bmiColors[1]G(緑)bmiColors[2]B(青)の色のビットを設定するのに用います。

実際の描画にはWin32APIのSetDIBitsToDevice関数かStretchDIBits関数を使います。
この表示のサンプルプログラムはVB6.0ですが、
VB6.0でビットマップファイルを開くのページに置いておきました。
(純粋な.NET環境では多ビット画像を表示できそうにないので、.NETからAPI関数を呼び出せば
 一応は表示できます)


モノクロ画像の場合(10~16Bitのとき)

(例)モノクロ10Bitの場合、biBitCount = 16 とし、16Bit中10Bitを使います。
   表示に有効なビットを以下のように指定します。 

画像データ  00000011 11111111
bmiColors[0]00000000000000000000001111111111
bmiColors[1]00000000000000000000001111111111
bmiColors[2]00000000000000000000001111111111

以上より、bmiColorsを10進数で表示すると以下のようになります。 

bmiColors[0].rgbReserved = 0; 
bmiColors[0].rgbRed          = 0; 
bmiColors[0].rgbGreen       = 3; 
bmiColors[0].rgbBlue          = 255; 
bmiColors[1].rgbReserved = 0; 
bmiColors[1].rgbRed          = 0; 
bmiColors[1].rgbGreen       = 3; 
bmiColors[1].rgbBlue          = 255; 
bmiColors[2].rgbReserved = 0; 
bmiColors[2].rgbRed          = 0; 
bmiColors[2].rgbGreen       = 3; 
bmiColors[2].rgbBlue          = 255;

■カラー画像の場合(R10G10B10Bitのとき)  

(例)カラー10Bitの場合、biBitCount = 32 とし、32Bit中、下位30Bitを使います。
     表示に有効なビットを以下のように指定します。

画像データ00111111 11111111 11111111 11111111
bmiColors[0]00111111 11110000 00000000 00000000
bmiColors[1]00000000 00001111 11111100 00000000
bmiColors[2]00000000 000000000000001111111111

以上より、bmiColorsを10進数で表示すると以下のようになります。 

bmiColors[0].rgbReserved = 63; 
bmiColors[0].rgbRed          = 240; 
bmiColors[0].rgbGreen       = 0; 
bmiColors[0].rgbBlue          = 0; 
bmiColors[1].rgbReserved = 0; 
bmiColors[1].rgbRed          = 15; 
bmiColors[1].rgbGreen       = 252; 
bmiColors[1].rgbBlue          = 0; 
bmiColors[2].rgbReserved = 0; 
bmiColors[2].rgbRed          = 0; 
bmiColors[2].rgbGreen       = 3; 
bmiColors[2].rgbBlue          = 255;
 

■サンプル画像 
   
   16BitGrayImage

画像データはこちら右ボタン→対象をファイルに保存)からダウンロードできます。

【画像データプロパティ】
幅:1024
高さ:256
ビット数:16
BitField:16ビット中、下位10ビットの上位8ビットを表示設定
輝度値:0~1023のグラデーション

上記のビットマップファイルをTSXBINというバイナリエディタでヘッダ部分を表示すると以下の通りです。(値は16進数表示)
多ビットビットマップファイルフォーマット


エクプスローラのプロパティや標準的なビューアソフトでは16ビットとして認識されない場合が多いのでご注意下さい。


※この記事では10Bitなどの多ビット画像データを8Bitデータにシフト処理などする事なく、画像データを表示する方法を説明しています。実際のモニタ上にはRGB各8Bitの解像度で表示されます。
モニタ上にRGB各10Bitで表示するには、別途、10Bit対応のモニタ、ビデオカード、表示プログラム(Direct-X/OpenGL)が必要のようです。詳細は以下のページを参照下さい。

◆10ビット/8ビット表示はドコが違う!?:「FlexScan SX2462W」のDisplayPort入力で“約10億色リアル表示”を体感する (1/3) - ITmedia +D PC USER
◆株式会社エーキューブ - ナナオ社製10bit対応モニタ「Flexscan」「ColorEdge」による動作確認
◆AMD(ATI)の資料
◆nVIDIAの資料

こりゃ、ビデオカードもモニタも私には高価すぎて、私には当分評価できそうにありません...


最近のCCDカメラでは8Bitのみならず、10Bit、12Bitの出力を持つカメラが増えてきています。多ビットの画像データは低コントラストの画像データを処理するには有功な場合が多いのですが、ほとんどの画像処理ライブラリでは多ビットの画像データに対応していない場合が多いため、画像処理部分のプログラムを全て自作する必要が出てきます。
また、8Bitが10Bitになるだけで、カメラから画像入力ボードへのデータ転送量は倍(16Bit/画素)となるため、フレームレートやスキャンレートの最速レートを出せなくなる場合があります。

そのため、総合的に捉えて多ビットの画像データをお取り扱い下さい。

 


Loading...
スポンサーリンク



現在の閲覧者数: / 合計