zoukankan      html  css  js  c++  java
  • 频域滤波之巴特沃斯高通滤波

    首先附上MATLAB代码:

    % 读入RGB图像并将其转换成灰度图像
    I=imread('pic12.jpg');
    I=rgb2gray(I);
    subplot(1,2,1);
    imshow(I)
    title('原始图像')
    % 数据类型转换,MATLAB不支持无符号数学的计算
    f=double(I); 
     % 傅里叶变换
    k=fft2(f);      
    g=fftshift(k);  
    [M,N]=size(g);
    % 二阶巴特沃思高通滤波器,截止频率为25
    nn=2;           
    d0=25;
    m=fix(M/2);
    n=fix(N/2);
     
    % 计算传递函数
    for i=1:M
        for j=1:N
            d=sqrt((i-m)^2+(j-n)^2);
            if(d==0)
                h=0;
            else
                h=1/(1+0.414*(d0/d)^(2*nn));  
            end
            result(i,j)=h*g(i,j);
        end
    end
     
    result=ifftshift(result);
    J2=ifft2(result);
    J3=uint8(real(J2));
    subplot(1,2,2);
    imshow(J3); 
    title('滤波之后的结果')

    另外一种指数高通滤波器相关程序如下:

    % 读入图像,并将其转换成灰度图像
    I=imread('pic13.jpg');
    I=rgb2gray(I); 
    subplot(1,2,1);
    imshow(I),title('原始图像');
    % 数据类型转换,MATLAB不支持无符号整型的数学计算
    f=double(I);
    % 进行傅里叶变换
    k=fft2(f);      
    g=fftshift(k);  
    [N1,N2]=size(g);
    % 构造一阶截止频率为5的指数高通滤波器
    n=1;             
    d0=5;           
    u0=round(N1/2);
    v0=round(N2/2);
    for i=1:N1
        for j=1:N2
            d=sqrt((i-u0)^2+(j-v0)^2);
            h=exp(-(d0/d)^n);
            y(i,j)=h*g(i,j);
        end
    end
        % 进行傅里叶逆变换
    y=ifftshift(y);
    E1=ifft2(y);
    % 显示处理结果
    E2=uint8(real(E1));
    subplot(1,2,2);
    imshow(E2),title('滤波后的结果');
  • 相关阅读:
    在中文版VS2008中安装MVC
    【原创】最优惠的企业邮局
    【推荐】双模虚拟主机 WINDOWS经济型或 UNIX经济型
    CSS基础
    第一篇文章
    一道面试题
    IIS做web server有些中文名文件不能下载
    偶遇指间流沙
    迷失的女孩
    身边的小故事二则
  • 原文地址:https://www.cnblogs.com/natalie/p/4469496.html
Copyright © 2011-2022 走看看