人検出における識別器構築 -その1-
今回は,人検出を行うための識別器構築をしたいと思います.
なお,本記事では,人画像(ポジティブ・歩行者)は事前に用意しているという前提で話を進めたいと思います.
背景画像(ネガティブ・非歩行者)は,人画像と同じ大きさに切り取られる必要があります.しかし,例えば今回使用したDaimler Mono Ped. Detection Benchmarkのように,背景画像が人画像と同じ大きさで与えられていないものもあります.
その場合は,自分で切り取る必要があります.
ランダムな位置およびスケールで切り出されたものを人画像と同じ大きさ(48×96ピクセル)で切り取りました.今回は1枚の背景画像について10ヶ所から切り取っています.
- 29行目で0から入力画像 (src_img) の幅 (src_img.col) からWIDTH (48) の間で乱数を生成させています.
- 30行目で0から入力画像0から入力画像 (src_img) の高さ (src_img.row) からHEIGHT (96) の間で乱数を生成させています.
- 31,32行目でWIDTH/2 (48÷2=24) からWIDTH (48) の間,HEIGHT/2 (96÷2=48) からHEIGHT (96) の間で乱数を発生させています.この値はさまざまに変えてもよいと思います.
- 33行目で
printf("%d %d\n", a, b);
とありますが,aとbの値を表示させているだけですので不要です.(私の場合は確認のために表示させています.)不要な場合は,
//printf("%d %d\n", a, b);
でコメントアウトするか削除してください.
- 35行目はroi_imgにsrc_imgに(深い)コピーしています.
- 36行目はdst_img1をroi_imgから切り取った画像としています.具体的には点(a, b)から幅c,高さdだけ切り取っています.
- 38行目ではdst_img1を正規化(48×96ピクセルの大きさにする)し,これをdst_img2としています.
- そして42行目で画像を保存します.
乱数生成については以下のサイトを参考にしました.
C言語による乱数生成
書き方の問題はあるかと思いますが...
識別器構築についてはまた書きたいと思います.