画像から最大の明度,最小の明度などの特徴量を抽出する
#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]]準拠