画像の明度値を正規化する.
- void cvScale(CvArr *src, CvArr *dst, double scale, double shift)
- void cvNormalize(CvMat* src, CvMat* dst, double a, double b, int norm_type, CvMat* mask )
- double cvNorm( CvMat* array1, CvMat* array2, int norm_type, CvMat* mask)
- 解説
- サンプルコード
- 実体ファイル
void cvScale(CvArr *src, CvArr *dst, double scale, double shift)†
配列内の値をスケーリングする関数.行列と画像の変換で説明されてるcvConvertScaleの別名なので,ここでは割愛
void cvNormalize(CvMat* src, CvMat* dst, double a, double b, int norm_type, CvMat* mask )†
明度値を正規化する.
- src:CvMat*型の入力配列.IplImage*型も可
- dst:CvMat*型の出力配列.IplImage*型も可
- a:double型の係数.省略時は1.
- b:double型の係数.省略時は0.使用方法は下記参照
- norm_type:正規化の方法
- CV_C:配列のC-Normを正規化する(1)
- CV_L1:配列のL1-Normを正規化(2)
- CV_L2:配列のL2-Normを正規化.指定を省略した場合はこの値(4)
- CV_MINMAX:配列の最大値と最小値をスケーリング(32)
- mask:CvMat*型のマスク配列.省略可能.
返り値†
double cvNorm( CvMat* array1, CvMat* array2, int norm_type, CvMat* mask)†
指定された配列のノルム,もしくは絶対差のノルムを計算する.
- array1:1つ目の配列.
- array2:2つ目の配列.省略した場合NULL.
- norm_type:ノルムの計算方法.
- 引数は下記の9つ.
- CV_C
- CV_L1
- CV_L2(省略した場合のデフォルト)
- CV_DIFF_C
- CV_DIFF_L1
- CV_DIFF_L2
- CV_RELATIVE_C
- CV_RELATIVE_L1
- CV_RELATIVE_L2
- mask:CvMat*型のマスク画像.省略可能.
返り値†
- 指定した方法で計算された,double型のノルム.
- cvScaleに関しては画像の最大,最小や行列と画像の変換を参照
- cvNormalizeも,内部でノルムを計算してるので,cvNormを使って等価な処理が可能.
- CV_MINMAXで処理をするのが最も単純
- その場合,a-bの間に収まるようスケーリングがなされる.
- ノルムを計算した場合は指定されたノルムがaになるように正規化される
- 入力が配列で出力が画像も指定可能.
- cvNormでノルムを計算できる.
- norm&mimetex(=||array||_{C});&mimetex(=\arg\max(abs(array)));(CV_C)
- norm&mimetex(=||array||_{L1});&mimetex(=\sum(abs(array)));(CV_L1)
- norm&mimetex(=||array||_{L2});&mimetex(=\sqrt{\sum(abs(array^{2}))});(CV_L2)
- norm&mimetex(=||array1-array2||_{C});&mimetex(=\arg\max(abs(array1-array2)));(CV_DIFF_C)
- norm&mimetex(=||array1-array2||_{L1});&mimetex(=\sum(abs(array1-array2)));(CV_DIFF_L1)
- norm&mimetex(=||array1-array2||_{L2});&mimetex(=\sqrt(\sum((array1-array2)^2)));(CV_DIFF_L2)
- norm&mimetex(=||array1-array2||_{C}/||array2||_{C});(CV_RELATIVE_C)
- norm&mimetex(=||array1-array2||_{L1}/||array2||_{L1});(CV_RELATIVE_L1)
- norm&mimetex(=||array1-array2||_{L2}/||array2||_{L2});(CV_RELATIVE_L2)
- cvShowImageでCV_32F型やCV_64F型の行列を表示する場合,0-1の範囲以外は丸められてしまう.
- 配列を0-1に正規化すれば問題ない.
サンプルコード†
- 正規化のサンプル
CvMat *input, *result_raw;
IplImage *result_scaled;
// 適当な関数で処理をする
cvFunction(input, result_raw, some, parameters);
// 0-1に正規化する.
cvNormalize(result_raw, result_scaled, 0, 1, CV_MINMAX);
- cvMinMaxLocを用いた例も参考に(内部構造的にほぼ等価)
実体ファイル†
- cxcore/include/cxcore.h
- cxcore/src/cxnorm.cpp (cvNorm)
- cxcore/src/cxutils.cpp (cvNormalize)
- cxcore/src/cxconvert.cpp (cvScale)
ジャンル:OpenCV:OpenCV 1.0準拠