实现输入与目标matlab图像陷波滤波器的相关运算的滤波器称为什么

图像平滑处理分析(滤波)
Author:胡健
1、图像平滑(smooth)也称为&模糊处理&,最常见的smooth的用法是减少图像上的噪声或者失真。
2、图像滤波
什么是图像滤波呢?就是在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制。图像滤波的目的就是消除图像的噪声和抽出对象的特征,图像滤波的要求是:不能损坏图像的重要特征信息(如轮廓和边缘),还需要使得滤波处理后的图像更加清晰。
对于平滑滤波来说,他的目的有两类:(1)、模糊(2)、消噪
空间域内的平滑滤波采用平均法,就是求邻近像素域内的平均亮度值,所以邻域的大小与平滑的效果直接相关,邻域越大,平滑的效果越好,但是需要注意的是,邻域过大的话,平滑处理会使得边缘信息损失得越大。从而使输出的图像变得模糊。
那滤波器是什么呢?
我们可以将滤波器想象成一个包含加权系数的窗口,当使用这个滤波器平滑处理图像时,就把这个窗口放在图像之上,透过这个窗口来看我们得到的图像。
下面是一些滤波器:
方框滤波&& boxblur函数来实现 &&线性滤波
均值滤波(邻域平均滤波)&& blur函数 &&线性滤波
高斯滤波&&GaussianBlur函数 &&线性滤波
中值滤波&&medianBlur函数 &&非线性滤波
双边滤波&&bilateralFilter函数 &&非线性滤波
线性滤波器介绍 --
&&什么叫做线性滤波器呢?
线性滤波器常用于剔除输入信号中不想要的频率或者从许多频率中选择一个想要的频率。
下面是几种常见的线性滤波器:
(1)、允许低频率通过的低通滤波器
(2)、允许高频率通过的高通滤波器
(3)、允许一定区域的频率通过的带通滤波器
(4)、阻止一定范围内的频率并且允许其他频率通过的带阻滤波器
(5)、仅仅改变相位的全通滤波器
(6)、阻止一个狭窄频率范围通过的特殊带阻滤波器,陷波滤波器
&&关于滤波和模糊
滤波是将信号中的特定波段频率过滤掉的操作,是为了抑制和防止干扰的措施。
比如高斯滤波,可以分为高斯低通滤波和高斯高通滤波,这个要看高斯函数,低通就是模糊,高通就是锐化。
高斯滤波就是指用高斯函数作为滤波函数的滤波操作,
同样的,高斯模糊就是高斯低通滤波,高斯锐化就是高斯高通滤波。
&&&关于方框滤波
void boxFilter(InputArray src,OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), boolnormalize=true, int borderType=BORDER_DEFAULT )
&-&参数介绍
?第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。该函数对通道是独立处理的,且可以处理任意通道数的图片,但需要注意,待处理的图片深度应该为CV_8U, CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
?第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。
?第三个参数,int类型的ddepth,输出图像的深度,-1代表使用原图深度,即src.depth()。
?第四个参数,Size类型(对Size类型稍后有讲解)的ksize,内核的大小。一般这样写Size( w,h )来表示内核的大小( 其中,w 为像素宽度, h为像素高度)。Size(3,3)就表示3x3的核大小,Size(5,5)就表示5x5的核大小
?第五个参数,Point类型的anchor,表示锚点(即被平滑的那个点),注意他有默认值Point(-1,-1)。如果这个点坐标是负值的话,就表示取核的中心为锚点,所以默认值Point(-1,-1)表示这个锚点在核的中心。
?第六个参数,bool类型的normalize,默认值为true,一个标识符,表示内核是否被其区域归一化(normalized)了。
?第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT,我们一般不去管它。
&&均值滤波
均值滤波是最简单的一种滤波操作,输出图像的每一个像素是窗口内的输入图像对应的像素的平均值,也就是归一化后的方框滤波,它的实现也是使用方框滤波来实现的。
实现算法:对于每个像素点,用窗口内的平均像素来替换。
但是均值滤波会破坏图像的细节,从而使得图像变得模糊。
void blur(InputArray src, OutputArraydst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT )
第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。该函数对通道是独立处理的,且可以处理任意通道数的图片,但需要注意,待处理的图片深度应该为CV_8U, CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
?第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。比如可以用Mat::Clone,以源图片为模板,来初始化得到如假包换的目标图。
?第三个参数,Size类型(对Size类型稍后有讲解)的ksize,内核的大小。一般这样写Size( w,h )来表示内核的大小( 其中,w 为像素宽度, h为像素高度)。Size(3,3)就表示3x3的核大小,Size(5,5)就表示5x5的核大小
?第四个参数,Point类型的anchor,表示锚点(即被平滑的那个点),注意他有默认值Point(-1,-1)。如果这个点坐标是负值的话,就表示取核的中心为锚点,所以默认值Point(-1,-1)表示这个锚点在核的中心。
?第五个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT,我们一般不去管它。
&&高斯滤波
高斯滤波是一种线性滤波,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值都由其本身和邻域内的其他像素值经过加权平均后得到的,他的具体操作方式为:
用一个模板(卷积,掩模)扫描图像中的每一个像素点,用模板确定的邻域内的像素的加权平均值取替换模板中心像素点的值。
void GaussianBlur(InputArray src,OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, intborderType=BORDER_DEFAULT )
& 第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。它可以是单独的任意通道数的图片,但需要注意,图片深度应该为CV_8U,CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
& 第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。比如可以用Mat::Clone,以源图片为模板,来初始化得到如假包换的目标图。
& 第三个参数,Size类型的ksize高斯内核的大小。其中ksize.width和ksize.height可以不同,但他们都必须为正数和奇数。或者,它们可以是零的,它们都是由sigma计算而来。
& 第四个参数,double类型的sigmaX,表示高斯核函数在X方向的的标准偏差。
& 第五个参数,double类型的sigmaY,表示高斯核函数在Y方向的的标准偏差。若sigmaY为零,就将它设为sigmaX,如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来。
& 为了结果的正确性着想,最好是把第三个参数Size,第四个参数sigmaX和第五个参数sigmaY全部指定到。
& 第六个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT,我们一般不去管它。
下面是二维高斯函数:
这是进行方框滤波操作的函数,也就是boxFilter
Author:hujian
void cv::boxFilter( InputArray _src, OutputArray _dst, int ddepth,
Size ksize, Point anchor,
bool normalize, int borderType )
CV_OCL_RUN(_dst.isUMat(), ocl_boxFilter(_src, _dst, ddepth, ksize, anchor, borderType, normalize))
//src是操作的图形矩阵
Mat src = _src.getMat();
//得到原始图像的类型和深度等信息
int stype = src.type(), sdepth = CV_MAT_DEPTH(stype), cn = CV_MAT_CN(stype);
//-1代表使用原始图像的深度,所以给他赋值为原始图像的深度吧
if( ddepth & 0 )
//创建和初始化输出图像
_dst.create( src.size(), CV_MAKETYPE(ddepth, cn) );
//然后一如既往的我们只操作dst
Mat dst = _dst.getMat();
if( borderType != BORDER_CONSTANT && normalize && (borderType & BORDER_ISOLATED) != 0 )
if( src.rows == 1 )
ksize.height = 1;
if( src.cols == 1 )
ksize.width = 1;
//调用滤波引擎,开始滤波操作
Ptr f = createBoxFilter( src.type(), dst.type(),
ksize, anchor, normalize, borderType );
f-&apply( src, dst );
上面的boxfilter用到了一个叫做滤波引擎的东西,也就是FilterEngine,现在我们来分析一下这个引擎。
class FilterEngine
//! the default constructor
FilterEngine();
//! the full constructor. Either _filter2D or both _rowFilter and _columnFilter must be non-empty.
FilterEngine(const Ptr& _filter2D,
const Ptr& _rowFilter,
const Ptr& _columnFilter,
int srcType, int dstType, int bufType,
int _rowBorderType = BORDER_REPLICATE,
int _columnBorderType = -1,
const Scalar& _borderValue = Scalar());
//! the destructor
virtual ~FilterEngine();
//! reinitializes the engine. The previously assigned filters are released.
void init(const Ptr& _filter2D,
const Ptr& _rowFilter,
const Ptr& _columnFilter,
int srcType, int dstType, int bufType,
int _rowBorderType = BORDER_REPLICATE,
int _columnBorderType = -1,
const Scalar& _borderValue = Scalar());
//! starts filtering of the specified ROI of an image of size wholeSize.
virtual int start(Size wholeSize, Rect roi, int maxBufRows = -1);
//! starts filtering of the specified ROI of the specified image.
virtual int start(const Mat& src, const Rect& srcRoi = Rect(0,0,-1,-1),
bool isolated = false, int maxBufRows = -1);
//! processes the next srcCount rows of the image.
virtual int proceed(const uchar* src, int srcStep, int srcCount,
uchar* dst, int dstStep);
//! applies filter to the specified ROI of the image. if srcRoi=(0,0,-1,-1), the whole image is filtered.
virtual void apply( const Mat& src, Mat& dst,
const Rect& srcRoi = Rect(0,0,-1,-1),
Point dstOfs = Point(0,0),
bool isolated = false);
//! returns true if the filter is separable
bool isSeparable() const { return !filter2D; }
//! returns the number
int remainingInputRows()
int remainingOutputRows()
Size wholeS
int rowBorderT
int columnBorderT
std::vector borderT
int borderElemS
std::vector ringB
std::vector srcR
std::vector constBorderV
std::vector constBorderR
int startY;
int startY0;
std::vector
Ptr filter2D;
Ptr columnF
虽然不明白,但是上面的有很明确的注释呢!
&& blur函数源码
//这是均值滤波的函数
//我们可以看到它仅仅调用了方框滤波函数,然后将归一化设置为true
//也就是说,均值滤波就是归一化后的方框滤波
void cv::blur( InputArray src, OutputArray dst,
Size ksize, Point anchor, int borderType )
boxFilter( src, dst, -1, ksize, anchor, true, borderType );
&&高斯滤波源码分析
//下面就是高斯滤波函数源码
void cv::GaussianBlur( InputArray _src, OutputArray _dst, Size ksize,
double sigma1, double sigma2,
int borderType )
//得到原始图像的信息,根据这些信息创建输出函数
int type = _src.type();
Size size = _src.size();
_dst.create( size, type );
//处理特殊情况
if( borderType != BORDER_CONSTANT && (borderType & BORDER_ISOLATED) != 0 )
if( size.height == 1 )
ksize.height = 1;
if( size.width == 1 )
ksize.width = 1;
//这还能干吗呢?只是纯粹为了优化而加了这句吧!
if( ksize.width == 1 && ksize.height == 1 )
//直接复制,没什么可以做的
_src.copyTo(_dst);
//创建高斯函数内核,进行滤波
//注意没有调用滤波引起啊!可能是因为效率不如这样做好吧!
createGaussianKernels(kx, ky, type, ksize, sigma1, sigma2);
sepFilter2D(_src, _dst, CV_MAT_DEPTH(type), kx, ky, Point(-1,-1), 0, borderType );
下面就是线性滤波函数的使用了-&
//this file will contain the usage of linaer filter in opencv
//the first function is boxFilter
void usage_boxFilter()
Mat img = imread(&./smimage/1.jpg&);
namedWindow(&BoxFilter_SRC&);
namedWindow(&BoxFilter_RES&);
imshow(&BoxFilter_SRC&, img);
//filter in boxfilter
boxFilter(img, res, -1, Size(5, 5));
//show the res image
imshow(&BoxFilter_RES&, res);
waitKey(0);
上面的函数运行结果应该是原来的图像经过boxfilter之后变得更见暧昧与朦胧了。
//usage of blur filter
void usage_blur()
//read the image and show the src image
Mat image = imread(&./smimage/1.jpg&);
namedWindow(&SRC&);
imshow(&SRC&, image);
blur(image, res, Size(5, 5));
namedWindow(&RES&);
imshow(&RES&, res);
waitKey(0);
上面的结果应该是更加暧昧了,和boxfilter好像没什么差别
_Filter_Linear_
_Filter_Linear_
//this file will contain the usage of linaer filter in opencv
//the first function is boxFilter
void usage_boxFilter()
Mat img = imread(&./smimage/1.jpg&);
namedWindow(&BoxFilter_SRC&);
namedWindow(&BoxFilter_RES&);
imshow(&BoxFilter_SRC&, img);
//filter in boxfilter
boxFilter(img, res, -1, Size(5, 5));
//show the res image
imshow(&BoxFilter_RES&, res);
waitKey(0);
//usage of blur filter
void usage_blur()
//read the image and show the src image
Mat image = imread(&./smimage/1.jpg&);
namedWindow(&SRC&);
imshow(&SRC&, image);
blur(image, res, Size(5, 5));
namedWindow(&RES&);
imshow(&RES&, res);
waitKey(0);
//usage of GaussianBlur
void usage_GaussianBlur()
//read the image and show the src image
Mat image = imread(&./smimage/1.jpg&);
namedWindow(&SRC&);
imshow(&SRC&, image);
GaussianBlur(image, res, Size(5,5),0,0);
namedWindow(&RES&);
imshow(&RES&, res);
waitKey(0);
//this is a sum function,and include boxfilter,blur,gaussianblur
src_image, dst_image_box, dst_image_blur, dst_image_
boxFilterValue = 3; //boxfilter
blurValue = 3; //blur
gaussianValue = 3;
//this is the callback function SET
void onBoxFilter(int v, void* d)
//do boxfilter
boxFilter(src_image, dst_image_box, -1, Size(boxFilterValue, boxFilterValue));
//show this image
imshow(&BoxFilter&, dst_image_box);
void onBlur(int v, void* d)
//do boxfilter
blur(src_image, dst_image_box,Size(blurValue,blurValue));
//show this image
imshow(&Blur&, dst_image_box);
void onGauss(int v, void* d)
//do boxfilter
GaussianBlur(src_image, dst_image_box,Size(gaussianValue, gaussianValue),0,0);
//show this image
imshow(&GaussianBlur&, dst_image_box);
void boxFilter_blur_gaussianblur()
//ok,imread the src image
src_image = imread(&./smimage/1.jpg&);
if (src_image.empty()){
printf(&This is a empty image or file\n&);
//show the src image
imshow(&SRC&, src_image);
//boxfilter part
namedWindow(&BoxFilter&);
createTrackbar(&Value&, &BoxFilter&,&boxFilterValue,30, onBoxFilter);
onBoxFilter(0, 0);
//blur part
namedWindow(&Blur&);
createTrackbar(&Value&, &Blur&, &blurValue, 30, onBlur);
onBlur(0, 0);
//gaussian
namedWindow(&GaussianBlur&);
createTrackbar(&Value&, &GaussianBlur&, &gaussianValue, 30, onGauss);
onGauss(0, 0);
waitKey(0);
#endif //end of filter linear part a
&PART B 非线性滤波器介绍&-
&&中值滤波
首先介绍的是中值滤波:就像他的名字一样,他的思想就是用像素点邻域中的灰度的中值来代替该像素点的灰度值,中值滤波在去除脉冲噪声、椒盐噪声的同时还能保留图像的边缘细节。
那中值滤波和均值滤波之间的差别是什么呢?
中值滤波是用中值来替代目标像素,而均值则是用均值来替代。
所以很明显在均值滤波中,所有邻域内的像素点都参与了计算,对输出图像产生了影响,但是中值滤波用的是中值来代替目标像素点,所以噪声像素很难参与到目标图像中去,所以在去除噪声方面,中值滤波更科学合理一些,但是这样的代价是所花费的时间要比均值滤波要多,因为要做排序等处理。
&&双边滤波
这是一种可以保留边界特征去除噪声的滤波器。滤波器由两个函数构成,一个函数是由几何空间距离来决定滤波器系数,另一个则由像素差决定滤波器系数。
下面是双边滤波器的滤波函数:
其中,加权系数W(i,j,k,l)取决于定义域核和值域核的乘积。
定义域核表示如下:
值域核表示如下:
所以双边滤波权重系数可得如下:
void medianBlur(InputArray src,OutputArray dst, int ksize)
?第一个参数,InputArray类型的src,函数的输入参数,填1、3或者4通道的Mat类型的图像;当ksize为3或者5的时候,图像深度需为CV_8U,CV_16U,或CV_32F其中之一,而对于较大孔径尺寸的图片,它只能是CV_8U。
?第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。我们可以用Mat::Clone,以源图片为模板,来初始化得到如假包换的目标图。
?第三个参数,int类型的ksize,孔径的线性尺寸(aperture linear size),注意这个参数必须是大于1的奇数,比如:3,5,7,9 &
//usage of medianblur
void usage_medianBlur()
Mat image = imread(&./smimage/18.jpg&);
imshow(&SRC&, image);
//medianblur
medianBlur(image, res, 3);
imshow(&RES&, res);
waitKey(0);
双边滤波:
void bilateralFilter(InputArray src, OutputArraydst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT)
第一个参数,InputArray类型的src,输入图像,即源图像,需要为8位或者浮点型单通道、三通道的图像。
& 第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。
& 第三个参数,int类型的d,表示在过滤过程中每个像素邻域的直径。如果这个值我们设其为非正数,那么OpenCV会从第五个参数sigmaSpace来计算出它来。
& 第四个参数,double类型的sigmaColor,颜色空间滤波器的sigma值。这个参数的值越大,就表明该像素邻域内有更宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
& 第五个参数,double类型的sigmaSpace坐标空间中滤波器的sigma值,坐标空间的标注方差。他的数值越大,意味着越远的像素会相互影响,从而使更大的区域足够相似的颜色获取相同的颜色。当d&0,d指定了邻域大小且与sigmaSpace无关。否则,d正比于sigmaSpace。
& 第六个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_DEFAULT。
//usage of bilateralFilter
void usage_bilateralFilter()
Mat src = imread(&./smimage/18.jpg&);
imshow(&SRC&, src);
bilateralFilter(src, res, 20, 50, 10);
imshow(&RES&, res);
waitKey(0);
至此,初步平滑处理学习完成了。Template Matching Techniques for Automatic IR Target Recogni_滤波器_中国百科网
Template Matching Techniques for Automatic IR Target Recogni
    最近在做图像处理,翻译了一篇模板匹配的文章,老外就是敢想,越是简单的问题说的越明白,不想中国人总是把简单的问题复杂化,不就一模板匹配吗,把目标的有用姿态做成个数据库,就匹配呗,接着在评估这种思路的应用前景。
现实和模拟场景中的红外自动目标识别模板匹配技术:测试与评估
摘要:目前有实验验证红外图像自动目标识别。主要基于模板识别技术和综合鉴别函数,滤波器用来增强方法的鲁棒性并减小运算量。在大量不同的场景下以及不同的噪声水平下进行深度实验。对传统方法进行了精细的提炼并做了可操作性的调整。研究源于数字目标数据库,研究真实的红外图像
关键词:目标识别,模板匹配,SDF滤波器,红外图像。
2011-5-模板互相关匹配方法是模式识别和红外型自动目标识别的常用方法。匹配空间滤波器(MSF),它的能量归一形式通常被称为标准化互相关。即使它们基于不同的能量水平,并受白噪声的影响,二者提供了一种对图像间相似度的估计方法。相反,对目标畸变的鲁棒性差以及在交叉相关输出的峰值不明显是其主要缺点。在目标图像表现出与源图像不同的aspect angles和尺度因素的差别的情况中,上述的缺点是至关重要的。两种基本相关函数的变形,都是二维傅里叶变换得到的。即纯相位相关(POC)和对称相位相关(SPOC),可以用来提高输出相关峰值的尖锐程度。这两种形式的相关函数提高了辨别能力,但不能保证提高对畸变的鲁棒性。
对于畸变的抗干扰,综合辨别函数(SDFs)提供了合适的解决方法。事实上,由SDFs产生的综合相关滤波器整合相关图像,因此重点在于这些图像共有的特征以及提高泛化。此外,通过这些滤波器,特征明显的表现出来。当目标图像和用于生成滤波器的图像相似时,会有明显的峰值输出。不相似时峰值会大大衰减。
在基于模板匹配的相关目标识别系统中,每个输入目标都要和一系列相关图像比较。如果数据库包含了大量例图,SDF方法也能有效的减小运算量。事实上,通过一个滤波器对应一系列图像的方式,数据库减小了,运算时间也减小了。
目前以SDF合成为重点的研究工作,主要基于相位相关方法。为了使不通滤波器的输出结果更容易比较,提出了一个相关滤波合成的变形。
用于分析的数据库由数字产生的空中和地面的装备组成。为了达到测试目的,数据库经过噪声和有不同静态属性的背景处理。本文也介绍了应用在实际红外图像上的检测结果。
下一节介绍相位SDF方法和可能的改进方法;第三节介绍目标数据库和测试相关的修改。第四节和第五节介绍结果和结论。
2.相位相关和SDF滤波器
空间相关函数将两幅图像作为输入参数,输出结果提供了两幅图像间的相似度估计。该方法基于匹配滤波理论;实现相当于简单的线性滤波操作。广泛用于模式识别,但在其原始形式中,输出依赖输入信号的整体能量。因此只有在能量已知或者可以准确估计能量的情况下,可以使用。另一点需要考虑的是平滑的峰值。这种情况下,在相似输出的基础上很难区分两幅相似的图像。实际上,如果选出其中一幅作为源图像,它的自相关和其他图像的互相关相似,所以很难区分两个输出,尤其还有噪声的影响。为了提高方法的鲁棒性,首先有必要介绍NCC:从目标图像和源图像中减去均值后,滤波前先进行能量归一化。As a result ,the output becomes independent of zero frequency component and of signal energy. 但是输出峰值仍然平滑并有不需要的旁瓣。
在谱域,相位相位相关方法可以弥补这一缺点。一般情况下,相位相关方法可以提供比NCC更尖锐的峰值,同时提高了区分相似图像的选择能力。
假设y(n1,n2)代表源图像,x(n1,n2)代表用于比较的输入信号,即目标图像。相位相关函数如下所示:
X(k1,k2)和Y(k1,k2)是x(n1,n2)和y(n1,n2)的二维傅里叶变换,符号依次代表尺度空间相关和复数共轭。表达式中输入信号x(n1,n2)与Y(K1,k2)*相位的傅里叶逆变换互相关,称为相位图像如图一所示(相应的图像数据以yph(n1,n2)表示)。主要效果是在相关平面产生尖锐峰值,which denotes an increased energy concertration 提高了在最大值附近的能量集中 respect to NCC。
为了更高的选择性,使用对称相位相关,在源图像和输入信号的纯相位图像xph(n1,n2)和yph(n1,n2)上,表达式如下所示:
在表达式中,只考虑了相位谱。也就是说:the spectral amplitude is equalized and set to unit value. 此运算符产生了相当尖锐的高峰水平相比为NCC,特别是在自相关的情况下,在那里产生一个二维克罗内克&函数(图1)。
为了测试不同方法的区分能力,考虑下述情况,一个特殊目标,在这里是一架F15,图像文件中是从不同视角观察它。从这幅图像中选取一部分图像并和其他视角下的F15是互相关的,包括它自己在内。将输出最大值放在一个数组中并假设元素间的距离与角度的差异成比例(图6和图8获得更多细节)。图2显示以上过程。
可以看到对于NCC,在输出矩阵中,平滑区域出现在正确匹配的目标附近。相邻图像,仅仅与源图像相近,产生的输出值接近最大值。相反,在SPOC输出结果来看,目标图像相比源图像的小变化却产生了剧烈的峰值衰减。这一结果说明了即使在处理非常相似的图像时,方法也有很高的区分能力。POC函数的结果介于NCC与SPOC之间。可以视为一种选择性和一般性之间较好折中。
在等式(1)和(2)中,the input arguments are inversely multiplited by their 振幅频率的响应。在应用中,这一做法对于emphasize较高频率有实际效果,它对应一个信号依赖高通滤波器。这种方式着重强调了目标识别的重要信息含量高的频谱。另一个负面影响是灵敏度高频率的噪音增加。
为了提高失真鲁棒性,降低计算量(计算量在需要比较大量图像时是重要因素),通过使用SDFs可以从POC和SPOC建立一套新的滤波器。通过SDF综合技术,从复合源图像得到新的滤波器,它可以代替这些源图像。因此可以减小数据库的大小从而减少运算时间。此外,在处理复合目标图像时使用一个相关滤波器就意味着比从前描述的方法更具有一般性,同时对失真和噪声也有效。
在基本的SDF公式中,互相关函数between the desired filter and the training images of the same class are required to assume the same value in the origin of the output plane .方程3描述的线性系统执行这一过程。
fi(n1,n2)是training image ,hSDF(n1,n2)是综合滤波器,fai是相关函数在(0,0)处的值。
从等式(3)和(4)可以将SDF表达为矩阵形式:
在等式5中,矩阵F是训练图像按字典阅读和列排序得到的,向量fai是期望的输出,向量hSDF包含SDF滤波器。表达式5没有特别的要求to observe,除了训练图像的线性独立。也可以将SDF应用到纯相位图像。图三所示是一个纯相位滤波器的例子,而图四显示了纯相位的SDF与SPOC的差别。
为了使输出信号正确的可以比较,信号的单位化很重要。在方程5描述的SDF中唯一的约束是原点处相关函数的值。这样不利于大量数据的比较,因此为了得到更好的结果有必要采用多个滤波器。
一个实际应用的方法就是通过在滤波综合本身中设置值,统一SDF滤波器的能量。
收录时间:日 12:58:31 来源:高校自动化网 作者:匿名
上一篇: &(&&)
创建分享人
喜欢此文章的还喜欢
Copyright by ;All rights reserved. 联系:QQ:

我要回帖

更多关于 matlab图像陷波滤波器 的文章

 

随机推荐