画像の明度値を正規化する.

#contents

*void cvScale(CvArr *src, CvArr *dst, double scale, double shift)[#qb225824]

配列内の値をスケーリングする関数.[[行列と画像の変換]]で説明されてる[[cvConvertScale>行列と画像の変換#j7bd9e1d]]の別名なので,ここでは割愛


*void cvNormalize(CvMat* src, CvMat* dst, double a, double b, int norm_type, CvMat* mask ) [#z53c6c9e]
明度値を正規化する.

**引数 [#ief9a85f]
-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*型のマスク配列.省略可能.

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

*double cvNorm( CvMat* array1, CvMat* array2, int norm_type, CvMat* mask)[#qe355284]
指定された配列のノルム,もしくは絶対差のノルムを計算する.

**引数 [#n13fd671]
-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*型のマスク画像.省略可能.

**返り値 [#o0c664f7]
-指定した方法で計算された,double型のノルム.

*解説 [#oba4e036]
-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>OpenCVのウィンドウ#r29b3b2b]]でCV_32F型やCV_64F型の行列を表示する場合,0-1の範囲以外は丸められてしまう.
-配列を0-1に正規化すれば問題ない.

*サンプルコード [#pc0e41df]
-正規化のサンプル
 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を用いた例>画像の最大,最小#p86d9868]]も参考に(内部構造的にほぼ等価)


*実体ファイル [#a11a2ba0]
-cxcore/include/cxcore.h
-cxcore/src/cxnorm.cpp (cvNorm)
-cxcore/src/cxutils.cpp (cvNormalize)
-cxcore/src/cxconvert.cpp (cvScale)

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

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