HUNNISH 注:
本翻譯是直接根據 OpenCV Beta 4.0 版本的用戶手冊翻譯的,原文件是:<opencv_directory>/doc/ref/opencvref_cv.htm, 可以從 SOURCEFORG 上面的 OpenCV 項目下載,也可以直接從
阿須數碼 中下載:
http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cv.htm。
翻譯中肯定有不少錯誤,另外也有些術語和原文語義理解不透導致翻譯不準確或者錯誤,也請有心人賜教。翻譯這些英文參考手冊的目的是想與國內 OPENCV 的愛好者一起提高 OPENCV 在計算機視覺、模式識別和圖像處理方面的實際應用水平
各種方法的圖像平滑
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) - 發(fā)現(xiàn)鄰域 param1×param1 的中值 (i.e. 鄰域是方的).
CV_BILATERAL (雙濾波) - 應用雙向 3x3 濾波,彩色 sigma=param1,空間 sigma=param2. 關于雙向濾波,可參考
http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.htmlparam1
平滑操作的第一個參數.
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 方式處理圖像.
對圖像做卷積
void cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel, CvPoint anchor=cvPoint(-1,-1));#define cvConvolve2D cvFilter2Dsrc
輸入圖像.
dst
輸出圖像.
kernel
卷積核, 單通道浮點矩陣. 如果想要應用不同的核于不同的通道,先用
cvSplit 函數分解圖像到單個色彩通道上,然后單獨處理。
anchor
核的錨點表示一個被濾波的點在核內的位置。 錨點應該處于核內部。缺省值 (-1,-1) 表示錨點在核中心。
函數
cvFilter2D 對圖像進行線性濾波,支持 In-place 操作。當開孔部分位于圖像外面時,函數從最近鄰的圖像內部象素差值得到邊界外面的象素值。
計算積分圖像
void cvIntegral( const CvArr* image, CvArr* sum, CvArr* sqsum=NULL, CvArr* tilted_sum=NULL );image
輸入圖像, W×H, 單通道,8位或浮點 (32f 或 64f).
sum
積分圖像, W+1×H+1, 單通道,32位整數或 double 精度的浮點數(64f).
sqsum
對象素值平方的積分圖像,W+1×H+1, 單通道,32位整數或 double 精度的浮點數 (64f).
tilted_sum
旋轉45度的積分圖像,單通道,32位整數或 double 精度的浮點數 (64f).
函數
cvIntegral 計算一次或高次積分圖像:
sum(X,Y)=sumx<X,y<Yimage(x,y)sqsum(X,Y)=sumx<X,y<Yimage(x,y)2tilted_sum(X,Y)=sumy<Y,abs(x-X)<yimage(x,y)利用積分圖像,可以方便得到某個區(qū)域象素點的和、均值、標準方差或在 0(1) 的選擇角度。例如:
sumx1<=x<x2,y1<=y<y2image(x,y)=sum(x2,y2)-sum(x1,y2)-sum(x2,y1)+sum(x1,x1)
因此可以在變化的窗口內做快速平滑或窗口相關。
色彩空間轉換
void cvCvtColor( const CvArr* src, CvArr* dst, int code );src
輸入的 8-比特 或浮點圖像.
dst
輸出的 8-比特 或浮點圖像.
code
色彩空間轉換,通過定義 CV_<src_color_space>2<dst_color_space> 常數 (見下面).
函數
cvCvtColor 將輸入圖像從一個色彩空間轉換為另外一個色彩空間。函數忽略 IplImage 頭中定義的 colorModel 和 channelSeq 域,所以輸入圖像的色彩空間應該正確指定 (包括通道的順序,對RGB空間而言,BGR 意味著 24-位格式,其排列為 B0 G0 R0 B1 G1 R1 ... 層疊,而 RGB 意味著 24-位格式,其排列為 R0 G0 B0R1 G1 B1 ... 層疊). 函數做如下變換:
RGB 空間內部的變換,如增加/刪除 alpha 通道,反相通道順序,16位 RGB彩色變換(Rx5:Gx6:Rx5),以及灰度圖像的變換,使用:RGB[A]->Gray: Y=0.212671*R + 0.715160*G + 0.072169*B + 0*AGray->RGB[A]: R=Y G=Y B=Y A=0所有可能的圖像色彩空間的相互變換公式列舉如下:
RGB<=>XYZ (CV_BGR2XYZ, CV_RGB2XYZ, CV_XYZ2BGR, CV_XYZ2RGB):|X| |0.412411 0.357585 0.180454| |R||Y| = |0.212649 0.715169 0.072182|*|G||Z| |0.019332 0.119195 0.950390| |B||R| | 3.240479 -1.53715 -0.498535| |X||G| = |-0.969256 1.875991 0.041556|*|Y||B| | 0.055648 -0.204043 1.057311| |Z|
RGB<=>YCrCb (CV_BGR2YCrCb, CV_RGB2YCrCb, CV_YCrCb2BGR, CV_YCrCb2RGB)Y=0.299*R + 0.587*G + 0.114*BCr=(R-Y)*0.713 + 128Cb=(B-Y)*0.564 + 128R=Y + 1.403*(Cr - 128)G=Y - 0.344*(Cr - 128) - 0.714*(Cb - 128)B=Y + 1.773*(Cb - 128)
RGB=>HSV (CV_BGR2HSV,CV_RGB2HSV)V=max(R,G,B)S=(V-min(R,G,B))*255/V if V!=0, 0 otherwise (G - B)*60/S, if V=RH= 180+(B - R)*60/S, if V=G 240+(R - G)*60/S, if V=Bif H<0 then H=H+360使用上面從 0° 到360° 變化的公式計算色調(hue)值,確保它們被 2 除后能試用于8位。
RGB=>Lab (CV_BGR2Lab, CV_RGB2Lab)|X| |0.433910 0.376220 0.189860| |R/255||Y| = |0.212649 0.715169 0.072182|*|G/255||Z| |0.017756 0.109478 0.872915| |B/255|L = 116*Y1/3 for Y>0.008856L = 903.3*Y for Y<=0.008856a = 500*(f(X)-f(Y))b = 200*(f(Y)-f(Z))where f(t)=t1/3 for t>0.008856 f(t)=7.787*t+16/116 for t<=0.008856上面的公式可以參考
http://www.cica.indiana.edu/cica/faq/color_spaces/color.spaces.htmlBayer=>RGB (CV_BayerBG2BGR, CV_BayerGB2BGR, CV_BayerRG2BGR, CV_BayerGR2BGR,
CV_BayerBG2RGB, CV_BayerRG2BGR, CV_BayerGB2RGB, CV_BayerGR2BGR,
CV_BayerRG2RGB, CV_BayerBG2BGR, CV_BayerGR2RGB, CV_BayerGB2BGR)Bayer 模式被廣泛應用于 CCD 和 CMOS 攝像頭. 它允許從一個單獨平面中得到彩色圖像,該平面中的 R/G/B 象素點被安排如下:
R
G
R
G
R
G
B
G
B
G
R
G
R
G
R
G
B
G
B
G
R
G
R
G
R
G
B
G
B
G
The output RGB components of a pixel are interpolated from 1, 2 or 4 neighbors of the pixel having the same color. There are several modifications of the above pattern that can be achieved by shifting the pattern one pixel left and/or one pixel up. The two letters C1 and C2 in the conversion constants CV_BayerC1C22{BGR|RGB} indicate the particular pattern type - these are components from the second row, second and third columns, respectively. For example, the above pattern has very popular "BG" type.
對數組元素進行固定閾值操作
void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type );src
原始數組 (單通道, 8-比特 of 32-比特 浮點數).
dst
輸出數組,必須與 src 的類型一致,或者為 8-比特.
threshold
閾值
max_value
使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值.
threshold_type
閾值類型 (見討論)
函數
cvThreshold 對單通道數組應用固定閾值操作。典型的是對灰度圖像進行閾值操作得到二值圖像。(
cvCmpS 也可以達到此目的) 或者是去掉噪聲,例如過濾很小或很大象素值的圖像點。有好幾種對圖像取閾值的方法,本函數支持的方法由 threshold_type 確定:
threshold_type=CV_THRESH_BINARY:dst(x,y) = max_value, if src(x,y)>threshold 0, otherwisethreshold_type=CV_THRESH_BINARY_INV:dst(x,y) = 0, if src(x,y)>threshold max_value, otherwisethreshold_type=CV_THRESH_TRUNC:dst(x,y) = threshold, if src(x,y)>threshold src(x,y), otherwisethreshold_type=CV_THRESH_TOZERO:dst(x,y) = src(x,y), if (x,y)>threshold 0, otherwisethreshold_type=CV_THRESH_TOZERO_INV:dst(x,y) = 0, if src(x,y)>threshold src(x,y), otherwise下面是圖形化的閾值描述:
自適應閾值方法
void cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value, int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C, int threshold_type=CV_THRESH_BINARY, int block_size=3, double param1=5 );src
輸入圖像.
dst
輸出圖像.
max_value
使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值.
adaptive_method
自適應閾值算法使用:CV_ADAPTIVE_THRESH_MEAN_C 或 CV_ADAPTIVE_THRESH_GAUSSIAN_C (見討論).
threshold_type
取閾值類型:必須是下者之一CV_THRESH_BINARY,
CV_THRESH_BINARY_INV
block_size
用來計算閾值的象素鄰域大小: 3, 5, 7, ...
param1
與方法有關的參數。對方法 CV_ADAPTIVE_THRESH_MEAN_C 和 CV_ADAPTIVE_THRESH_GAUSSIAN_C, 它是一個從均值或加權均值提取的常數(見討論), 盡管它可以是負數。
函數
cvAdaptiveThreshold 將灰度圖像變換到二值圖像,采用下面公式:
threshold_type=CV_THRESH_BINARY:dst(x,y) = max_value, if src(x,y)>T(x,y) 0, otherwisethreshold_type=CV_THRESH_BINARY_INV:dst(x,y) = 0, if src(x,y)>T(x,y) max_value, otherwise其中 TI 是為每一個象素點單獨計算的閾值
對方法 CV_ADAPTIVE_THRESH_MEAN_C,它是 block_size × block_size 塊中的象素點,被參數 param1 所減,得到的均值,
對方法 CV_ADAPTIVE_THRESH_GAUSSIAN_C 它是 block_size × block_size 塊中的象素點,被參數 param1 所減,得到的加權和(gaussian)。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=95534