Smooth
各種方法的圖像平滑
void cvSmooth( const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0 );
- src
- 輸入圖像.
- dst
- 輸出圖像.
- smoothtype
- 平滑方法:
- CV_BLUR_NO_SCALE (簡單不帶尺度變換的模糊) - 對每個象素領域
param1
×param2
求和。如果鄰域大小是變化的,可以事先利用函數 cvIntegral 計算積分圖像。 - CV_BLUR (simple blur) - 對每個象素鄰域
param1
×param2
求和並做尺度變換 1/(param1
•param2
). - CV_GAUSSIAN (gaussian blur) - 對圖像進行核大小爲
param1
×param2
的高斯卷積 - CV_MEDIAN (median blur) - 發現鄰域
param1
×param1
的中值 (i.e. 鄰域是方的). - CV_BILATERAL (雙濾波) - 應用雙向 3x3 濾波,彩色 sigma=
param1
,空間 sigma=param2
. 關於雙向濾波,可參考http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html
- CV_BLUR_NO_SCALE (簡單不帶尺度變換的模糊) - 對每個象素領域
- param1
- 平滑操作的第一個參數.
- param2
- 平滑操作的第二個參數.
param2
爲零對應簡單的尺度變換和高斯模糊。 - param3
- 對應高斯參數的 Gaussian sigma (標準差). 如果爲零,這由下面的核尺寸計算:
sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 對應水平核, n=param2 對應垂直核.
對小的卷積核 (3×3 to 7×7) 使用標準 sigma 速度會快。如果param3
不爲零,而param1
和param2
爲零,則核大小有 sigma 計算 (以保證足夠精確的操作).
函數 cvSmooth 可使用上面任何一種方法平滑圖像。每一種方法都有自己的特點以及侷限。
沒有縮放的圖像平滑僅支持單通道圖像,並且支持8位、16位、32位和32位浮點格式。
簡單模糊和高斯模糊支持 1- 或 3-通道, 8-比特 和 32-比特 浮點圖像。這兩種方法可以(in-place)方式處理圖像。
中值和雙向濾波工作於 1- 或 3-通道, 8-位圖像,但是不能以 in-place 方式處理圖像.