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

プロフィール

Akira

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

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

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

10 | 2008/11 | 12
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購入

膨張・収縮・オープニング・クロージング

膨張・収縮処理では一般的に二値化された白黒の画像に対して処理が行われ、
注目画素の周辺に1画素でも白い画素があれば白に置き換える処理を膨張
Dilation
逆に周辺に1画素でも黒い画素があれば黒に置き換える処理を収縮
Erosionといいます。

【元画像】
元画像

【膨張処理】
膨張処理

【収縮処理】
収縮処理

二値化された画像ではなく、グレー画像に対して処理を行う場合は、膨張の場合、
注目画素の近傍の最大輝度値を注目画素の輝度値に置き換えます。
収縮の場合は最小輝度値に置き換えることでグレー画像に対して処理を行います。
この処理を二値化画像と区別するために、それぞれ最大値フィルタ最小値フィルタ
呼ぶ場合もあります。

【処理例】

元画像

 

膨張

 

膨張 

元画像

 

膨張

 

膨張

 

 

 

 

 

  

 

収縮

 

収縮

 

膨張

 

収縮

 

収縮

 

 

 

 

 

 

 

収縮

 

収縮

 

収縮

 

収縮

 

収縮

 

収縮

 
      

膨張

 

膨張

 

膨張

 

収縮

 

膨張

 

膨張

 

 

 

 

 

 

 
膨張    膨張収縮連続処理 

膨張

 

 

 

連続処理

 

膨張・収縮処理は単独で処理を行う事はまれで、膨張・収縮を繰り返し処理を行う場合が多くあります。
とくに、同じ回数分だけ膨張して収縮する処理をクロージングClosing
同じ回数分だけ収縮して膨張する処理をオープニングOpeningとよびます。


元画像

 

収縮

元画像

 

クロージング 


収縮

 

膨張

元画像

 

オープニング 

この処理例を見てもわかるように、オープニング、クロージング処理では小さいパターン、
細いパターンの除去
を行います。

さらに、クロージングした画像から元画像を差し引いた処理をブラックハットBlack-Hat
元画像からオープニングした画像を差し引いた処理をトップハットTop-Hatといいます。

元画像

 

ブラックハット

元画像

 

ブラックハット


元画像

 

トップハット

元画像

 

トップハット

 これらの処理を見ても分かるように、膨張・収縮処理を用いることで、欠け、断線、ホコリやゴミといった欠陥の検査や、細い線状のパターンの文字や線などの抽出への応用が考えられます。


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

外周画素の処理

平滑化フィルタメディアンフィルタなどの注目画素の周辺画素を用いた画像フィルタ処理では、画像の外周部分が下図のように画像の外側を参照してしまうため、処理ができなくなります。

外周部分の処理

この外周部分を処理する方法はいくつかあるのですが、代表的な方法を紹介します。

以下、5×5サイズのカーネルを用いた場合の処理を例にとって紹介します。

■外周部分の輝度値を画像の外側にコピーして補間する方法
 5×5サイズのカーネルの場合、画像の外側に2画素分、画像の輝度値を参照
 してしまうので、この2画素分の輝度値を画像の外周部分の輝度値をコピーして
 輝度値を参照します。
  外周部分の輝度値の補間
 おそらく?この手法が一般的だと思います。

■外周部分を中心にして対称の位置にある輝度値を外側にコピーして補間する方法
 例えば、カーネルが座標(-1、-2)の画素を参照する場合は座標(1、2)の
 画素の輝度値を参照するようにします。
  外周部分の輝度値の補間
 
他にも、単純に外周部分は処理をしないで黒(輝度値=0)でマスクしたり、カーネルが画像の外側を参照する場合にカーネルを形を変えて画像の外側を参照しないようにしたりする方法などもあります。


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

【OpenCV】IplImage構造体

OpenCVの画像データを管理しているのがIplImage構造体になります。
C言語のBITMAPINFO、.NETのBitmapクラスみたいなものでしょうか。

OpenCVではこのIplImage構造体をOpenCVの各種関数の引数として渡します。

そこで、IplImage構造体の定義のヘッダファイル(cxtypes.h)をのぞいてみると、

typedef struct _IplImage
{
    int  nSize;           
  /* sizeof(IplImage) */
    int  ID;                  
/* version (=0)*/
    int  nChannels;      
/* Most of OpenCV functions support 1,2,3 or 4 channels */
    int  alphaChannel;  /* ignored by OpenCV */
    int  depth;        
/* pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S,
                           IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported */

    char colorModel[4];
/* ignored by OpenCV */
    char channelSeq[4];
/* ditto */
    int  dataOrder;        
/* 0 - interleaved color channels,
                                     1 - separate color channels.
                                     cvCreateImage can only create interleaved images */
    int  origin;                
/* 0 - top-left origin,
                                     1 - bottom-left origin (Windows bitmaps style) */
    int  align;                  
/* Alignment of image rows (4 or 8).
                                      OpenCV ignores it and uses widthStep instead */
    int  width;                 
/* image width in pixels */
    int  height;                
/* image height in pixels */
    struct _IplROI *roi;      /* image ROI. if NULL, the whole image is selected */
    struct _IplImage *maskROI;
/* must be NULL */
    void  *imageId;           
/* ditto */
    struct _IplTileInfo *tileInfo;
/* ditto */
    int  imageSize;    
       /* image data size in bytes
                                         (==image->height*image->widthStep
                                         in case of interleaved data)*/
    char *imageData;       
/* pointer to aligned image data */
    int  widthStep;            /* size of aligned image row in bytes */
    int  BorderMode[4];    
/* ignored by OpenCV */
    int  BorderConst[4];    
/* ditto */
    char *imageDataOrigin;
/* pointer to very origin of image data
                                         (not necessarily aligned) -
                                         needed for correct deallocation */
}
IplImage;

となっています。
基本的にcvCreateImageもしくはcvLoadImage
関数でIplImage構造体のデータを確保するので、IplImageの全てを知らなくても、なんとかなるのですが、主なメンバ変数は以下のとおりです。

nSizeIplImage構造体のサイズ
nChannelsチャンネル数 1,2,3,4のどれか
depth

1画素あたりのビット数
実質使えるのはIPL_DEPTH_8U(符号なし8ビット)と一部でIPL_DEPTH_16S(符号付き16ビット)ぐらい。
24ビットカラー(R,G,B各8ビット)の場合、8ビット、3チャンネル

 nChannels = 3、depth = IPL_DEPTH_8U
とする。

origin画像データの原点(基準)
0:左上原点(デフォルト)
1:左下原点
originはcvShowImageやcvSobelなどの画像の上下の向きが必要な場合に用いられます。
注)
originの値を変えても画像データの並びは変わりません。
width画像の幅(画素数)
height画像の高さ(画素数)
imageSize画像データのサイズ(バイト数) (= widthStep * height
imageData画像データへのポインタ
画像の輝度値を参照する場合は、このポインタを参照します。
このポインタのアドレスは16バイト境界になるように調整(アライメント)されています。つまり、アドレスが0x09BE0050などのように最下位の値が0となります。
SSEの都合?
widthStep画像データの幅のバイト数(画素数ではありません。
ビットマップ(*.bmp)データと同様に4バイト単位に調整されています。
8バイト単位があるのか?は不明

<確保例>

【ファイルから確保する場合】
  IplImage* src_img = cvLoadImage("TestImage.bmp",
          CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);

【新規に確保する場合】 24Bitカラー(8Bitモノクロ3チャンネルの場合)
  IplImage* src_img = cvCreateImage(
          cvSize(640, 480), IPL_DEPTH_8U, 3);
  ※depthの値は、符号のある/なしを区別するため、数値(8など)を指定せず、下記定数の
    中から指定すること。
    IPL_DEPTH_8U - 符号無し 8 ビット整数
    IPL_DEPTH_8S - 符号有り 8 ビット整数
    IPL_DEPTH_16U - 符号無し 16 ビット整数
    IPL_DEPTH_16S - 符号有り 16 ビット整数
    IPL_DEPTH_32S - 符号有り 32 ビット整数
    IPL_DEPTH_32F - 単精度浮動小数点数
    IPL_DEPTH_64F - 倍精度浮動小数点数

ただし、使い終わったら解放するのもお忘れなく。
   cvReleaseImage(&src_img);


関連ページ
【OpenCV】IplImageの輝度値を参照、設定する
【OpenCV】IplImageからBitmapを確保する
【C++/CLI】System::String^からchar*へ変換

  


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

’08国際画像機器展が開催されます

 目次ページへ

2008年12月3日(水)~5日(金)に神奈川県横浜市にあるパシフィコ横浜で画像処理に係わるカメラ、ボード、照明、レンズ、ソフトのメーカーが一堂に展示されます。
私のブログのページ(光学部品/カメラバイヤーズガイド)でも紹介しているメーカーのほとんどが出展しています。

同時に画像処理のセミナーも開催されるので、とても有意義だと思います。
詳しくは’08国際画像機器展のページを参照下さい。
(画像機器展のホームページのタイトルの背景、Bayerパターンかと思いきや、微妙に違うのが気になる~。デザイン的にはこっちの方が良かったのかもしれないですね。)

遠方の方は千葉県の幕張メッセで同時期に開催されているセミコン・ジャパン2008も合わせて見学されている方が多いようです。

是非ともこの機会に見学されてみてはいかがでしょうか?
(私も展示会の説明員で会場にいると思います。)


無事、展示会は終了致しました。
今回、私は初日しか参加できませんでしたが、ご来場頂いた方はありがとうございました。

 


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



現在の閲覧者数: / 合計