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——歸一化的類型,可以有以下的取值:
- CV_C - 歸一化數組的C-範數(絕對值的最大值)
- CV_L1 - 歸一化數組的L1-範數(絕對值的和)
- CV_L2 - 歸一化數組的(歐幾里德)L2-範數
- 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
……