王朝网络
分享
 
 
 

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

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

滤波器与色彩转换

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)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 头中定义的 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*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_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, 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_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, 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)。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有