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

プロフィール

Akira

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

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

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

04 | 2017/05 | 06
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購入

.NET(C++/CLI)による画像拡大縮小表示、画像処理サンプルプログラム

メインページ画像処理プログラミング

これまで紹介してきた内容の総集編的なサンプルプログラムを作成してみました。
これから画像処理を学ぶ人にも使ってもらえると幸いです。
でも、これ以上の内容は本職の仕事にも差し支えそうなので、これがギリかも。
(ちなみに本職では画像処理ツール画像処理アルゴリズムの開発やってます。)

基本的な機能としては
●拡大縮小表示(10,25,50,75,100,150,200,500,750,1000,5000,10000%)
●内挿補間表示
(NearestNeighbor, Bilinear, Bicubic, HighQualityBilinear, HighQualityBicubic)
●カラーモノクロ変換(RGB平均、YUVのY)
●二値化処理(しきい値設定可)
●ファイルフォーマット変換(bmp,jpg,png,tifファイルの読み込み、保存)

画像処理ではモノクロ8Bitでの画像処理が多いのですが、Windowsのペイントとかで
サンプル画像を作成するとカラーになってしまうので、モノクロ変換は重宝すると思います。

サンプルプログラムのソースはこちら
I.Eにて右ボタンで対象をファイルに保存)よりダウンロードできます。Visual C++ 2005 Express EditionによりC++/CLIで作成しています。

 内挿補間表示

NearestNeighbor表示例
NearestNeighbor

Bicubic表示例

Bicubic


 カラーモノクロ変換

カラー画像
カラー画像

モノクロ変換(R,G,B平均) 
メニューのフィルタ→カラーモノクロ変換1にて実行
  Gray = (R + G + B) / 3

カラーモノクロ変換

モノクロ変換(YUVのY) メニューのフィルタ→カラーモノクロ変換2にて実行
  Gray = 0.299×R + 0.587×G + 0.114×B

カラーモノクロ変換


以下、モノクロ変換部分のソースコード
//--------------------------------------------------------------
//【関数名 】:Filter::Color2Gray1
//【処理概要】:カラー画像をモノクログレーへ変換
//【引数  】:pSrc        = 入力画像(24Bitカラー)(In)
//            :pDst        = 出力画像(8Bitモノクロ)(In)
//            :Width        = 画像の幅(In)
//            :Height        = 画像の高さ(In)
//【戻り値 】:なし
//【備考  】:Mono = (R + G + B) / 3
//---------------------------------------------------------------
void Filter::Color2Mono1(unsigned char* pSrc, unsigned char* pDst, int Width,
                                 int
Height){
    int i, j;
    int SrcStride, DstStride;

    //入力画像(カラー画像)のメモリの幅
    SrcStride = ((Width * 24 + 31) / 32) * 4;
    //出力画像(モノクロ画像)のメモリの幅
    DstStride = ((Width * 8 + 31) / 32) * 4;

    for (j = 0; j < Height; j++){
        for (i = 0; i < Width; i++){
            pDst[i + j * DstStride] = (                       //Mono
                         pSrc[i * 3 +     j * SrcStride]   //B
                       + pSrc[i * 3 + 1 + j * SrcStride]   //G
                       + pSrc[i * 3 + 2 + j * SrcStride]   //R
                       ) / 3;
        }
    }
}

//--------------------------------------------------------------
//【関数名 】:Filter::Color2Gray2
//【処理概要】:カラー画像をモノクログレーへ変換
//【引数  】:pSrc        = 入力画像(24Bitカラー)(In)
//            :pDst        = 出力画像(8Bitモノクロ)(In)
//            :Width        = 画像の幅(In)
//            :Height        = 画像の高さ(In)
//【戻り値 】:なし
//【備考  】:Mono = 0.299 * R + 0.587 * G + 0.114 * B
//            :YUV変換のYと同じ
//---------------------------------------------------------------
void Filter::Color2Mono2(unsigned char* pSrc, unsigned char* pDst, int Width,
                                  int
Height){
    int i, j;
    int SrcStride, DstStride;
    unsigned char RLut[256], GLut[256], BLut[256];

    //入力画像(カラー画像)のメモリの幅
    SrcStride = ((Width * 24 + 31) / 32) * 4;
    //出力画像(モノクロ画像)のメモリの幅
    DstStride = ((Width * 8 + 31) / 32) * 4;

    //RGBそれぞれのLUTを作成
    for (i = 0; i < 256; i++){
        RLut[i] = (unsigned char)System::Math::Round(0.299 * i);
        GLut[i] = (unsigned char)System::Math::Round(0.587 * i);
        BLut[i] = (unsigned char)System::Math::Round(0.114 * i);
    }
   
    for (j = 0; j < Height; j++){
        for (i = 0; i < Width; i++){
            pDst[i + j * DstStride] =                             //Mono
                         BLut[pSrc[i * 3 +     j * SrcStride]]    //B
                       + GLut[pSrc[i * 3 + 1 + j * SrcStride]]    //G
                       + RLut[pSrc[i * 3 + 2 + j * SrcStride]]    //R
                       ;
        }
    }
}


 二値化処理

元画像
元画像

モノクロ変換
モノクロ変換

二値化しきい値設定
二値化しきい値設定

二値化処理
二値化処理

以下、二値化処理部分のソースコード
//-------------------------------------------------------------
//【関数名 】:Filter::Binarization
//【処理概要】:二値化
//【引数  】:pSrc        = 入力画像(8Bitモノクロ)(In)
//            :pDst        = 出力画像(8Bitモノクロ)(In)
//            :Width        = 画像の幅(In)
//            :Height        = 画像の高さ(In)
//            :Threshold    = しきい値(In)
//【戻り値 】:なし
//【備考  】:
//--------------------------------------------------------------
void Filter::Binarization(unsigned char* pSrc, unsigned char* pDst, int Width,
                               int Height, int Threshold){
    int i;
    int BufSize;
    unsigned char LUT[256] = {0};
   
    //画像全体のメモリサイズ
    BufSize = (Width + 3) / 4 * 4 * Height;

    //二値化ルックアップテーブルの作成
    for ( i = Threshold; i < 256; i++)
        LUT[i] = 255;

    //二値化処理
    for ( i = 0; i < BufSize; i++)
        pDst[i] =  LUT[ pSrc[i] ];

}


 関連ページ

 
二値化
  処理時間の計測(Stopwatchクラス)
  ウィンドウを開く/閉じる
  ウィンドウの押されたボタンを取得(DialogResultプロパティ)
  フォーム(ウィンドウ)のサイズ固定
  フォーム間参照
  テキストボックスの文字列を変数へ代入
  ファイルパス(フルパス)からファイル名、拡張子、ディレクトリの取得
  Graphicsオブジェクトの作成
  画像の拡大縮小表示(高機能版)
  画像の輝度値を取得、設定する
 
Loading...
スポンサーリンク

この記事に対するコメント
Re: タイトルなし

コメント頂き、ありがとうございます。
確かにファイルにリンクされていないようです。
下記ページの「画像の拡大縮小(高機能版)」の右側にある「Download」ボタンをクリックしてお試し下さい。
http://imagingsolution.web.fc2.com/program/cppcli/index.htm

この辺の不具合もあって、ブログを引越ししました。
【2013/09/29 19:59】 URL | Akira #- [ 編集]


サンプルプログラムのリンクが切れています
【2013/09/29 19:19】 URL | #- [ 編集]


この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://imagingsolution.blog107.fc2.com/tb.php/116-b8db2ced
この記事にトラックバックする(FC2ブログユーザー)

現在の閲覧者数: / 合計