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

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*型のマスク配列.省略可能.

返り値

  • void型なのでなし

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=||array||_{C}=\arg\max(abs(array))(CV_C)
  • norm=||array||_{L1}=\sum(abs(array))(CV_L1)
  • norm=||array||_{L2}=\sqrt{\sum(abs(array^{2}))}(CV_L2)
  • norm=||array1-array2||_{C}=\arg\max(abs(array1-array2))(CV_DIFF_C)
  • norm=||array1-array2||_{L1}=\sum(abs(array1-array2))(CV_DIFF_L1)
  • norm=||array1-array2||_{L2}=\sqrt(\sum((array1-array2)^2))(CV_DIFF_L2)
  • norm=||array1-array2||_{C}/||array2||_{C}(CV_RELATIVE_C)
  • norm=||array1-array2||_{L1}/||array2||_{L1}(CV_RELATIVE_L1)
  • norm=||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準拠


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-05-27 (木) 13:32:53 (2738d)