画像から最大の明度,最小の明度などの特徴量を抽出する

#contents

*void cvReduce( IplImage* src, IplImage* dst, int dim, int operation); [#t7e83672]

画像を1列/1行のベクトルに縮退させる

**引数 [#c1182764]
-src:IplImage*型の入力画像.CvMat*型も可
-dst:IplImage*型の入力画像.CvMat*型も可
-dim:int型の縮退させる方向
-operation:int型の縮退方法

**返り値 [#d5a70dea]
-void型なのでなし

*cvMinMaxLoc(IplImage *image, double* minVal, double* maxVal, CvPoint* minLocation, CvPoint* maxLocation, IplImage* mask); [#l08729ee]

画像の中から最大と最小の位置を見つけてくる.

**引数 [#yb618490]
-image:IplImage*型の画像.CvMat*型の行列も可能.
-minval:double*型の最小値.
-maxval:double*型の最大値.
-maxLocation:CvPoint*型の最大値の座標.
-maxLocation:CvPoint*型の最小値の座標.
-mask:IplImage*型の処理対象マスク.CvMat*型でも可能.

**返り値 [#o15b3fe4]
-void型なので返り値はないが,下記の4つが得られる.
--minval:最小値
--maxval:最大値
--minLocation:最小値の座標
--maxLocation:最大値の座標

*解説 [#l480f62c]
-cvReduceでは画像のProjectionを取ることで特徴量を計算する
-inputは行列(ベクトルも可)
-outputは列ベクトルか行ベクトル
--当然inputとサイズの整合性が取れている必要がある.
-dimは基本的に-1でOK.
--0を指定するとinputを1行ベクトルに縮退
--1を指定するとinputを1列ベクトルに縮退
-- -1を指定すると,inputとoutputのサイズから自動的に選択
-operationで縮退する際の処理方法を選択する
--CV_REDUCE_SUM:各行(列)の明度値の和
--CV_REDUCE_AVG:各行(列)の平均明度値
--CV_REDUCE_MAX:各行(列)の最大明度値
--CV_REDUCE_MIN:各行(列)の最小明度値
-MinMaxLocationでは,直接最小/最大の明度値を取得できる
--スケーリングする際に便利
--4つの引数にはそれぞれNULLを指定可能
--後半3つの引数は省略してNULLを指定可能

*サンプルコード [#p86d9868]
-すけーりんぐのさんぷる例(cvMinMaxLocを用いた例)
-スケーリングして正規化させるだけならば[[cvNormalize>明度値の正規化]]を利用した方が便利
 CvMat *input, *result_raw, *result_scaled;
 double min, max;
 // 適当な関数で処理をする
 cvFunction(input, result_raw, some, parameters);
 // cvMinMacLocで最大/最小値を取得
 cvMinMaxLoc(result_raw, &min, &max);
 // cvScaleで移動/伸縮させて格納
 cvScale(result_raw, result_scaled, 1.0/(max-min), 1.0*(-min)/(max-min));

-画像の列ごとの分散を計算する方法(cvReduceを用いた例)
 CvMat *input, *average, *average2, *variance;
 // 入力
 input = read(適当);
 // 平均,分散は高さ1の行ベクトル
 average  = cvCreateMat(1, width, CV_32FC1);
 average2 = cvCreateMat(1, width, CV_32FC1);
 variance = cvCreateMat(1, width, CV_32FC1);
 // まずは列ごとの平均値
 cvReduce(input, average, -1, CV_REDUCE_AVE);
 // 平均値の2乗の計算
 cvPow(average, average2, 2.0);
 // 全体の2乗の計算
 // inputを破壊したくなければコピーを用意すること
 cvPow(input, input, 2.0);
 // 2乗の平均値
 // つまりは2乗の期待値
 cvReduce(input, variance, -1, CV_REDUCE_AVE);
 // 分散は2乗の期待値から期待値の2乗を引いたもの
 cvSub(variance, average2, variance);

*実体ファイル [#fdc2e091]
-cxcore/src/cxsumpixels.cpp (cvReduce)
-cxcore/src/cxminmaxloc.cpp (cvMinMaxLoc)
-cxcore/include/cxcore.h

ジャンル[[:OpenCV]][[:OpenCV 1.0]]準拠

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS