`
saybody
  • 浏览: 904300 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

OPENCV用户手册之图像处理部分(之四):滤波器与色彩转换(中文翻译)

阅读更多

滤波器与色彩转换

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/(param1param2).
  • 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 不为零,而 param1param2 为零,则核大小有 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)2

tilted_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 头中定义的 colorModelchannelSeq 域,所以输入图像的色彩空间应该正确指定 (包括通道的顺序,对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*A
    Gray->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*B
    Cr=(R-Y)*0.713 + 128
    Cb=(B-Y)*0.564 + 128
    
    R=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=R
    H= 180+(B - R)*60/S,  if V=G
       240+(R - G)*60/S,  if V=B
    
    if 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.008856
    L = 903.3*Y      for Y<=0.008856
    
    a = 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

    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.


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_BINARYCV_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, otherwise

threshold_type=CV_THRESH_BINARY_INV:
dst(x,y) = 0, if src(x,y)>threshold
           max_value, otherwise

threshold_type=CV_THRESH_TRUNC:
dst(x,y) = threshold, if src(x,y)>threshold
           src(x,y), otherwise

threshold_type=CV_THRESH_TOZERO:
dst(x,y) = src(x,y), if (x,y)>threshold
           0, otherwise

threshold_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_BINARYCV_THRESH_BINARY_INV 的最大值.
adaptive_method
自适应阈值算法使用:CV_ADAPTIVE_THRESH_MEAN_CCV_ADAPTIVE_THRESH_GAUSSIAN_C (见讨论).
threshold_type
取阈值类型:必须是下者之一
  • CV_THRESH_BINARY,
  • CV_THRESH_BINARY_INV
block_size
用来计算阈值的象素邻域大小: 3, 5, 7, ...
param1
与方法有关的参数。对方法 CV_ADAPTIVE_THRESH_MEAN_CCV_ADAPTIVE_THRESH_GAUSSIAN_C, 它是一个从均值或加权均值提取的常数(见讨论), 尽管它可以是负数。

函数 cvAdaptiveThreshold 将灰度图像变换到二值图像,采用下面公式:

threshold_type=CV_THRESH_BINARY:
dst(x,y) = max_value, if src(x,y)>T(x,y)
           0, otherwise

threshold_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)。

分享到:
评论

相关推荐

    opencv中文手册.pdf

    OpenCV中文手册.pdf是一本关于计算机视觉和图像处理的技术手册,涵盖了图像处理、特征检测、图像变换、形态学操作、滤波器、色彩空间变换、金字塔、连接部件、图像与轮廓矩、特殊图像变换、直方图、匹配等主题。...

    OPENCV函数手册_opencv_opencv函数手册_

    2. 图像处理:包括滤波、边缘检测、直方图均衡化、色彩空间转换等。 3. 物体检测:如Haar特征级联分类器、HOG+SVM等方法进行人脸、行人等物体检测。 4. 特征匹配:如SIFT、SURF、ORB等特征提取和匹配算法。 5. 图像...

    opencv中文手册 完全版

    其次,OpenCV中的滤波器和特征检测是图像处理的核心部分。手册会详细介绍各种滤波技术,如高斯滤波、中值滤波和双边滤波,以及边缘检测算法,如Canny、Sobel和Laplacian。同时,特征检测如Harris角点检测、SIFT...

    OPENCV函数学习手册.pdf

    本手册旨在帮助用户学习和掌握OpenCV库中的函数使用方法,涵盖了图像处理、结构分析、运动分析与对象跟踪、模式识别、照相机标定与三维重建等领域。 在图像处理方面,OpenCV提供了多种图像梯度、边缘和角点检测的...

    OpenCV中文参考手册2010年.zip_OpenCV中文手册_cornuy7_opencv_opencv 手册

    "cornuy7"可能是该中文手册的作者或者翻译者之一,"opencv_手册"标签表明这是一个关于OpenCV的手册资源。OpenCV中文手册对于中文使用者来说,无疑降低了学习门槛,使得开发者能够更方便地理解和应用OpenCV库。 在...

    opencv中文手册中文翻译

    中文手册的翻译对于中文用户来说是一个非常宝贵的资源,可以帮助他们更好地理解和使用OpenCV中的各种功能。 1. **梯度、边缘和角点** - **Sobel算子**:用于计算图像的一阶和二阶导数,常用于边缘检测。`cvSobel`...

    OpenCv参考手册-Cv图像处理

    ### OpenCV中的图像处理知识点详解 #### 梯度、边缘和角点 在计算机视觉领域,梯度、边缘和角点检测对于特征提取、物体识别等任务至关重要。以下是一些核心函数及其功能: ##### Sobel - **功能**:使用扩展Sobel...

    opencv CV 中文参考手册

    "OpenCV CV 中文参考手册" 提供了关于库中各种函数和方法的详细信息,尤其关注图像处理、结构分析、运动分析和对象跟踪等方面。IPLimage 是 OpenCV 中的一个数据结构,专门用于存储图像数据。 在图像处理部分,手册...

    OpenCV教程及使用手册

    OpenCV(开源计算机视觉库)是一个强大的跨平台计算机视觉库,它包含了众多图像处理和计算机视觉的算法。这个压缩包提供了丰富的学习资源,包括“OpenCV教程中文版”、“OpenCV使用手册”以及一个名为“opencvchm”...

    opencv中文手册(word版)

    OpenCV 是一个强大的开源计算机视觉库,提供了...以上只是OpenCV中文手册的部分内容,实际手册中还包含了更多图像处理和计算机视觉的功能,如图像分割、特征检测、对象识别等,对于开发者来说是一份非常宝贵的资源。

    opencv技术手册.zip

    1. 图像处理:包括读取、显示、保存图像,以及色彩空间转换、滤波、直方图操作等基本功能。 2. 特征检测:如SIFT、SURF、ORB等关键点检测和描述符匹配,用于物体识别和图像配准。 3. 目标检测:Haar特征级联分类器、...

    OpenCV 2 计算机视觉编程手册_中文版 -源码

    《OpenCV 2 计算机视觉编程手册_中文版》是一本深入介绍计算机视觉领域经典库OpenCV的书籍,其源码提供了丰富的实践示例,对于学习和理解OpenCV的功能与应用至关重要。OpenCV(Open Source Computer Vision Library...

    OpenCV中文帮助手册

    OpenCV(开源计算机视觉库)是一个强大的跨平台计算机视觉库,它包含了大量的图像处理和计算机视觉算法,广泛应用于机器学习、图像分析、机器人等领域。这个"OpenCV中文帮助手册"是学习OpenCV的重要参考资料,提供了...

    OpenCV.js中文教程

    3. **图像处理基础** - **图像的基本操作**:包括图像的读取、显示、保存,以及对图像进行缩放、裁剪等基本变换。 - **算术运算**:可以进行图像间的加减乘除等运算,实现图像融合等效果。 - **色彩空间转换**:...

    OpenCV2计算机视觉编程手册源码

    这个压缩包文件“OpenCV2计算机视觉编程手册源码”包含了与《opencv2计算机视觉编程手册(中文版)》一书相关的所有实例代码和源图片,是学习和实践OpenCV2的宝贵资源。 在OpenCV2中,你可以学习到以下几个重要的...

    opencv2.4.3 教程手册

    还有可能涉及图像分割、色彩空间转换、滤波器应用等内容,这些都是OpenCV库中的重要组成部分。 `opencv2refman.pdf`则是OpenCV的参考手册,它提供了2.4.3版本的所有函数和类的详细文档。在这里,你可以找到每个函数...

    Intel图像处理库中文手册

    《Intel图像处理库中文手册》是一本详尽阐述Intel图像处理库使用的专业指南,它针对图像处理领域的开发者和研究人员提供了宝贵的资源。该手册深入讲解了库中的关键概念和技术,包括图像结构、错误处理机制、图像操作...

    Opencv基础学习资料集(含SDK中文参数手册)

    通常,这些PPT会涵盖OpenCV的基本概念,如图像数据结构、基本操作(如读取和显示图像)、颜色空间转换、滤波器应用、几何变换等。通过PPT的学习,你可以对OpenCV的架构和常用功能有一个全面的理解。 OpenCV函数速查...

    OpenCV参考手册(英文)

    OpenCV支持基本的图像处理操作,如灰度化、直方图均衡化、边缘检测(如Canny、Sobel、Hough变换)和形态学操作(如腐蚀、膨胀、开闭运算)。这些功能在图像预处理和特征提取中至关重要。 形状分析在图像识别和物体...

Global site tag (gtag.js) - Google Analytics