OPENCV用户手册之图像处理部分(之四):滤波器与色彩转换(中文翻译)
2008-04-11 19:07
666 查看
2004年09月06日 10:17:00
本翻译是直接根据 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
在计算机视觉、模式识别和图像处理方面的实际应用水平
src
输入图像.
dst
输出图像.
smoothtype
平滑方法:
CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素领域
求和。如果邻域大小是变化的,可以事先利用函数
cvIntegral 计算积分图像。
CV_BLUR (simple blur) - 对每个象素邻域
1/(
CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为
CV_MEDIAN (median blur) - 发现邻域
邻域是方的).
CV_BILATERAL (双滤波) - 应用双向 3x3 滤波,彩色
sigma=
关于双向滤波,可参考 http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html
param1
平滑操作的第一个参数.
param2
平滑操作的第二个参数.
为零对应简单的尺度变换和高斯模糊。
param3
对应高斯参数的 Gaussian sigma (标准差).
如果为零,这由下面的核尺寸计算:
对小的卷积核 (3×3 to 7×7) 使用标准 sigma 速度会快。如果
(以保证足够精确的操作).
函数
cvSmooth
可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。
没有缩放的图像平滑仅支持单通道图像,并且支持8位、16位、32位和32位浮点格式。
简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特 和 32-比特
浮点图像。这两种方法可以(in-place)方式处理图像。
中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以
in-place 方式处理图像.
src
输入图像.
dst
输出图像.
kernel
卷积核, 单通道浮点矩阵. 如果想要应用不同的核于不同的通道,先用
cvSplit
函数分解图像到单个色彩通道上,然后单独处理。
anchor
核的锚点表示一个被滤波的点在核内的位置。
锚点应该处于核内部。缺省值 (-1,-1) 表示锚点在核中心。
函数
cvFilter2D
对图像进行线性滤波,支持 In-place
操作。当开孔部分位于图像外面时,函数从最近邻的图像内部象素差值得到边界外面的象素值。
image
输入图像,
(32f 或 64f).
sum
积分图像,
单通道,32位整数或 double 精度的浮点数(64f).
sqsum
对象素值平方的积分图像,
单通道,32位整数或 double 精度的浮点数 (64f).
tilted_sum
旋转45度的积分图像,单通道,32位整数或 double 精度的浮点数
(64f).
函数
cvIntegral
计算一次或高次积分图像:
利用积分图像,可以方便得到某个区域象素点的和、均值、标准方差或在
0(1) 的选择角度。例如:
sumx1<=x<x2,y1<=y<y2image(x,y)=sum(x2,y2)-sum(x1,y2)-sum(x2,y1)+sum(x1,x1)
因此可以在变化的窗口内做快速平滑或窗口相关。
src
输入的 8-比特 或浮点图像.
dst
输出的 8-比特 或浮点图像.
code
色彩空间转换,通过定义
CV_<src_color_space>2<dst_color_space> 常数
(见下面).
函数
cvCvtColor
将输入图像从一个色彩空间转换为另外一个色彩空间。函数忽略
(包括通道的顺序,对RGB空间而言,BGR 意味着 24-位格式,其排列为
B0 G0 R0 B1
G1 R1 ... 层叠,而 RGB 意味着
24-位格式,其排列为 R0 G0 B0
R1 G1 B1 ... 层叠).
函数做如下变换:
RGB 空间内部的变换,如增加/删除 alpha
通道,反相通道顺序,16位
RGB彩色变换(Rx5:Gx6:Rx5),以及灰度图像的变换,使用:
所有可能的图像色彩空间的相互变换公式列举如下:
RGB<=>XYZ (CV_BGR2XYZ, CV_RGB2XYZ, CV_XYZ2BGR,
CV_XYZ2RGB):
RGB<=>YCrCb (CV_BGR2YCrCb, CV_RGB2YCrCb, CV_YCrCb2BGR,
CV_YCrCb2RGB)
RGB=>HSV (CV_BGR2HSV,CV_RGB2HSV)
使用上面从 0° 到 360° 变化的公式计算色调(hue)值,确保它们被
2 除后能试用于8位。
RGB=>Lab (CV_BGR2Lab, CV_RGB2Lab)
上面的公式可以参考 http://www.cica.indiana.edu/cica/faq/color_spaces/color.spaces.html
Bayer=>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
象素点被安排如下:
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.
src
原始数组 (单通道, 8-比特 of 32-比特 浮点数).
dst
输出数组,必须与
8-比特.
threshold
阈值
max_value
使用
threshold_type
阈值类型 (见讨论)
函数
cvThreshold
对单通道数组应用固定阈值操作。典型的是对灰度图像进行阈值操作得到二值图像。(cvCmpS
也可以达到此目的)
或者是去掉噪声,例如过滤很小或很大象素值的图像点。有好几种对图像取阈值的方法,本函数支持的方法由
下面是图形化的阈值描述:
src
输入图像.
dst
输出图像.
max_value
使用
adaptive_method
自适应阈值算法使用:
threshold_type
取阈值类型:必须是下者之一
block_size
用来计算阈值的象素邻域大小: 3, 5, 7, ...
param1
与方法有关的参数。对方法
和
它是一个从均值或加权均值提取的常数(见讨论),
尽管它可以是负数。
函数
cvAdaptiveThreshold
将灰度图像变换到二值图像,采用下面公式:
[/code]
其中 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
分享到新浪微博
滤波器与色彩转换
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
在计算机视觉、模式识别和图像处理方面的实际应用水平
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
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 方式处理图像.
Filter2D
对图像做卷积void cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel, CvPoint anchor=cvPoint(-1,-1));#define cvConvolve2D cvFilter2D
src
输入图像.
dst
输出图像.
kernel
卷积核, 单通道浮点矩阵. 如果想要应用不同的核于不同的通道,先用
cvSplit
函数分解图像到单个色彩通道上,然后单独处理。
anchor
核的锚点表示一个被滤波的点在核内的位置。
锚点应该处于核内部。缺省值 (-1,-1) 表示锚点在核中心。
函数
cvFilter2D
对图像进行线性滤波,支持 In-place
操作。当开孔部分位于图像外面时,函数从最近邻的图像内部象素差值得到边界外面的象素值。
Integral
计算积分图像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)
利用积分图像,可以方便得到某个区域象素点的和、均值、标准方差或在
0(1) 的选择角度。例如:
sumx1<=x<x2,y1<=y<y2image(x,y)=sum(x2,y2)-sum(x1,y2)-sum(x2,y1)+sum(x1,x1)
因此可以在变化的窗口内做快速平滑或窗口相关。
CvtColor
色彩空间转换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 B0
R1 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.html
Bayer=>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 |
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.
Threshold
对数组元素进行固定阈值操作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
下面是图形化的阈值描述:
AdaptiveThreshold
自适应阈值方法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=[code]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
[/code]
其中 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
分享到新浪微博
相关文章推荐
- OPENCV用户手册之图像处理部分(之三):形态学操作(中文翻译)
- OPENCV用户手册之图像处理部分(之三):形态学操作(中文翻译)
- OPENCV用户手册之图像处理部分(之二):采样、差值与几何变换(中文翻译)
- OPENCV用户手册之图像处理部分(之一):梯度、边缘与角点(中文翻译)
- OPENCV之CV部分参考手册的中文翻译
- OPENCV之CV部分参考手册的中文翻译
- OPENCV用户手册之图像处理(网络资料搜集整理)
- 【第二部分 图像处理】第4章 Opencv图像处理高阶【1马赛克】
- 使用OpenCV中的几种线性滤波器对图像平滑处理
- 【第二部分-图像处理】第3章 Opencv图像处理进阶-【1 图像处理A-滤波】(imgproc组件、feature2D组件)
- 部分opencv中的GPU加速函数(中文翻译)
- 【opencv 官方教程】翻译3 图像处理 上
- 【opencv 官方教程】翻译3 图像处理 下
- 【第二部分 图像处理】第4章 Opencv图像处理高阶【2毛玻璃滤镜】
- OpenCV2计算机编程手册(二)基于类的图像处理
- 【第二部分 图像处理】第3章 Opencv图像处理进阶【6角点检测 B】
- OpenCV学习笔记——图像处理之滤波器ImgProc
- 【第二部分 图像处理】第3章 Opencv图像处理进阶【3 直方图与匹配 B】
- 【第二部分 图像处理】第3章 Opencv图像处理进阶【4 图像轮廓A】
- 【第二部分-图像处理】第1章 Opencv图像处理入门