2014-04-20 414 views
3

我想正常化一個圖像的像素值,使其平均值爲0.0,標準爲1.0以使圖像具有一致的強度。有一個OpenCV函數,即cvNormalize(src,dst,0,1,cv_MINMAX),但是這個函數可以用於我的目的嗎?任何幫助表示讚賞。謝謝。OpenCV:正常化圖像的像素值

+1

您正在使用舊版本的opencv。請閱讀最新的[doc](http://docs.opencv.org/)。 – Hadi

回答

12

否,documentationnormalize

normType=NORM_MINMAX(僅用於密集陣列),則各功能normalize規模和移位輸入數組元素中,以便:

equations http://docs.opencv.org/_images/math/31bceb122fccfc14279355379f91c7b269290386.png

因此,如果你使用normalize(src, dst, 0, 1, NORM_MINMAX, CV_32F);,你的數據將被標準化,以至於最小值爲0並且最大爲1

它不被賦予圖像的像素值清楚你的意思平均值是0.0,1.0一種常態。就像你寫的那樣,我明白你想對像素值進行歸一化,以便通過堆疊圖像列獲得的向量的範數是1.0。如果這是你想要的,你可以使用meanStdDevdocumentation),然後執行以下(假設你的圖像灰度):

cv::Scalar avg,sdv; 
cv::meanStdDev(image, avg, sdv); 
sdv.val[0] = sqrt(image.cols*image.rows*sdv.val[0]*sdv.val[0]); 
cv::Mat image_32f; 
image.convertTo(image_32f,CV_32F,1/sdv.val[0],-avg.val[0]/sdv.val[0]); 

如果你只是希望簡單地使像素值的變化是,忽略第三行。

是的,CV_32F意味着生成的圖像將使用32位浮點數據類型(即float)。

+0

其實我正在做一個物體跟蹤項目,我需要將圖像轉換爲平均值0.0和標準值1.0,以使圖像具有一致的強度,即減少不同照明條件的影響。 – Anislein

+1

@ Anislein343目前還不清楚應該有什麼「1.0的標準」......無論如何,如果你想有效減少不同照明條件的影響,圖像的全局標準化將不會對你有所幫助。請參閱這些文章:[link1](http://scholar.google.fr/scholar?cluster=6690823132241966720),[link2](http://scholar.google.fr/scholar?cluster=14271520333736502311), [link3](http://scholar.google.fr/scholar?cluster=2687681104163852721),[link4](http://scholar.google.fr/scholar?cluster=14602528712956028312)。 – AldurDisciple