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

プロフィール

Akira

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

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

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

05 | 2008/06 | 07
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 - - - - -

趣味のブログ

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購入

Visual C#2005 逆引き大全500の極意

 目次ページへ

VS2005向けの.NET Frameworkのテクニック本を探していたら、こんな本が前から出ていただなんて...
これよりも一つ古い本は持っていたのですが、2005からはずいぶん違うし、本当はC++/CLIの本が欲しいのですが、CLI関連の書籍は少ないので、C#の本を探していたら、この本とめぐり合い、即買いしてしまいました。
この本ならCLI用のテクニック本としても役に立ちそうです。

収録内容は下記のページで確認できます。
http://www.shuwasystem.co.jp/products/7980html/1382.html



今では500の極意→555の極意というのが出ています。


 



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購入

【C++/CLI】CSVファイル保存(輝度値のCSVファイル保存)

画像処理を行っていると輝度値をCSVファイル(カンマ区切りファイル)に保存して、エクセルで参照したい場合があるかと思います。
そんなときに簡単に使えるサンプルプログラムを作成したました。

今回作成したプログラムはこんなイメージです↓

 CSVファイル保存サンプルプログラム

このサンプルプログラムはこちら右ボタンクリック→対象をファイルに保存)よりダウンロードできます。

このプログラムで保存したCSVファイルをエクセルで開くと、こんなイメージです。

■モノクロ画像の場合 
  CSVファイル保存
  

■カラー画像の場合


CSVファイル保存


CSVファイルを作成している関数部分は以下の通りです。

void SaveCSVFile(String^ FileName, Bitmap^ bmp, Rectangle rect){
     //ビットマップの輝度値をCSVファイルに保存する。
     int i, j;

     //エラー確認
     if ((FileName == nullptr) || (bmp == nullptr)) return;
     if (rect.X + rect.Width > bmp->Width) rect.Width = bmp->Width - rect.X;
     if (rect.Y + rect.Height > bmp->Height) rect.Height = bmp->Height - rect.Y;

      // ファイル開く
      System::IO::StreamWriter^ sw
           = gcnew System::IO::StreamWriter(FileName, false, 
                         System::Text::Encoding::GetEncoding("shift-jis"));
     //Lock
     Imaging::BitmapData^ bmpData = bmp->LockBits(rect, Imaging::ImageLockMode::ReadOnly,    bmp->PixelFormat); 
 
     //ビットマップデータのメモリのポインタ
     Byte* pBuf = (Byte*)bmpData->Scan0.ToPointer();

     //輝度値の取得、設定
     switch (bmp->PixelFormat){ 
          case Imaging::PixelFormat::Format8bppIndexed: 
               //8ビットデータの場合

              
//////////////////////////////////
               // 項目ラベル

               sw->Write("Y座標\X座標,");
               for (i = 0; i < rect.Width; i++){
                    sw->Write((rect.X + i).ToString() + ",");
               }
               //改行
               sw->WriteLine();

              
//////////////////////////////////
               // Y座標、輝度値
               for (j = 0; j < rect.Height; j++){
                   
//Y座標
                    sw->Write((rect.Y + j).ToString() + ",");
                    for (i = 0; i < rect.Width; i++){
                         //輝度値
                         sw->Write(pBuf[i + j * bmpData->Stride].ToString() + ",");
                    }
                    //改行
                    sw->WriteLine();
                }

               break;

          case Imaging::PixelFormat::Format24bppRgb: 
               //24ビットカラーデータの場合 
               //輝度値はG,B,R,B,G,R・・・の順で格納されています。 
          case Imaging::PixelFormat::Format32bppRgb: 
          case Imaging::PixelFormat::Format32bppArgb: 
               //32ビットカラーデータの場合 
               //輝度値はG,B,R,A,B,G,R,A・・・の順で格納されています。

               //1画素何バイト表示か?
               int Channel = bmp->GetPixelFormatSize(bmp->PixelFormat) / 8;

              
//////////////////////////////////
               // 項目ラベル
               sw->Write("Y座標\X座標,");
               for (i = 0; i < rect.Width; i++){
                   
//R
                    sw->Write((rect.X + i).ToString() + "(R),");
                    //G
                    sw->Write((rect.X + i).ToString() + "(G),");
                    
//B
                    sw->Write((rect.X + i).ToString() + "(B),");
               }
              
//改行
               sw->WriteLine();

               
//////////////////////////////////
               // Y座標、輝度値
               for (j = 0; j < rect.Height; j++){
                   
//Y座標
                    sw->Write((rect.Y + j).ToString() + ",");
                    for (i = 0; i < rect.Width; i++){
                        
//輝度値
                         //R
                         sw->Write(pBuf[i * Channel + 2 + j * bmpData->Stride].ToString() + ",");
                         //G
                         sw->Write(pBuf[i * Channel + 1 + j * bmpData->Stride].ToString() + ",");
                         //B
                         sw->Write(pBuf[i * Channel     + j * bmpData->Stride].ToString() + ",");
                     }
                     //改行
                    sw->WriteLine();
               }
               break;
     }
     //UnLock
     bmp->UnlockBits(bmpData);

     // ファイルを閉じる
     sw->Close();

}

注意点
 CSVファイルをエクセルで開く場合、エクセルの制限として横方向に256セル、縦方向に65536セルまでしか開くことができません。
輝度値をファイルに保存する領域は、今回作成したSaveCSVFile関数のrectの領域で調整して下さい。

■CSVファイル関連で必要な関数について  


StreamWriter (
    String^ path,
    bool append,
    Encoding^ encoding
)

 概要
  ファイルを開く

パラメータ
 
pathファイル名
append指定したファイル名が存在する場合
faselのとき、ファイルを上書きします。
trueのとき、ファイルのデータの末尾に追記されます。
encoding文字エンコーディング
エクセルなどでファイルを開く場合は"shift-jis"を指定します。

その他
  他にいくつかオーバーロードが用意されていますが、この組合せが一番使いやすいかと思います。


Write (
    String^ value 
)

など。他、多数

  概要
  ストリームの最後の部分にvalueが追加されます。

パラメータ
 
valueストリームに書き込む内容


WriteLine (
    String^ value 
)

など。他、多数

概要
  ストリームの最後の部分にvalueを追加し、さらに改行が追加されます。
  サンプルプログラムではただの改行の役目として使っています。

パラメータ
 
valueストリームに書き込む内容

 


 

Close ( )

概要
  ストリームを閉じます。


輝度値の参照部分に関しては「画像の輝度値を取得設定する」のページでも説明してます。
合わせてご参照下さい。 


このCSVファイル保存を応用すると、こんなこと↓

CSVファイル保存3D表示

もできます。
上図はCSVファイルをエクセル(2007)で開いて等高線でグラフ表示しています。
ただし、横方向のデータ数(データ系列)が255までしか指定できないのが、ちょっと厳しい...

 
 


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購入

FPGAによる高速画像処理アドオンボード

 目次ページへ

このページでは私の会社の製品を紹介しています。

画像入力ボードにFPGAを搭載したアドオンボードを追加することで、高速な画像処理を可能とするボードを紹介したいと思います。

FPGA画像処理ボード

■PSM-3310-01シリーズ(APC-3310CL、APC-3310B向け)

ラインセンサのシェーディング補正、ベイヤー(RAW)データのカラー変換、
3ラインカラーラインセンサのラインディレイ補正、
ガラスやシートなどの欠陥検査用前処理(動的シェーディング、フィルタ処理、
ランレングス変換)など

■PSM-3310-02シリーズ(APC-3310CL、APC-3310B向け)

PSM-3310-01シリーズに比べ、FPGA、搭載メモリをより大容量化し、いくつかの処理を組み合わせた画像処理を可能としたアドオンボード

■PSM-3316-01

APC-3316A、APX-3316向けに開発された画像データ分配ユニット。
高速、高解像度化するカメラから取得される画像データを複数のPCに分配し、並列画像処理を可能にするアドオンボード

■PSM-3316-03

APC-3316A、APX-3316向けに開発されたFPGAによる高速画像処理を可能にしたアドオンボード

■PSM-3318-02

超高速画像入力ボードAPX-3318向けに開発されたFPGAによる高速画像処理を可能にしたアドオンボード

※FPGAによる画像処理ですので、基本的にカスタマイズは可能です。
 詳細ページはこちら↓

FPGA画像入力ボードカスタマイズ



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購入

行列の基礎

■正方行列

行と列の数が同じ行列
正方行列
など

■単位行列

行と列の位置が同じ場所の成分(対角成分)が1、それ以外が0となる行列

単位行列

など。

EIであらわされる。

AE=EA=A

が成り立つ。

 ■零行列

全ての行列の成分が 0 となる行列

零行列

など。
O であらわされる。

■転置行列

行と列の成分を入れ替えた行列を転置行列という。
行列Aの転置行列はTを使ってATとあらわす。

転置行列

の転置行列は

転置行列

となる。

 ■行列の足し算、引き算

行列の足し算、引き算

 ■行列の積

行列の積

 ■行列の計算

各行列A、B、Cにおいて

A + B = B + A
(A + B) + C = A + (B + C)
(AB)C = A(BC)
A(B + C) = AB + AC
(AB)-1 = B-1A-1
(AB)T = BTAT
(AT)T =
A
(ATB)T = BTA

が成り立ちます。

ただし、単位行列以外の計算では、行列の掛ける順番を入れ替えると、答えは異なります。

AB≠BA


 

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購入

VB6.0でポインタを扱う

 目次ページへ

VB6.0では基本的にはポインタは扱えない事になっていますが、全く、扱えない訳ではありません。

■配列からポインタ(先頭アドレス)を取得する。
 先頭アドレスを取得する関数はVarPtrというのがあり
 Dim Buf(99, 99) as Byte
 としたときのポインタ(先頭アドレス)は
 
 Dim ptr as Long
 prt = VarPtr(Buf(0, 0))

 で取得可能

■ポインタ(先頭アドレス)をAPIへ渡す。
 APIの宣言の型は as Any として例えばこんな感じ↓
 
 Public Declare Function StretchDIBits Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal dx As Long, ByVal dy As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal wSrcWidth As Long, ByVal wSrcHeight As Long, lpBits As Any, lpBitsInfo As BITMAPINFO, ByVal wUsage As Long, ByVal dwRop As Long) As Long


 呼び出す側はポインタ(先頭アドレス)にByValを付けて渡す

 Call StretchDIBits(hdc, 0, 0, dstWidth, sdtHeight, 0, 0, srcWidth, srcHeight, ByVal ptr, BmpInfo, 0, SRCCOPY)

■ポインタで管理可能なメモリを確保する。
 メモリの確保には、VirtualAlloc関数を使って、戻り値をポインタとして扱う


 ptr = VirtualAlloc(ByVal 0&, BufSize, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)

 もちろん、使い終わったら開放するのを忘れないように

 Call VirtualFree(ByVal ptr, 0, MEM_RELEASE)

 という感じで。

■確保したメモリ(ポインタ)の中身を参照する。
 これはさすがにそのままでは参照することができないので、配列にコピーしてから参照するしかないようです。

 '参照用のメモリ確保
 Dim Buf(99, 99) as Byte

 Call CopyMemory(Buf(0, 0), ByVal ptr, 100* 100)

 とします。

基本的にはVBでポインタ的な扱いはしない方が良いとは思いますが、画像処理用ライブラリには画像データをポインタで渡すようになっていたり、画像データ用のメモリを何画面分確保すれば良いのか?事前に分からない場合などは、どうしてもポインタで管理したくなる場合もあるので、参考まで。


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購入

ルックアップテーブル(ガンマ補正の例)

 目次ページへ

 

ルックアップテーブル(Lookup Table【略LUT】)は、ある値の答えが必ず1つの値となる場合、あらかじめ答えを計算しておき、配列に格納しておくことで、毎回の計算をすることなく、 配列(テーブル)を参照することで効率的に処理を行う手法です。
画像処理では、コントラスト調整やガンマ補正などによく用いられます。

例えば、ガンマ補正の場合、ガンマ補正値をγ、補正前の輝度値をsrc、
補正後の輝度値をdstとすると、補正式は

   ガンマ補正式

となりますが、この計算を全ての画素に対して処理を行うのは非常に非効率です。
そこで、例えばLUTという配列に、ガンマ補正の計算結果を以下のように格納しておきます。

src01234・・・251252253254255
dst016232832・・・253253254254255

ルックアップテーブル

あとは、各画素に対して、

  dst = LUT[src

という変換をすればよいだけなので、高速に処理を行うことができます。

ガンマ補正処理例

ガンマ補正前
       ガンマ補正前
           ⇓
ルックアップテーブル
      ルックアップテーブル
            ⇓
ガンマ補正後
        ガンマ補正後

他に、二値化処理や、値が0以上や255以下にするためのif 文の代わりなど
にも応用できる場合があるので、処理を高速にしたい時は、このルックアップテーブルが使えるかどうか?検討してみるのもよいでしょう。


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



現在の閲覧者数: / 合計