数字图像处理 滤波哪些参数可以控制滤波效果

数字图像处理 滤波_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
数字图像处理 滤波
&&高斯滤波以及巴特沃斯滤波
包含时域及频域
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢3900人阅读
数字图像处理(5)
一阶微分和二阶微分:
人眼更敏感的地方往往是图像细节,因此我们感兴趣的是图像灰度突变的开始点与结束点以及沿着灰度斜坡处的微分性质。
一阶微分的性质:
1) 在恒定灰度区域的微分值为零
2) 在灰度台阶或斜坡处为分支非零
3) 沿着斜坡的微分值非零
二阶微分性质:
1) 在恒定灰度区域微分值为零
2) 在灰度台阶或胁迫的起点处微分值非零
3) 沿着斜坡的微分值非零
一阶微分基本定义:
二阶微分基本定义:
我们看一下图3.8
很明显一阶微分不仅在图像灰度跳变的地方非零,在灰度斜坡处也非零,这样可以产生粗边缘;而二阶微分只在图像灰度跳变的地方非零,可以产生一个双边缘。
使用二阶微分进行图像锐化--锐化滤波算子
我们更加关注各向同性的滤波器,所谓的各向同性是旋转不变的,即将原图像进行旋转后进行滤波处理给出的结果与先对图像进行滤波然后再旋转的结果相同。其中最简单各项同性微分算子就是拉普拉斯算子了:
二维图像的拉普拉斯微分算子定义为:
以上三个公式结合起来:
拉普拉斯算子可以用一些模板来实现,下图给出了几种常用的拉普拉斯模板:
其中(a)(c)是以90度为增量的旋转不变性,(b)(d)是以45度为增量的旋转不变性。
使用拉普拉斯进行锐化的操作步骤:
1) 对原图像使用上图的算子进行滤波
2) 原图减去滤波后的图像(差值图像,成为模板)
3) 把2)中得到的模板图像和原图相加就得到锐化的图像(注意:对(c)(d)算子是和原图相减)
步骤2)下公式所示:
步骤3)如下公式所示:
上式中的系数k(k&=0),当k=1时,成为非锐化掩蔽,k&1时成为高提升滤波
其中,高滤波提升要考虑可能会使原图像最小灰度值变负的情况发生,这将导致晕轮效应。
所以k的值不能随便取。
使用一阶微分对(非线性)图像锐化—梯度
图像中的一阶微分使用梯度的幅值来实现的,函数f(x,y)在坐标(x,y)处的梯度定义为二维列向量
其幅值为:
在实现中,近似用绝对值来近似幅值:
一阶微分实现常用以下几个模板:
以上图的(d)(e)为例,其一阶微分为:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:309856次
积分:2494
积分:2494
排名:第14687名
原创:44篇
转载:22篇
评论:113条
(2)(1)(1)(3)(1)(1)(1)(5)(3)(2)(2)(3)(3)(12)(1)(2)(1)(1)(2)(2)(1)(7)(3)(3)(1)(3)数字图像处理,数字图像处理的分类,数字图像处理参数指标等|捷配电子通
您好,欢迎来到捷配电子市场网
您所在的位置:&&&&数字图像处理
数字图像处理的基本概况
  数字图像处理,即Digital Image Processing,是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。数字图像处理的产生和迅速发展主要受三个因素的影响:一是计算机的发展;二是数学的发展(特别是离散数学理论的创立和完善);三是广泛的农牧业、林业、环境、军事、工业和医学等方面的应用需求的增长。
  20世纪20年代,图像处理首次应用于改善伦敦和纽约之间海底电缆发送的图片质量。到20世纪50年代,数字计算机发展到一定的水平后,数字图像处理才真正引起人们的兴趣。1964年美国喷气推进实验室用计算机对“徘徊者七号”太空船发回的大批月球照片进行处理,收到明显的效果。20世纪60年代末,数字图像处理具备了比较完整的体系,形成了一门新兴的学科。20世纪70年代,数字图像处理技术得到迅猛的发展,理论和方法进一步完善,应用范围更加广泛。在这一时期,图像处理主要和模式识别及图像理解系统的研究相联系,如文字识别、医学图像处理、遥感图像的处理等。20世纪70年代后期到现在,各个应用领域对数字图像处理提出越来越高的要求,促进了这门学科向更高级的方向发展。特别是在景物理解和计算机视觉(即机器视觉)方面,图像处理已由二维处理发展到三维理解或解释。近年来,随着计算机和其它各有关领域的迅速发展,例如在图像表现、科学计算可视化、多媒体计算技术等方面的发展,数字图像处理已从一个专门的研究领域变成了科学研究和人机界面中的一种普遍应用的工具。
图像输入设备
  图像输入设备在输入信息的速度、空间分辨率等方面各有特 ,可以根据需要选用。
  一般常用的有CCD摄像机、磁带录像机、扫描仪等。输入设备一般只起光电转换的作用,即将图像的光强信息转换为模拟电信号,然后再送到数字化设备进行模数转换。
图像处理的软件开发工具
  有了Windows运行环境,还要有用于图像处理的各种通用或专用软件开发工具,才能在Windows环境下进行各种图像处理编程。
  现在比较通用的开发工具有Visual C++ 、Delphi和Matlab,这里对它们在图像处理上各自的特 分别作一简要概述:
  Visual C++
  (1)Visual C++是一个面向对象、可视化开发工具,提供了面向对象的应用程序框架MFC(Microsoft Foundation Class:微软基础类库),大大简化了程序员的编程工作,提高了模块的可重用性。Visual C++还提供了基于CASE技术的可视化软件自动生成和维护工具AppWizard 、ClassWizard 、VisualStudio、WizardBar等,帮助用户直观的、可视地设计程序的用户界面,可以方便地编写和管 各种类,维护程序源代码,从而提高了开发效率。用户可以比较容易地使用C/C++编程。
  (2 )MFC未提供现成的DIB(与设备无关的位图,一般是以*.BMP文件格式保存的)类,因此用户在编写图像处理软件时,要自己设计WindowsAPI 的图像输入输出模块,这给MFC用户带来很多不便。
  (3 )Visual C++是代码优化做得最好的开发工具。
  Delphi
  (1)Delphi有一个面向对象的、可视化的集成开发环境 (IDE ),它提供了大量组件 (Component ),能够方便、高效地建立起所需要的Windows界面设计。利用Delphi带有的面向对象的程序设计语言Obj ect Pascal,编写出响应某个事件发生时的事件处理程序。Delphi还提供了大量的过程与函数,极大地方便了程序设计。
  (2 )Delphi有一个图像对象Image组件,支持多种常用的图像文件格式,这为编写图像处理程序带来了极大的方便。
  (3 )Delphi是可视化和效率综合平衡做得最出色的开发工具。
数字图像处理相关资讯
一周热门词条排行
数字图像处理相关技术资料
数字图像处理相关词条数字图像处理- 3.6 锐化空间滤波器
时间: 07:04:40
&&&& 阅读:1145
&&&& 评论:
&&&& 收藏:0
标签:Reference Link :&&
Reference Link :&
3.6 锐化空间滤波器
锐化处理的主要目的是突出图像中的细节或者增强被模糊了的细节,这种模糊不是由于错误操作,就是特殊图像获取方法的固有印象。总的来说,微分算子的响应强度与图像在该店(应用了算子)的突变程度有关。这样一来,图像微分增强了边缘和其他突变(如噪声)并削弱了灰度变化缓慢的区域。
&为了说明简单,主要集中讨论一阶微分的性质。我们最高兴去的微分性质是恒定灰度区域(平坦段)、突变的开头与结尾(阶梯和斜坡突变)及沿着灰度级斜坡处的特性。这些类型的突变可以用来对图像中的噪声点、细线与边缘模型化。
3.6.1 基础
数字函数(图像,离散的数字序列)的微分定义条件:
& 这里我们首先了解下数学函数的微分,微分可以用不同的术语定义,也有各种方法定义这些差别,然而,对于一阶微分任何定义都必须保证以下几点:(1)在平坦段(灰度不变区域)微分值为零;(2)在灰度阶梯或斜坡的起始点处微分值非零;(3)沿着斜坡面微分值非零。任何二阶微分的定义也类似:(1)在平坦去微分值必为零;(2)在灰度阶梯或斜坡的起始点处微分值非零;(3)沿着斜坡面微分值非零。
& 因为我们处理的是数字量,其值是有限的,故最大灰度级的变换也是有限的,变化发生最短距离是在两相邻像素之间。对于一元函数f(x)表达一阶微分定义是一个差值:
&f/&x&=&f(x+1)&&&f(x)
这里,为了与对二元图像函数f(x,y)求微分时的表达式保持一致,使用偏导数符号,对二元函数,我们将沿着两个空间轴处理偏微分,类似地,用差分定义二阶微分:
下图表明了上述的具体含义。注意下图中二阶差分的零交叉点(Zero crossing),零交叉点对于边缘的定位非常有用。
二阶微分在增强细节方面比一阶微分好得多,这是一个适合锐化图像的理想特征。
3.6.2 基于二阶微分的图像增强--拉普拉斯算子
& 这里介绍二阶微分在图像增强处理中的应用。首先定义一个二阶微分的离散公式,然后构造一个基于此式的滤波器。我们最关注的是一种各向同性滤波器,这种滤波器的响应与滤波器作用的图像的突变方向无关。也就是说,各向同性滤波器是旋转不变的,即将原始图像旋转后进行滤波处理给出的结果与先对图像滤波,然后再旋转的结果相同。
&&&处理方法
&&&最简单的各向同性微分算子是拉普拉斯算子,一个二元图像函数f(x,y)的拉普拉斯变换定义为:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
因为任意阶微分都是线型操作,所以拉普拉斯变换也是一个线性操作。
考虑到有两个变量,因此,我们在x,y方向上对二阶偏微分采用下俩定义:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
因此二维拉维拉斯数字实现可由这两个分量相加得到:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&,这里关注系数矩阵即掩膜:
这个矩阵给出了在90度方向上旋转的各向同性结果,如果向得到45度方向上旋转的各向同性结果则,将中心对角点标为1,中心点为-8即可。
&& 由于拉普拉斯是一种微分算子,它的应用强调图像中灰度的突变及降低灰度慢变化的区域。将原始图像和拉普拉斯图像叠加在一起的简单方法可以保护拉普拉斯锐化处理的效果,同时又能复原背景信息。我们使用拉普拉斯变换对图像增强的基本方法可表示为下式:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
含有对角线信息的拉普拉斯算子
3.6.3 非锐化掩蔽和高提升滤波
在印刷和出版界用了多年的图像锐化处理过程,从原图中减去一副非锐化(平滑后的)图像,达到锐化的目的。
步骤有以下几步:
模糊源图像
从原图像中减去模糊图像(产生的差值图像称为模板)
将模板加到原图像上。
令&表示模糊图像,那么首先我们得到模板:
然后在原图像上加上该模板的一个权重部分:
上式中,当k=1时,我们得到上面定义的非锐化掩蔽,当k&1时,该处理称为高提升滤波,当k&1时,则不强调非锐化模板的贡献。
需要注意的是,如果k足够大的时候,负值将导致边缘周围有暗的晕轮,会产生不好的效果。
3.6.4 使用一阶微分对(非线性)图像锐化&梯度
一个函数f在f(x,y)的梯度是定义为二维列向量(这是一个矢量,给定了一个方向):
然后其幅度值为,其中M(x,y)是与原图像大小相同的图像,该图像通常称为梯度图像。后面的表达式仍保留了灰度的变换,但丢失掉了其各向同性。
下面介绍两种算子:一阶Roberts交叉梯度算子和二阶Soble算子:
在3&3的区域图像中,应该是gx = (z8&z5)&gy&=&(z9&z6),但是Roberts进行了改良,提出了Roberts算子,gx=(z9&z5),gy=(z8&z6);由于偶数模板没有对称中心,所以与之前的卷积模板定义中,运算结果等会中心点位置值不能对应, 所以使用奇数的模板,例如3 * 3 的Soble算子,gx=(z7+2z8+z9)&(z1+2z2+z3),gy=(z3+2z6+z9)&(z1+2z4+z7)。
使用梯度进行边缘增强,可以用以突出灰度图像中看不见的小斑点,在下面的例子中甚至可以去除灰度不变或变换缓慢的图案阴影。
3.7 混合空间增强法
本书所提供例子的策略是:用Laplace突出图像中的小细节,然后使用梯度法突出边缘。平滑过得梯度图像用于掩蔽Laplace图像,最后使用灰度变换来增大图像的灰度动态范围。其中降低噪声可以使用中值滤波器或者使用原图像梯度操作的平滑形式形成的一个模板。
图像请直接参考Digital Image Processing (3rd&Edition)Page 192。
3.8 使用模糊技术进行灰度变换和空间变换
3.8.1 引言
隶属度函数&(z):用以描述一个元素是否属于集合的模糊程度,若是一个阶跃函数,可以认为是一个我们所了解的"干脆的"集合,若是一个分段函数,则可以看做一个模糊集合:
3.8.2模糊集合论原理
模糊集合是一个有z值和(赋予z成员等级的)相应隶属度函数组成的序对,即
A={z,&A(z)|z&Z}
其中隶属度函数是关键,表明了元素z到集合的一种对应关系。如果隶属度函数仅有0,1两个值,那么模糊集合退化为"干脆的"集合。下面这张图展示了模糊集合间的一些关系:
有一些常用的隶属度函数,如三角形、梯形、&型、S型、种型、截尾高斯型等,之后用到了会另作介绍。
3.8.3 模糊集合的应用(略)
3.8.4 使用模糊集合进行灰度变换
对于一副灰度图像,描述它的某个区域"暗的"、"灰的"、"亮的"都是利用模糊的概念,那么我们将给予这三种情况定义三种模糊集合:
那么对于任何输入z0,输出v0为
从书中给予的例子中来看,图像的细节部分得到了比较好的保留,但代价是计算量大大增加。
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!posts - 94,&
comments - 0,&
trackbacks - 0
快速中值滤波算法
      在图像处理中,在进行如边缘检测这样的进一步处理之前,通常需要首先进行一定程度的降噪。中值滤波是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的噪声。这个设计思想就是检查输入信号中的采样并判断它是否代表了信号,使用奇数个采样组成的观察窗实现这项功能。观察窗口中的数值进行排序,位于观察窗中间的中值作为输出。然后,丢弃最早的值,取得新的采样,重复上面的计算过程。中值滤波是图像处理中的一个常用步骤,它对于斑点噪声和椒盐噪声来说尤其有用。保存边缘的特性使它在不希望出现边缘模糊的场合也很有用。
      为了演示中值滤波器的工作过程,我们给下面的数组加上观察窗 3 ,重复边界的数值:
      x = [2 80 6 3]
      y[1] = Median[2 2 80] = 2      y[2] = Median[2 80 6] = Median[2 6 80] = 6      y[3] = Median[80 6 3] = Median[3 6 80] = 6      y[4] = Median[6 3 3] = Median[3 3 6] = 3
      于是      y = [2 6 6 3]
      其中 y 是 x 的中值滤波输出。
       普通中值滤波算法伪代码:
      Input: image X of size m*n, kernel radius r.
      output: image Y as X.
      for i = r to m - r do&
        for j = r to n - r do
          initialize list A[]
          for a = i-r to i+r
            for b = j-r to j+r
              add X(a, b) to &A[]
            end&
          end
          sort A[] then Y(i ,j) = A[A.size/2]
        end
      end
      处理前: & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & &&& & & &
      &处理后:& & & & &
    &&
& &  但是,上述算法在像素处理处的复杂度为O(r2).
  OpenCV实现代码:
#include "cv.h"
#include "highgui.h"
#include &iostream&
using namespace
using namespace
int main(int argc, char* argv[])
Mat src = imread("beauty.jpg");
//参数是按顺序写的
//高斯滤波
//src:输入图像
//dst:输出图像
//Size(5,5)模板大小,为奇数
//x方向方差
//Y方向方差
GaussianBlur(src,dst,Size(<span style="color: #,<span style="color: #),<span style="color: #,<span style="color: #);
imwrite("gauss.jpg",dst);
//中值滤波
//src:输入图像
//dst::输出图像
//模板宽度,为奇数
medianBlur(src,dst,<span style="color: #);
imwrite("med.jpg",dst);
//均值滤波
//src:输入图像
//dst:输出图像
//模板大小
//Point(-1,-1):被平滑点位置,为负值取核中心
blur(src,dst,Size(<span style="color: #,<span style="color: #),Point(-<span style="color: #,-<span style="color: #));
imwrite("mean.jpg",dst);
//双边滤波
//src:输入图像
//dst:输入图像
//滤波模板半径
//颜色空间标准差
//坐标空间标准差
bilateralFilter(src,dst,<span style="color: #,<span style="color: #.0,<span style="color: #.0);//这里滤波没什么效果,不明白
imwrite("bil.jpg",dst);
waitKey();
return <span style="color: #;
  快速中值滤波算法:
     O(r)复杂度的Huang算法:&&
& & & & & & & &   &  
    这个代码的核心在于维护一个kernel直方图,可以实现快速的读取和删除扫描区域的像素值。
int StopAmount = (<span style="color: # * Radius + <span style="color: #) * (<span style="color: #*Radius +<span style="color: #) * P
int Sum = <span style="color: #;
for (int I = <span style="color: #; I &= <span style="color: #5; I++)
Sum += HistBlue(I);
if (Sum &= StopAmount)
// 满足停止条件
Value = I;
// 得到中值
&   在MFC中实现的huang算法:
/******************************************************************
* 功能: 彩色图像的快速中值滤波平滑处理
* 参数: image0为原图形,image1平滑结果,
w、h为图象的宽和高
size为进行平滑的邻域边长
******************************************************************/
void FastSmoothMedianCl(BYTE* image0, BYTE* image1, unsigned int w, unsigned int h, unsigned int size)
//将图像转化为矩阵形式
BYTE** imageBuf0 = CreatImage(image0, w, h);
BYTE** imageBuf1 = CreatImage(image1, w, h);
//设定模板
int x,y,c;
//初始化 x = size/2 为中心的点的直方图,
//根据邻域大小设定模板
templt = new int*[<span style="color: #];
for(c=<span style="color: #; c&<span style="color: #; c++)
templt[c] = new int [<span style="color: #6];
for(y=size/<span style="color: #; y&h-size/<span style="color: #; y++)
for(c=<span style="color: #; c&<span style="color: #; c++)
for (int i= <span style="color: #; i& <span style="color: #6; i ++){
templt[c][i] = <span style="color: #;
for(int i = y-size/<span style="color: #; i & y+size/<span style="color: #; i++){
for (int j = <span style="color: #; j & j++){
int k = imageBuf0[i][j*<span style="color: #+c];
templt[c][k] ++;
for(x=size/<span style="color: #+<span style="color: #; x&w-size/<span style="color: #; x++)
for(c=<span style="color: #; c&<span style="color: #; c++)
//取采样窗口中像素灰度的中值
a=FastMedianValueCl(imageBuf0,w,h,templt,size,x,y,c);
//过限处理
a = a&<span style="color: #5?<span style="color: #5:a;
a = a&<span style="color: #?<span style="color: #:a;
imageBuf1[y][x*<span style="color: #+c]=a;
//清理内存
for(int i = <span style="color: #; i & <span style="color: #; i ++){
delete templt[i];
free(imageBuf0);
free(imageBuf1);
/**************************************************
* 功能: 使用直方图对彩色图邻域获取中值
* 参数: imageBuf为目标图像 w、h为图像大小
templt为模板 tw为邻域大小
x,y为当前采样窗口中心像素的坐标
cn为颜色分量编号 0为蓝色 1为绿色 2为红色
**************************************************/
int FastMedianValueCl(BYTE** imageBuf0, int w, int h, int**templt, int tw, int x, int y, int cn)
int i,j,k;
int px,py,
int count = <span style="color: #;
//用来保存采样窗口的像素数量
int count_temp = <span style="color: #;
k=<span style="color: #;
//从采样窗口中取得像素灰度
for(i=<span style="color: #; i& i++)
py=y-tw/<span style="color: #+i;
px=x+tw/<span style="color: #+<span style="color: #;
//如果该像素位于采样窗口
//保存像素灰度
k = imageBuf0[py][px*<span style="color: #+cn];
templt[cn][k]++;
px=x-tw/<span style="color: #;
//保存像素灰度
k = imageBuf0[py][px*<span style="color: #+cn];
templt[cn][k]--;
for(int a = <span style="color: #; a & <span style="color: #6; a++){
count_temp += templt[cn][a];
if(count_temp & (tw*tw)/<span style="color: #) break;
    与普通算法的比较:
    O(1)复杂度的CTMF算法:&&
  首先,对于每一列图像,我们都为其维护一个直方图(对于8位图像,该直方图有256个元素),在整个的处理过程中,这些直方图数据都必须得到维护。每列直方图累积了2r+1个垂直方向上相邻像素的信息,初始的时候,这2r+1个像素是分别以第一行的每个像素为中心的。核的直方图通过累积2r+1个相邻的列直方图数据获取。其实,我们所做的就是将核直方图分解成他对应的列直方图的集合,在整个滤波的过程中,这些直方图数据在两个步骤内用恒定的时间保持最新。
  考虑从某个像素向右移动一个像素的情况。对于当前行,核最右侧的列直方图首先需要更新,而此时该列的列直方图中的数据还是以上一行对应位置那个像素为中心计算的。因此需要减去最上一个像素对应的直方图然后加上其下面一像素的直方图信息。这样做的效果就是将列直方图数据降低一行。这一步很明显是个0(1)操作,只有一次加法和一次减法,而于半径r无关。
& & & 第二步更新核直方图,其是2r+1个列直方图之和。这是通过减去最左侧的列直方图数据,然后再加上第一步所处理的那一列的列直方图数据获得的。这一步也是个O(1)操作,如图2所示。如前所述,加法、减法以及计算直方图的中值的耗时都是一些依赖于图像位深的计算,而于滤波半径无关。
   & & & & & & & &   
    这个算法较之前的Huang算法的差别在于,充分利用了之前的数据,这有点类似于动态规划,也是用空间换取时间的策略。
&参考博客:/Imageshop/archive//3045672.html
阅读(...) 评论()}

我要回帖

更多关于 数字图像处理 滤波 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信