沼津高専 電子制御工学科
MIRSMG3D 数字認識プログラム関数レファレンス
MIRSMG3D-IMGP-0102
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2009.3.12 杉山 初版


目次






1.はじめに

本ドキュメントはMG3標準機における数字認識プログラムに関するヘッダファイル並びに関数について説明する。


2.ヘッダファイル一覧

Table 1にヘッダファイルの一覧を示す。
Table 1
ファイル名 場所 使用している
ヘッダ / 関数
説明
num_threshold_value.h img/ num_detect() ターゲットの色の閾値の値の設定。
bmp.h img/ 数字認識全般 画像処理で統一できそうな値を宣言するためのヘッダファイル。
共通して使える表現などを記述しておくために用意した。
num_detect_extern.h img/ num_detect() 数字認識プログラムのためのextern宣言集。
use_window.h main/ num_detect() 画像を表示するかどうかを定義。
show_window.h main/ number_test() Windowの名前の定義。use_window.hをインクルードしている。
num_detect()またはball_detect()を使用するメイン関数ではインクルードする必要がある。



3.関数一覧

Table 2に実用的な関数をまとめる。今回のみの使用と考えられる関数は4.関数詳細に示す。
Table 2
ファイル名 関数名 書式 戻り値
number_test.c main int main(void); 0
img_update.c img_update
void img_update(
char*, int, int
);
-
num_detect.c num_detect int num_detect(int); 0〜9/-1/-999
labelTrim
void labelTrim(
IplImage*, IplImage*,
short*, int, char*
);
-
isPaper
int isPaper(
IplImage*, int
);
1/0
recognize
int recognize(
IplImage*, IplImage*, IplImage*
);
0〜9/-1
col_threshold.c col_threshold
void col_threshold(
IplImage*, IplImage*,
int, int, int, int, int, int
char*
);
-
fill.c fill
int fill(
IplImage*, IplImage*,
int, int, int
);
0/-1
scan_line
void scan_line(
IplImage*, int, int, int, int,
CvPoint**, CvPoint*, CvPoint*
);
-
val_threshold.c val_threshold
void val_threshold(
IplImage*, IplImage*, int, char*
);
-



4.関数詳細

int main(void)
test/number_test.cに記述。
数字認識テスト用のメイン関数。 処理内容はプログラム中で指定した回数だけnum_detectを呼び出す。 画像処理プログラムを作成するときは、このプログラムの書式がベースとなる。

void img_update(char* str, int width, int height)
uvccaptureを用いて画像を取得し、ファイルに保存する。

引数
str ファイル名
width 保存時の画像の幅
height 保存時の画像の高さ

int num_detect(int max_roop_counter)
指定した回数だけ画像中からターゲットを発見、数字認識を行い、処理が終わり次第認識結果を返す。

引数
max_roop_counter 処理のループ回数

void labelTrim(IplImage* src ,IplImage* dst ,short* labeling_data, int label_num, char* font_color)
指定したラベル番号の領域を入力画像に対応したピクセルで置換する。
その他の領域はfont_colorに左右され、font_color="white"のとき黒、"black"のとき白となる。
出力画像はdstに格納される。

引数
src 入力画像
1チャンネル, 8bit
(グレースケール)
dst 出力画像
1チャンネル, 8bit
(グレースケール)
labeling_data ラベリングデータが格納された配列の先頭アドレス
label_num トリミング対象のラベル番号
font_color 背景に対する文字の色
"black" / "white"

int isPaper(IplImage* src, int min_pix)
紙かどうかを判別する関数。画像に含まれる白いピクセルをもとに判断する。紙として認識されたら1が返る。

引数
src 入力画像
1チャンネル, 8bit
(モノクロ)
min_pix 紙と認識されるための最小ピクセル数
文字と思われる部分のピクセル数をカウントする。
そのときmin_pix以上の文字の領域が確認されればターゲットとみなされる。

int recognize(IplImage* src, IplImage* dist_x, IplImage* dist_y)
入力画像に対し周辺分布法を実行し、数字を識別する。周辺分布画像をdist_x、dist_yに格納する。

引数
src 入力画像
1チャンネル, 8bit
(モノクロ)
dist_x 水平軸に対する周辺分布画像
1チャンネル, 8bit
(モノクロ)
dist_y 垂直軸に対する周辺分布画像
1チャンネル, 8bit
(モノクロ)

void col_threshold( IplImage* src, IplImage* dst, int th1_min, int th1_max, int th2_min, int th2_max, int th3_min, int th3_max, char* code)
指定した閾値、色空間でsrcに対し色による2値化処理を行い、結果をdstに格納する。

引数
src 入力画像
3チャンネル, 8bit
(カラー)
dst 出力画像
1チャンネル, 8bit
(モノクロ)
th1_min RまたはHの最小値
ここでのHの値は1/2倍されている。
(0 <= H <= 180)
th1_max RまたはHの最大値
ここでのHの値は1/2倍されている。
(0 <= H <= 180)
th2_min GまたはSの最大値
th2_max GまたはSの最大値
th3_min BまたはVの最大値
th3_max BまたはVの最大値
code 処理時の色空間の指定
"HSV" / "RGB"

HSV及びRGBの値についてはOpenCVの関数リファレンスcvCvtColorの項目を参照。

int fill( IplImage* src, IplImage* dst, int x, int y, int paint_color)
入力画像src上の指定したポイントx, yを含む領域を指定色paint_colorで塗りつぶす。結果はdstに格納される。塗りつぶしのアルゴリズムはラインシードを用いている。

引数
src 入力画像
1チャンネル, 8bit
(グレースケール)
dst 出力画像
1チャンネル, 8bit / 16bit
(グレースケール)
x 塗りつぶし開始点のx座標
y 塗りつぶし開始点のy座標
paint_color ピクセルに格納する値

void scan_line(IplImage*,int,int,int,int,CvPoint**,CvPoint*,CvPoint*)
fill( )のサブ関数。おそらくこれのみを使用することはないと考えられるため説明は省略する。

void val_threshold(IplImage* src, IplImage* dst, int width, char* font_color)
入力画像srcに対し、可変閾値による2値化処理を実行する。ヒステリシスの幅が第3引数widthで指定される。font_colorが"black"の場合背景は白、それ以外黒として処理が実行される。結果はdstに格納される。

引数
src 入力画像
1チャンネル, 8bit
(グレースケール)
dst 出力画像
1チャンネル, 8bit
(モノクロ)
width ヒステリシスの幅
font_color 背景に対する文字色
"black" / "white"



5.注意事項

ヘッダや関数を使用する際に留意するべき事柄を記述する。

  • num_detect( )を含むmain関数
  • num_detectを含むmain関数は必ずshow_window.hをインクルードし、プログラムの開始とともにshow_window.h内に記述される名前のウィンドウを作成すること。また、main関数の終了時にはウィンドウを破棄するようにする。


  • 画像の大きさ
  • 幅、高さともに同じ大きさである必要がある。もし、違うサイズの画像が引数として与えられた場合、予期せぬ処理結果、またはプログラムの異常終了が想定される。


  • 変数の型
  • 本リファレンスにおいて変数の型が黒く表示されているものはOpenCV独自の型である。これらはOpenCVのリファレンスに記述されているためここでは説明しない。



関連文書