cvNormalize

cvNormalize( )是開源視覺庫OpenCV中的庫函式。該函式是基於C語言編寫的,而normalize( )是基於C++編寫的。

基本介紹

  • 外文名:cvNormalize
  • 功能:將數組中元素進行歸一化
函式名,參數解釋,舉例,

函式名

void cvNormalize( const CvArr* src,)
CvArr* dst,
double a=1,
double b=0,
int norm_type=CV_L2,
(const CvArr* mask=NULL );

參數解釋

  • src——輸入的源數據(矩陣,圖像)
  • dst——輸出的數據(矩陣,圖像)
  • a——輸出數組的最小/最大值或者輸出數組的範數
  • b——輸出數組的最大/最小值
  • norm_type——歸一化的類型,可以有以下的取值:
  1. CV_C - 歸一化數組的C-範數(絕對值的最大值)
  2. CV_L1 - 歸一化數組的L1-範數(絕對值的和)
  3. CV_L2 - 歸一化數組的(歐幾里德)L2-範數
  4. CV_MINMAX - 數組的數值被平移或縮放到一個指定的範圍L1用的是絕對值即曼哈頓距離,L2用的是平方即歐幾里得距離,MINMAX就是映射到a,b區間內。
  • mask——遮罩。一個隱藏參數,操作掩膜,用於指示函式是否僅僅對指定的元素進行操作。以圖像為例,遮罩就是你要選擇處理的區域,默認的NULL是處理圖像的所有區域。

舉例

結合例子來解釋下上面重點提到的參數
加入輸入矩陣cvMat={1,4,5,6,7,10}, a=5,b=0的時候,輸出結果如下:
a=5, b=0: CV_C: { 0.1, 0.4, 0.5, 0.6, 0.7, 1 }
a=5,b=0: CV_L1: { 0.030303, 0.121212, 0.151515, 0.181818, 0.212121, 0.30303 }
a=5,b=0: CV_L2: { 0.0663723, 0.265489, 0.331862, 0.398234, 0.464606, 0.663723 }
a=5,b=0: CV_MINMAX: { 0, 1.66667, 2.22222, 2.77778, 3.33333, 5 }
上述實驗對應的計算原理如下(sqrt是開方)
CV_L1: 每個元素乘上1/sqrt(1+4+5+6+7+10)
CV_L2: 每個元素乘上1/sqrt(1+16+25+36+49+100)
CV_MINMAX:使每個元素限制在[a=5,b=0]之間算法如下:
dst(i)=(src(i)-min(src))*(5-0)/(max(src)-min(src))
   1–>0
   4–>3*5/9=1.6666
   5–>4*5/9=2.2222
    ……

相關詞條

熱門詞條

聯絡我們