zoukankan      html  css  js  c++  java
  • Matlab实现Butterworth滤波器 分类: 图像处理 2014-06-02 00:05 527人阅读 评论(0) 收藏

    下面是用Matlab实现的Butterworth高通、低通滤波器。
    
    
    clc;clear all;close all;
    I=imread('cameraman.tif');
    subplot(3,2,1);imshow(I);
    title('原始图');
    f=double(I);     % 数据类型转换,MATLAB不支持图像的无符号整型的计算
    g=fft2(f);        % 傅立叶变换
    g=fftshift(g);     % 转换数据矩阵
    subplot(3,2,2);imshow(log(1+abs(g)),[]);
    title('傅里叶频谱');
     
    %低通滤波***************************************************************
    [M,N]=size(g);
    nn=2;           % 二阶巴特沃斯(Butterworth)低通滤波器
    d0=10;
    m=floor(M/2); n=floor(N/2);
    for i=1:M
           for j=1:N
               d=sqrt((i-m)^2+(j-n)^2);
               h=1/(1+0.414*(d/d0)^(2*nn));  % 计算低通滤波器传递函数
               result(i,j)=h*g(i,j);
           end
    end
     
    subplot(3,2,3);imshow(log(1+abs(result)),[]);
    title('butterworth低通滤波');
    result=ifftshift(result);
    J2=ifft2(result);
    J3=uint8(real(J2));
    subplot(3,2,4),imshow(J3);                      % 显示滤波处理后的图像
    title('低通滤波图');
     
    %高通滤波 
     
    for i=1:M
           for j=1:N
            d=sqrt((i-m)^2+(j-n)^2);
            h=1/(1+0.414*(d0/d)^(2*nn));% 计算传递函数
            result(i,j)=h*g(i,j);
           end
    end
    subplot(3,2,5);imshow(log(1+abs(result)),[]);
    title('butterworth高通滤波');
    result=ifftshift(result);
    J2=ifft2(result);
    J3=uint8(real(J2));
    subplot(3,2,6),imshow(J3);                      % 显示滤波处理后的图像
    title('高通滤波图');
    
    

    效果图:


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    AngularJS--学习笔记(一)
    一行代码写出随机数
    2015最新--浏览器分布图
    JQ系列:css操作
    Eclipse启动Tomcat,45S超时问题解决
    深入理解浏览器兼容性模式
    常见浏览器兼容性问题与解决方案
    面向对象设计模式之一观察者模式
    自定义样式RatingBar的使用
    Python之Matplot——01.堆叠柱状图的绘制
  • 原文地址:https://www.cnblogs.com/luo-peng/p/4646262.html
Copyright © 2011-2022 走看看