`
mkdkd
  • 浏览: 34417 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
社区版块
存档分类
最新评论

部分MATLAB代码

 
阅读更多

部分MATLAB代码
2009年09月28日
  部分MATLAB代码
  2、灰度直方图及直方图均衡化
  灰度直方图用于显示图像的灰度值分布情况,是数字图像处理中最简单和最实用的工具。MATLAB中提供了专门绘制直方图的函数imhist()。用它可以很简单的绘制出一幅图像的灰度直方图(见例2)。
  %例2:直方图的显示
  imshow('c:\lilizong\boat.bmp');title('原图像')
  %显示原图像
  A=imread('e:\matlabwork\tuxiang\Girl.bmp','bmp');
  figure;imhist(A),title('对应直方图')
  在图像处理中,点运算是简单而又重要的一种技术,其中最常用的一种应用就是直方图的均衡化(见例3)。
  %例3:直方图均衡化
  imshow('c:\lilizong\boat1.bmp');title('原图像')
  I=imread('c:\lilizong\boat1.bmp');
  figure;imhist(I),title('对应直方图')
  %从得到的直方图可以看出,图像的对比度很低,灰度级集中在70-160范围内,如果只取
  %这个范围内的灰度,并扩展到[0,255],则会明显增强图像对比度
  J=imadjust(I,[70/255 160/255],[]);
  figure;imshow(J),title('经灰度级调整后的图')
  figure;imhist(J),title('灰度级调整后的直方图')
  %MATLAB还提供了histeq函数(自动直方图均衡化)
  K=histeq(I);
  figure;imshow(K),title('经直方图均衡化后的图')
  figure;imhist(K),title('直方图均衡化后的直方图')
  4、图像滤波处理
  在数字图像处理中,常常会遇到图像中混杂有许多的噪声。因此,在进行图像处理中,有时要先进行祛除噪声的工作。最常用的祛除噪声的方法是用滤波器进行滤波处理。MATLAB的图像处理工具箱里也设计了许多的滤波器。如均值滤波器、中值滤波器、维纳滤波器等。用户可以很方便的运用一些函数完成数字滤波工作。(见例5)。
  %例5:用滤波器祛除图象噪声(分别用均值滤波,中值滤波,及维纳滤波器祛除加入高斯噪声的图象)
  I=imread('C:\boat.png');
  J=imnoise(I,'gaussian',0,0.002); %加入高斯噪声
  %进行均值滤波
  h=fspecial('average',3);   %fspecial函数用于产生预定义滤波器
  I2=uint8(round(filter2(h,I)));  %filter2函数用于图像滤波,此处h是滤波参数(均值),I是要处理的图像
  %进行中值滤波
  I3=medfilt2(J,[3,3]);  %medfilt2函数用于图像的中值滤波
  %进行维纳滤波
  I4=wiener2(J,[3,3]);%进行一次维纳滤波
  I5=wiener2(I4,[3,3]);%进行二次维纳滤波
  subplot(2,3,1),imshow(I),title('原图象')
  subplot(2,3,2),imshow(J),title('加噪声图象')
  subplot(2,3,3),imshow(I2),title('均值滤波后图象')
  subplot(2,3,4),imshow(I3),title('中值滤波后图象')
  subplot(2,3,5),imshow(I4),title('维纳滤波后图象')
  subplot(2,3,6),imshow(I5),title('两次维纳滤波后图象')
  MATLAB实现数字图像锐化处理是小柯论文网通过网络搜集,并由本站工作人员整理后发布的,MATLAB实现数字图像锐化处理是篇质量较高的学术论文,供本站访问者学习和学术交流参考之用,不可用于其他商业目的,MATLAB实现数字图像锐化处理的论文版权归原作者所有,因网络整理,有些文章作者不详,敬请谅解,如需转摘,请注明出处小柯论文网,如果此论文无法满足您的论文要求,您可以申请本站帮您代写论文,以下是正文。
    [摘要] 讨论了数字图像增强技术中空域图像锐化的四种算法及其用MATLAB的实现;同时给出了利用四种算法进行图像锐化后的对照图像。
    [关键词] MATLAB 线性锐化 非线性锐化 sobel算子 prewitt算子 log 算子
    
    MATLAB全称是MatrixLaboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上也可以看出,它在矩阵运算上有自己独特的特点。实际运用中MATLAB中的绝大多数的运算都是通过矩阵这一形式进行的,这一特点决定了MATLAB在处理数字图像上的独特优势。理论上讲,图像是一种二维的连续函数,然而计算机对图像进行数字处理时,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。二维图像均匀采样,可得到一幅离散化成M×N样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的。而MATLAB的长处就是处理矩阵运算,因此用MATLAB处理数字图像非常的方便。MATLAB支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;支持BMP,GIF,HDF,JPEG,PCX,PNG, XWD,CUR,ICO等图像文件格式的读、写和显示。MATLAB对图像的处理功能主要集中在它的图像处理工具箱(Image Processing Toolbox)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作口 。
    数字图像处理中图像锐化的目的有两个:一是增强图像的边缘,使模糊的图像变得清晰起来;这种模糊不是由于错误操作,就是特殊图像获取方法的固有影响。二是提取目标物体的边界,对图像进行分割,便于目标区域的识别等。通过图像的锐化,使得图像的质量有所改变,产生更适合人观察和识别的图像。
    数字图像的锐化可分为线性锐化滤波和非线性锐化滤波。如果输出像素是输入像素领域像素的线性组合则称为线性滤波,否则称为非线性滤波。
     一、线性锐化滤波器
    线性高通滤波器是最常用的线性锐化滤波器。这种滤波器必须满足滤波器的中心系数为正数,其他系数为负数。线性高通滤波器3×3模板的典型系数
    如表1所示:
    用线性高通滤波实现图像锐化的程序和图像如下:
    i=imread('text.png'); %读入图像
    g=[-1 -1 -1; -1 8-1; -1-1-1];%线性高通滤波3×3模板
    h=double(i);%转化为double类型
    j=conv2(h,g,'same');% 线性高通滤波进行图像滤波
    subplot(1,2,1);
    imshow(h);title('原始图像');
    subplot(1,2,2);
    imshow(j);title('滤波后图像');
    二、非线性锐化滤波器
    非线性锐化滤波就是使用微分对图像进行处理,以此来锐化由于邻域平均导致的模糊图像。图像处理中最常用的微分是利用图y像沿某个方向上的灰度变化率,即原图像函数的梯度。梯度定义如下:
    (公式2.1)
    梯度模的表达式如下:
    (公式2.2)
    在数字图像处理中,数据是离散的,幅值是有限的,其发生的最短距离是在两相邻像素之间。因此在数字图像处理中通常采用一阶差分来定义微分算子。
    其差分形式为:
    △xf=f(x+1,y)-f(x,y)
    △yf=f(x,y+1)-f(x,y)
    比较有名的微分滤波器算子包括Sobel 梯度算子、Prewitt 梯度算子和log算子,等等。
    用Sobel 梯度算子、Prewitt 梯度算子和log算子实现图像锐化的程序和图像如下:
    I=imread('coins.png');%读入图像
    subplot(2,2,1),imshow(I);title('原图像');%显示原图像
    H=fspecial('sobel'); %应用sobel算子锐化图像
    I2=filter2(H,I); %sobel算子滤波锐化
    subplot(2,2,2);imshow(I2); %显示sobel算子锐化图像
    title('sobel算子锐化图像');
    H=fspecial('prewitt');%应用prewitt算子锐化图像
    I3=filter2(H,I);%prewitt算子滤波锐化
    subplot(2,2,3);imshow(I3); %显示prewitt算子锐化图像
    title('prewitt算子锐化图像');
    H=fspecial('log'); %应用log算子锐化图像
    I4=filter2(H,I); %log算子滤波锐化
    subplot(2,2,4);imshow(I4);%显示log算子锐化图像
    title('log算子锐化图像');
    三、结束语
    本文就MATLAB在数字图像锐化处理方面进行了阐述、讨论。实验结果表明应用MATLAB进行数字图像处理具有理想的效果和很高的工程价值。当然,MATLAB图像处理工具箱中所提供的图像处理功能远不止这些。
    可以说,MATLAB为数字图像处理提供了一种简单、快捷而又有效的方法,大大提高了数字图像处理的效率及效果并且应用到图像处理的各个方向。
  %设计低通滤波器:
  [N,Wc]=buttord()
  %估算得到Butterworth低通滤波器的最小阶数N和3dB截止频率Wc
  [a,b]=butter(N,Wc); %设计Butterworth低通滤波器
  [h,f]=freqz(); %求数字低通滤波器的频率响应
  figure(2); % 打开窗口2
  subplot(221); %图形显示分割窗口
  plot(f,abs(h)); %绘制Butterworth低通滤波器的幅频响应图
  title(巴氏低通滤波器'');
  grid; %绘制带网格的图像
  sf=filter(a,b,s); %叠加函数S经过低通滤波器以后的新函数
  subplot(222);
  plot(t,sf); %绘制叠加函数S经过低通滤波器以后的时域图形
  xlabel('时间 (seconds)');
  ylabel('时间按幅度');
  SF=fft(sf,256); %对叠加函数S经过低通滤波器以后的新函数进行256点的基―2快速傅立叶变换
  w= %新信号角频率
  subplot(223);
  plot()); %绘制叠加函数S经过低通滤波器以后的频谱图
  title('低通滤波后的频谱图');
  %设计高通滤波器
  [N,Wc]=buttord()
  %估算得到Butterworth高通滤波器的最小阶数N和3dB截止频率Wc
  [a,b]=butter(N,Wc,'high'); %设计Butterworth高通滤波器
  [h,f]=freqz(); %求数字高通滤波器的频率响应
  figure(3);
  subplot(221);
  plot()); %绘制Butterworth高通滤波器的幅频响应图
  title('巴氏高通滤波器');
  grid; %绘制带网格的图像
  sf=filter(); %叠加函数S经过高通滤波器以后的新函数
  subplot(222);
  plot(t,sf); ;%绘制叠加函数S经过高通滤波器以后的时域图形
  xlabel('Time(seconds)');
  ylabel('Time waveform');
  w; %新信号角频率
  subplot(223);
  plot()); %绘制叠加函数S经过高通滤波器以后的频谱图
  title('高通滤波后的频谱图');
  %设计带通滤波器
  [N,Wc]=buttord([)
  %估算得到Butterworth带通滤波器的最小阶数N和3dB截止频率Wc
  [a,b]=butter(N,Wc); %设计Butterworth带通滤波器
  [h,f]=freqz(); %求数字带通滤波器的频率响应
  figure(4);
  subplot(221);
  plot(f,abs(h)); %绘制Butterworth带通滤波器的幅频响应图
  title('butter bandpass filter');
  grid; %绘制带网格的图像
  sf=filter(a,b,s); %叠加函数S经过带通滤波器以后的新函数
  subplot(222);
  plot(t,sf); %绘制叠加函数S经过带通滤波器以后的时域图形
  xlabel('Time(seconds)');
  ylabel('Time waveform');
  SF=fft(); %对叠加函数S经过带通滤波器以后的新函数进行256点的基―2快速傅立叶变换
  w=( %新信号角频率
  subplot(223);
  plot(')); %绘制叠加函数S经过带通滤波器以后的频谱图
  title('带通滤波后的频谱图');
  写四个程序 时域上的低通与高通 频域上的低通与高通滤波器程序
  参考答案:%设计低通滤波器:
  [N,Wc]=buttord()
  %估算得到Butterworth低通滤波器的最小阶数N和3dB截止频率Wc
  [a,b]=butter(N,Wc); %设计Butterworth低通滤波器
  [h,f]=freqz(); %求数字低通滤波器的频率响应
  figure(2); % 打开窗口2
  subplot(221); %图形显示分割窗口
  plot(f,abs(h)); %绘制Butterworth低通滤波器的幅频响应图
  title(巴氏低通滤波器'');
  grid; %绘制带网格的图像
  sf=filter(a,b,s); %叠加函数S经过低通滤波器以后的新函数
  subplot(222);
  plot(t,sf); %绘制叠加函数S经过低通滤波器以后的时域图形
  xlabel('时间 (seconds)');
  ylabel('时间按幅度');
  SF=fft(sf,256); %对叠加函数S经过低通滤波器以后的新函数进行256点的基―2快速傅立叶变换
  w= %新信号角频率
  subplot(223);
  plot()); %绘制叠加函数S经过低通滤波器以后的频谱图
  title('低通滤波后的频谱图');
  %设计高通滤波器
  [N,Wc]=buttord()
  %估算得到Butterworth高通滤波器的最小阶数N和3dB截止频率Wc
  [a,b]=butter(N,Wc,'high'); %设计Butterworth高通滤波器
  [h,f]=freqz(); %求数字高通滤波器的频率响应
  figure(3);
  subplot(221);
  plot()); %绘制Butterworth高通滤波器的幅频响应图
  title('巴氏高通滤波器');
  grid; %绘制带网格的图像
  sf=filter(); %叠加函数S经过高通滤波器以后的新函数
  subplot(222);
  plot(t,sf); ;%绘制叠加函数S经过高通滤波器以后的时域图形
  xlabel('Time(seconds)');
  ylabel('Time waveform');
  w; %新信号角频率
  subplot(223);
  plot()); %绘制叠加函数S经过高通滤波器以后的频谱图
  title('高通滤波后的频谱图');
  %设计带通滤波器
  [N,Wc]=buttord([)
  %估算得到Butterworth带通滤波器的最小阶数N和3dB截止频率Wc
  [a,b]=butter(N,Wc); %设计Butterworth带通滤波器
  [h,f]=freqz(); %求数字带通滤波器的频率响应
  figure(4);
  subplot(221);
  plot(f,abs(h)); %绘制Butterworth带通滤波器的幅频响应图
  title('butter bandpass filter');
  grid; %绘制带网格的图像
  sf=filter(a,b,s); %叠加函数S经过带通滤波器以后的新函数
  subplot(222);
  plot(t,sf); %绘制叠加函数S经过带通滤波器以后的时域图形
  xlabel('Time(seconds)');
  ylabel('Time waveform');
  SF=fft(); %对叠加函数S经过带通滤波器以后的新函数进行256点的基―2快速傅立叶变换
  w=( %新信号角频率
  subplot(223);
  plot(')); %绘制叠加函数S经过带通滤波器以后的频谱图
  title('带通滤波后的频谱图');给你些资料,希望对你有帮助~~~ 模拟原型法 采用经典低通滤波器作为连续域上的设计模型,通过频域变换得到IIR数字滤波器,最后还要进行离散化处理。Matlab提供的低通模拟滤波器原型函数包括:besselap,buttap,cheb1lp,cheb2ap,ellipap;频域变换函数包括:lp2bp,lp2bs,lp2hp,lp2lp;离散化处理函数有bilinear和impinvar。 完全设计法 Matlab信号处理工具箱提供了几个直接设计IIR数字滤波器的函数,直接调用就可以设计滤波器,这为设计通用滤波器提供了方便。 设计Butterworth滤波器用函数butter(),可以设计低通、高通、带通和带阻的数字和模拟滤波器,其特性是通带内的幅度响应最大限度的平滑,但损失了截止频率处的下降斜度。 设计Chebyshev I型滤波器用函数chebyl()。可以设计低通、高通、带通和带阻的数字和模拟ChebyshevI型滤披器,其通带内为等波纹,阻带内为单调。Chebyshev I型滤波器的下降斜度比II型大,但其代价是通带内波纹较大。 设计Chebyshev II型滤波器用函数cheby2()。可以设计低通、高通、带通和带阻的数字和模拟Chebyshev II型滤波器,其通带内为单调,阻带内等波纹。Chebyshev II型滤波器的下降斜度比I型小,但其阻带内波纹较大。 设计椭圆滤波器用函数ellip(),与cheby1,cheby2类似,可以设计低通、高通、带通和带阻的数字和模拟滤波器。与Butterworth和chebyshev滤波器相比,ellip函数可以得到下降斜度更大的滤波器,得到通带和阻带均为等波纹。一般情况下,椭圆滤波器能以最低的阶实现指定的性能指标。 直接设计法 直接设计方法的思想是基于给定的滤波器参数直接在离散域上寻找合适的数字滤波器,他不限于常规的滤波器类型,如低通、高通、带通和带阻等。这种方法甚至可以设计多带的频率响应,Matlab提供yulewalk函数用于辅助设计。 通用Butterworth设计方法 使用这种方法设计的Butterworth数字滤波器可以有不同数目的零点和极点,Matlab提供的maxflat函数实现了这一功能。这个函数与butter函数很相似,但他可以指定两个阶参数,其中归一化和非归一化各一个。如果这两个参数的值相同,那么他与butter函数的结果就是相同的。 参数建模法 寻找接近于所需要设计的滤波器的通用模型,时域上的建模函数为lpc,prony,Stmcb;频域上的建模函数有invfreqs和invfreqz
  MATLAB实现巴特沃斯低通滤波(2008-05-20 21:39:40)
  标签:低通滤波 matlab for 频域 巴特沃斯 
  分类:MATLAB程序
  %频域滤波
  clear
  clc
  I0 = imread('fig2-3.bmp');
  figure(1);imshow(I0);title('原图');
  J0 = fft2(I0);    %FFT
  J0 = fftshift(J0);  %FFT移动
  [m,n]=size(I0);
  dd=zeros(m,n);
  for a=1:m
  for b=1:n
  dd(a,b)=sqrt((a-m/2)^2+(b-n/2)^2);
  end
  end
  HUV=zeros(m,n);
  d0=input('请输入半径:');
  HUV=1./(1+power(dd/d0,2));
  K=J0.*HUV;
  K=uint8(abs(ifft2(K)));
  figure(2);imshow(K);title('巴特沃斯低通滤波');
  pack
  clc
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics