图像卷积与滤波知识点整理(2)

来源:互联网 发布:电话备份软件 编辑:程序博客网 时间:2024/06/05 16:02

本文参考博文: http://blog.csdn.net/yangtrees/article/details/8740933


1.图像卷积(模板)

(1).使用模板处理图像相关概念:     

     模板:矩阵方块,其数学含义是卷积运算。      

     卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别于卷积(权矩阵)的每个元素对应相 乘,所有乘积之和作为区域中心像素的新值。
     卷积核:卷积时使用到的权用一个矩阵表示,该矩阵一个权矩阵。
     卷积示例:
              3 * 3 的像素区域R与卷积G卷积运算:
              R5(中心像素)=R1G1 + R2G2 + R3G3 + R4G4 + R5G5 + R6G6 + R7G7 + R8G8 + R9G9
            

(2).使用模板处理图像的问题(越界问题):
       边界问题:当处理图像边界像素时,卷积与图像使用区域不能匹配,卷积核的中心边界像素点对应,卷积运算将出现问题。
       处理办法:
              A. 忽略边界像素,即处理后的图像将丢掉这些像素。
              B. 保留原边界像素,即copy边界像素到处理后的图像

(3).常用模板


我们来看下一维卷积的概念
连续空间的卷积定义:  f(x)g(x)的卷积是 f(t-x)g(x) 在t从负无穷到正无穷的积分值. t-x要在f(x)定义域内,所以看上去很大的积分实际上还是在定范围的. 实际的过程就是f(x) 先做一个Y轴的反转,然后再沿X轴平移t就是f(t-x),然后再把g(x)拿来,两者乘积的值再积分.想象下如果g(x)或者f(x)是个单位的阶越函数. 那么就是f(t-x)g(x)相交部分的面积.这就是卷积了.
把积分符号换成求和就是离散空间的卷积定义了.那么在图像卷积卷积地是什么意思呢,就是图像就是图像f(x),模板是g(x),然后将模版g(x)在模版中移动,每到一个位置,就把f(x)g(x)的定义域相交的元素卷积定义上是线性系统分析经常用到的.线性系统就是一个系统的输入和输出的关系是线性关系.就是说整个系统可以分解成N多的无关独立变化,整个系统就是这些变化的累加. 如 x1->y1, x2->y2; 那么A*x1 + B*x2 -> A*y1 + B*y2 这就是线性系统. 表示一个线性系统可以用积分的形式 

,

就是f(t,x)表示的是A B之类的线性系数.看上去很像卷积呀,对,如果f(t,x) = F(t-x) 不就是了吗.从f(t,x)变成F(t-x)实际上是说明f(t,x)是个线性移不变,就是说变量的差不变化的时候, 那么函数的值不变化. 实际上说明一个事情就是说线性移不变系统的输出可以通过输入和表示系统线性特征的函数卷积得到.


2.图像滤波

(1)图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接响到后续图像处理和分析的有效性和可靠性。(滤波就是要去除没用的信息,保留有用的信息,可能是低频,也可能是高频)

(2)滤波的目的有两个:一是抽出对象的特征作为图像识别的特征模式;  另一个是为适应图像处理的要求,消除图像数字化时所混入的噪声。

对滤波处理的要求有两条:一是不能损坏图像的轮廓及边缘等重要信息;二是使图像清晰视觉效果好。

(3)图像的滤波方法: 

(一)图像的滤波方法很多,主要可以分为频率域法和空间域法两大类。频率域法的处理是在图像的某种变换域内,对图像的变换系数值进行运算,然后通过逆变换获得增强图像。这是一种间接的图像滤波方法。空间滤波方法是一类直接的滤波方法,它在处理图像时直接对图像灰度作运算。

     <1>频率域滤波:是将图像从空间或时间域转换到频率域,再利用变换系数反映某些图像特征的性质进行图像滤波的方法。傅立叶变换是一种常用的变换。在傅立叶变换域,频谱的直流分量正比于图像的平均亮度,噪声对应于频率较高的区域,图像实体位于频率较低的区域。图像在变换具有的这些内在特性可被用于图像滤波。可以构造一个低通滤波器,使低频分量顺利通过而有效地阻于高频分量,即可滤除图像的噪声,再经过反变换来取得平滑的图像。

          低通的数学表达式如下式所示:
                                      

          式中F (u, v)一含有噪声的原图像的傅立叶变换;
          H (u, v)一为传递函数,也称转移函数(即低通滤波器);
          G (u, v)一为经低通滤波后输出图像的傅立叶变换。
          H滤波滤去高频成分,而低频信息基本无损失地通过。滤波后,经傅立叶变换反变换可得平滑图像,即
         
 选择适当的传递函数H (u, v),对频率域低通滤波关系重大。常用的传递函数有梯形函数、指数函数、巴特沃思函数等。
          频域常用的几种低通滤波器为理想低通滤波器(Ideal  circular Iow-passfilter)、巴特沃思(Butterworth)低通滤波器、指数低通滤波器及梯形低通滤波器。这些低通滤波器,都能在图像内有噪声干扰成分时起到改善的作用。
      <2>常用的平面空间域滤波法有两类:  

          一类是拟合图像的方法,包括n阶多项式拟合、离散正交多项式拟合、二次曲面拟合等多种方法; 

          另一类是平滑图像的方法,包括领域平均法、中值滤波法、梯度倒数加权法、选择式掩模法等。

(二)按频率高低

      <1>高通滤波:边缘提取与增强。边缘区域的灰度变换加大,也就是频率较高。所以,对于高通滤波,边缘部分将被保留,非边缘部分将被过滤;

      <2>低通滤波:边缘平滑,边缘区域将被平滑过渡。

         附:高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,在图像处理的降噪、平滑中应用较多,特别是对抑制或消除服从正态分布的噪声非常有效。
        高斯滤波的过程其实就是对整幅图像进行加权平均操作的过程。滤波后图像上每一个像素的灰度值大小,由其本身和邻域内的其他像素共同决定。具体实现是:用一个大小为(2*N+1)的模板(或称卷积核、掩模)依次扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度替代模板中心像素点的灰度值。

        一般用到的3*3模板与5*5模板:

 

        从结构化掩模中可以看到,处于掩模中心的位置比其他任何像素的权值都大,因此在均值计算中给定的这一像素显得更为重要。而距离掩模中心较远的像素就显得不太重要,这样做是为了减小平滑处理中的模糊。

下图为3*3模板 5*5模板的测试效果:


        单纯从效果来看, 两个模板都起到了平滑的作用,只是程度有深浅的区分. 那么从理论上来说为什么能起到平滑的作用呢? 很显然, 像素的颜色不仅由自身决定,同时由其周围的像素加权决定, 客观上减小了和周围像素的差异。同时这些权重的设定满足了越近权重越大的规律。 从理论来讲, 这些权重的分布满足了著名的所谓高斯分布。高斯卷积核的尺寸越大,图像的平滑效果越好,表现为图像越模糊,同时图像细节丢失的越多;尺寸越小,平滑效果越弱,图像细节丢失越少。

上述测试用例的源码为:

#include "highgui.h"    
#include "cv.h"    

void gaussianFilter(uchar* data, int width, int height)
{
int i, j, index, sum;
int templates[25] = { 1, 4, 7, 4, 1,
4, 16, 26, 16, 4,
7, 26, 41, 26, 7,
4, 16, 26, 16, 4,
1, 4, 7, 4, 1 };//5*5模板     
sum = height * width * sizeof(uchar);//图像所占内存容量     
uchar *tmpdata = (uchar*)malloc(sum);
memcpy((char*)tmpdata, (char*)data, sum);
for (i = 2; i < height - 2; i++)
{
for (j = 2; j < width - 2; j++)
{
index = sum = 0;
for (int m = i - 2; m < i + 3; m++)
{
for (int n = j - 2; n < j + 3; n++)
{
sum += tmpdata[m * width + n] * templates[index++];     
}
}
data[i * width + j] = sum / 273;
}
}
free(tmpdata);
}

void imgOperate(IplImage* image)
{
cvNamedWindow("image-in5", CV_WINDOW_AUTOSIZE);
cvNamedWindow("image-access5", CV_WINDOW_AUTOSIZE);
cvNamedWindow("image-out5", CV_WINDOW_AUTOSIZE);
cvShowImage("image-in5", image);
//将色彩图像强制转化为灰度图像    
IplImage* pGrayImg = NULL;
IplImage* pImg = NULL;
pGrayImg = cvCreateImage(cvGetSize(image), 8, 1);
pImg = cvCreateImage(cvGetSize(image), 8, 1);
cvCvtColor(image, pGrayImg, CV_RGB2GRAY);  
//添加高斯噪声  
cvZero(pImg);
CvRNG rng = cvRNG(-1);  //初始化随机数发生器  
cvRandArr(&rng, pImg, CV_RAND_NORMAL, cvScalarAll(0), cvScalarAll(15));
cvAdd(pGrayImg, pImg, pImg);
cvShowImage("image-access5", pImg);
gaussianFilter((unsigned char*)pImg->imageData, pImg->width, pImg->height);
cvShowImage("image-out5", pImg);
cvReleaseImage(&pGrayImg);
cvWaitKey(0);
cvDestroyWindow("image-in5");
cvDestroyWindow("image-out5");
}

int main()
{
IplImage* img = cvLoadImage("E:\\11.jpg");
imgOperate(img);
cvReleaseImage(&img);
return 0;
}


(三)线性与非线性滤波

        <1>线性滤波:线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如(1)均值滤波器(模板内像素灰度值的平均值)、(2)高斯滤波器(高斯加权平均值)等。由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是可以确定并且是唯一的(转移函数即模板的傅里叶变换)。

         <2>非线性滤波:非线性滤波器的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现,如最大值滤波器、最小值滤波器、中值滤波器等,是通过比较一定邻域内的灰度值大小来实现的,没有固定的模板,因而也就没有特定的转移函数(因为没有模板作傅里叶变换),另外,膨胀和腐蚀也是通过最大值、最小值滤波器实现的。五种常见的非线性滤波算子,这五种滤波算子对不同的图像都会有不同的作用,最常用的是中值滤波,因为它的效果最好且信息损失的最少。

(1).极大值滤波

    极大值滤波就是选取像素点领域的最大值作为改点的像素值,有效率去了灰度值比较低的噪声,也可作为形态学里面的膨胀操作。

    极大值滤波可以表示为: Maximum(A)=max[A(x+i,y+j)]      (x,y)属于M

    注:(x+i,y+j)是定义在图像上的坐标,(i,j)是定义在模板M上的坐标。M即为运算的模板。

(2).极小值滤波(与极大值滤波相反)

(3).中点滤波

     中点滤波常用于去除图像中的短尾噪声,例如高斯噪声和均匀分布噪声。终点滤波器的输出时给定窗口内灰度的极大值和极小值的平均值;

    Midpoint(A)=(max[A(x+i,y+j)]+min[A(x+i,y+j)])/2          (x,y)属于M

   注:(x+i,y+j)是定义在图像上的坐标,(i,j)是定义在模板M上的坐标。M即为运算的模板。

(4).中值滤波

   中值滤波可以消除图像中的长尾噪声,例如负指数噪声和椒盐噪声。在消除噪声时,中值滤波对图像噪声的模糊极小(受模板大小的影响),中值滤波实质上是用模板内所包括像素灰度的中值来取代模板中心像素的灰度。中值滤波在消除图像内椒盐噪声和保持图像的空域细节方面,其性能优于均值滤波。

       Median(A)=Median[A(x+i,y+j)]              (x,y)属于M

注:(x+i,y+j)是定义在图像上的坐标,(i,j)是定义在模板M上的坐标。M即为运算的模板。

(5).加权中值滤波(中值滤波的改进)

    加权中值滤波是在中值滤波的基础上加以改进,其性能在一定程度上优于中值滤波。

     下面是自己在算法上的改进:以例子说明

     若说选模板的大小为5,那么这个模板就唯一确定为:

             1  1  5   1   1   

             1  1  5   1   1  

             5  5  5   5   5   

             1  1  5   1   1  

             1  1  5   1   1   

    上图中的数字表式改点像素在序列中出现的次数。然后根据模板平滑图像。实验证明该方法好于传统中值滤波。当然还有其他方法;

附:噪声          (高斯噪声:是指噪声服从高斯分布,即某个强度的噪声点个数最多,离这个强度越远噪声点个数越少,且这个规律服从高斯分布。高斯噪声是一种加性噪声,即噪声直接加到原图像上,因此可以用线性滤波器滤除。              椒盐噪声:类似把椒盐撒在图像上,因此得名,是一种在图像上出现很多白点或黑点的噪声,如电视里的雪花噪声等。椒盐噪声可以认为是一种逻辑噪声,用线性滤波器滤除的结果不好,一般采用中值滤波器滤波可以得到较好的结果。)


3.图像平滑

图像平滑 image smoothing: 压制、弱化或消除图像中的细节、突变、边缘和噪声,就是图像平滑化。图像平滑是对图像作低通滤波,可在空间域或频率域实现。空间域图像平滑方法主要用低通卷积滤波、中值滤波等;频率域图像平滑常用的低通滤波器有低通梯形滤波器、低通高斯滤波器、低通指数滤波器、巴特沃思低通滤波器等。



关系:

图像卷积:一种实现手段,不管是滤波还是别的什么,可以说是数学在图像处理的一种延伸。

图像滤波:一种图像处理方法,来实现不同目的。

图像平滑:实际上就是低通滤波。