= Boost 勉強会 = == Boost 世界一周の旅 == * Property Tree 木構造を持つデータプロパティ管理。 XML (!RapidXml), JSON, INI ファイルパーサ提供 boost::property_tree::ptree型 * Uuid ユニークID生成。乱数生成器のデフォルトは mt19937 * Range2.0 Rangeアルゴリズム (イテレータの組ではなく範囲を渡す)、 Rangeアダプタ (遅延評価) が追加された。 要チェック→Oven * Filesystem v3 path 日本語対応等 string と wstrint の両方を使用するためにオーバーロードが必要なくなった? * Polygon 平面多角形 (2D) のアルゴリズム。 * Meta State Machine (MSM) 新たな状態マシンライブラリ。状態遷移表を直接記述。 === まとめ === * 1.44.0 はかなり充実。特に Range 2.0 はオススメ == Boost.Graph 入門 == === グラフ === * 頂点 vertex と辺 edge からなる * 配列・線形リンクリスト (直線、木) === 有向グラフ・無向グラフ === * 辺に向きがあるか否か === 操作 === 頂点と線を作ったり、できたグラフの中を辿ったり… === JR 最長片道切符 === とにかく遠回りして一番長い距離の切符 (のルート) を求める * →挫折した。データ入力が大変 (そりゃそーだw) * でも北海道だけは全部入力したよ。 * プログラムは作ったよ。 * 長万部駅を検索の起点にしたよ (青函トンネル超えた最初の駅) * 実際動かしてみたよ === なぜ Boost.Graph? === * イテレータでのアクセスがある * 辺・頂点 * 一部は pair で Range ! * malloc/for → STL(コンテナ/アルゴリズム) === 質疑応答 === * 直線、木もグラフだよね? * →正確にはサブセット? * テンプレート引数の書く順番間違えたら MS-VS だとエラー箇所の赤線表示でる? * でた。 VS2010パネェ == Boost.GIL 画像処理入門 == Generic Image Library === 目標 === (初歩的な) 動体検出ができるようになる! === GIL とな? === * 画像データ保持用コンテナとイテレータ。 === 前提知識 === * 色空間 * RGB/RGBA ... o * HSV ... x * YCbCr ... x * CMY/CMYK ... o * L*a*b* ... x * Grayscale ... o * etc... * 種類 * ベクタ ... x * ラスタ ... o * 画像の構造 * ピクセルの集まり * データ構造 * データの持ち方は多様。配列を色別に分けたり分けなかったり… * 動画像の構造 * コマ送り === 基礎の基礎 === * 画像の入出力 * JPEG, PNG, TIFF をサポート {{{ rgb8_image_t img; jpeg_read_image("hoge.jpg", img); // 入力 jpeg_write_view("fuga.jpg", view(img)); // 出力 }}} * 型宣言は !ColorSpace, !BitDepth, !ClassType の組み合わせで表現 * !ColorSpace: rgb, bgr, cmyk, ... * !BitDepth: 8, 8s, 16, 16s, 32f, ... * !ClassType: image, view, loc, pixcel, ptr, ... * 画像へのアクセス * 直接 Image は操作しない。 Image View を使用 {{{ jpeg_read_image("hoge.jpg", img); // 読み込み step1 = view(img); // View を取得 step2 = subimage_view(step1, 200, 300, 150, 150); // 切り取り step3 = color_converted_view(step2); // グレースケール化 step4 = rotated180_view(step3); // 回転 step5 = subsampled_view(step4, 2, 1); jpeg_write_view("hoge_transform.jpg", step5); }}} * ピクセルへのアクセス * image_view::operator() * Iterator * 画像の上から下に向かって水平行ごとに走査する。 === 動体検出アルゴリズム作成 === フレーム間の差分を引くところ * グレースケール化した画像の同位置ピクセルを引き算するだけ === 参考情報 === * http://sites.google.com/site/twinkleofsilence/ * http://sssm.sakura.ne.jp/dev/gil.html * http://sourceforge.net/projects/stllcv/ === 質疑応答 === * ビューを 1 から作ることは可能? * 作れるけど簡単じゃないかも… * ビューへの操作をイメージに固定することは可能? * イメージへコピーするメソッドがある * 色空間の独自実装は可能? * 比較的簡単らしい * 型名が Boost っぽくない * 実は typedef 。裏ではすんげー長いテンプレート引数が… * ビューのフィルタ操作による変換コストは? * 色空間の変換を除けばコストは 0 のハズ * 中身が const な image を作るには * rgb8c_image_t のように !BitDepth のうしろに "c" が入った型名を使う * 関数が view を受け取るときは const 参照で受け取ることが推奨されている。この const は view の設定が const なのであって、画像自体が const になるわけではない。