• 图像处理之理想高通滤波器、巴特沃斯高通滤波器和高斯高通滤波器的matlab简单实现


    一、前言

    高通滤波器的功能是让高频率通过而滤掉或衰减低频,其作用是使图像得到锐化处理,突出图像的边界。经理想高频滤波后的图像把信息丰富的低频去掉了,丢失了许多必要的信息**。一般情况下,高通滤波对噪声没有任何抑制作用**,若简单的使用高通滤波,图像质量可能由于噪声严重而难以达到满意的改善效果。为了既加强图像的细节又抑制噪声,可采用高频加强滤波。这种滤波器实际上是由一个高通滤波器和一个全通滤波器构成的,这样便能在高通滤波的基础上保留低频信息。

    高通滤波可以分为理想高通滤波器、巴特沃斯高通滤波器和高斯高通滤波器。对于大小为M*N的图像,频率点(u,v)与频域中心的距离为D(u,v),其表达式为:
    在这里插入图片描述
    二、理想高通滤波器(IHPF)

    1、基本定义

    理想高通滤波器的产生公式为:
    在这里插入图片描述
    其中D0为理想高通滤波器的截止频率,注意与理想高通滤波器的表达式区别在于将0和1交换而条件不变

    2、matlab实现理想高通滤波器

    (1)实现代码:

    close all;
    clear all;
    clc;
    I = imread('coins.png');
    
    subplot(121),imshow(I);
    title('原始图像');
    
    % 函数fft2()用于计算二维傅立叶变换
    % 函数fftshift()是对函数fft2()作傅里叶变换后得到的频谱进行平移,将变换后的图像频谱中心从矩阵的原点移到矩阵的中心
    % 作二维傅里叶变换前一定要用函数im2double()把原始图像的数据类型由uint8转化为double类型
    % 否则会因为unit8数据类型只能表示0-255的整数而出现数据截断,进而出现错误结果
    s=fftshift(fft2(im2double(I)));
    [a,b]=size(s);
    a0=round(a/2);
    b0=round(b/2);
    d0=50; % 将理想高通滤波器的截止频率D0设置为50
    for i=1:a %双重for循环计算频率点(i,j)与频域中心的距离D(i,j)=sqrt((i-round(a/2)^2+(j-round(b/2)^2))
        for j=1:b 
            distance=sqrt((i-a0)^2+(j-b0)^2);
            if distance<=d0  % 根据理想高通滤波器产生公式,D(i,j)<=D0,置为0
                h=0;
            else
                h=1;        % 根据理想高通滤波器产生公式,D(i,j)>D0,置为1
            end
            s(i,j)=h*s(i,j);% 频域图像乘以滤波器的系数
        end
    end
    % real函数取元素的实部
    s=real(ifft2(ifftshift(s)));% 最后进行二维傅里叶反变换转换为时域图像
    subplot(122),imshow(s,[]);
    title('理想高通滤波所得图像');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    (2)实现效果:
    在这里插入图片描述
    三、巴特沃斯高通滤波器(BHPF)

    1、基本定义

    巴特沃斯高通滤波器的产生公式为:
    在这里插入图片描述
    其中D0为巴特沃斯高通滤波器的截止频率,注意与巴特沃斯低通滤波器的表达式区别在于将分母的D0和D(u,v)交换位置

    2、matlab实现巴特沃斯高通滤波器

    (1)实现代码:

    close all;
    clear all;
    clc;
    I = imread('coins.png');
    
    subplot(121),imshow(I);
    title('原始图像');
    
    % 函数fft2()用于计算二维傅立叶变换
    % 函数fftshift()是对函数fft2()作傅里叶变换后得到的频谱进行平移,将变换后的图像频谱中心从矩阵的原点移到矩阵的中心
    % 作二维傅里叶变换前一定要用函数im2double()把原始图像的数据类型由uint8转化为double类型
    % 否则会因为unit8数据类型只能表示0-255的整数而出现数据截断,进而出现错误结果
    s=fftshift(fft2(im2double(I)));
    [N1,N2]=size(s);%求二维傅里叶变换后图像大小
    n=2;            % 将巴特沃斯高通滤波器的阶数n设置为2
    d0=30;          % 将巴特沃斯高通滤波器的截止频率D0设置为30
    n1=round(N1/2);
    n2=round(N2/2);
    for i=1:N1      %双重for循环计算频率点(i,j)与频域中心的距离D(i,j)=sqrt((i-round(N1/2)^2+(j-round(N2/2)^2))
        for j=1:N2 
            distance=sqrt((i-n1)^2+(j-n2)^2);
            if distance==0 
                h=0; 
            else
                h=1/(1+(d0/distance)^(2*n));% 根据巴特沃斯高通滤波器公式为1/(1+[D0/D(i,j)]^2n)
            end
            s(i,j)=h*s(i,j);% 频域图像乘以滤波器的系数
        end
    end
    % real函数取元素的实部
    s=real(ifft2(ifftshift(s)));% 最后进行二维傅里叶反变换转换为时域图像
    subplot(122),imshow(s,[]);
    title('Butterworth高通滤波图像');
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    (2)实现效果:
    在这里插入图片描述
    四、高斯高通滤波器(GHPF)

    1、基本定义

    高斯高通滤波器的产生公式为:
    在这里插入图片描述

    其中D0为高斯高通滤波器的截止频率,注意与高斯低通滤波器的表达式区别在于使用1减去表达式

    2、matlab实现高斯高通滤波器

    (1)实现代码:

    close all;
    clear all;
    clc;
    I = imread('coins.png');
    
    subplot(121),imshow(I);
    title('原始图像');
    
    % 函数fft2()用于计算二维傅立叶变换
    % 函数fftshift()是对函数fft2()作傅里叶变换后得到的频谱进行平移,将变换后的图像频谱中心从矩阵的原点移到矩阵的中心
    % 作二维傅里叶变换前一定要用函数im2double()把原始图像的数据类型由uint8转化为double类型
    % 否则会因为unit8数据类型只能表示0-255的整数而出现数据截断,进而出现错误结果
    s=fftshift(fft2(im2double(I)));
    [a,b]=size(s);
    d0=10; % 将高斯高通滤波器的截止频率D0设置为10
    a0=round(a/2);
    b0=round(b/2);
    for i=1:a
        for j=1:b
            distance=sqrt((i-a0)^2+(j-b0)^2);    % 根据高斯高通滤波器公式H(u,v)=e^-[D^2(u,v)/2*D0^2] 
            h=1-(exp(-(distance^2)/(2*(d0^2)))); % exp表示以e为底的指数函数
            s(i,j)=h*s(i,j);% 频域图像乘以滤波器的系数
        end
    end
    
    s=real(ifft2(ifftshift(s)));% 最后进行二维傅里叶反变换转换为时域图像
    subplot(122),imshow(s,[]); 
    title('高斯高通滤波图像');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    (2)实现效果:
    在这里插入图片描述

    由于刚刚开始学习图像处理,对于很多知识理解不到位。如有错误,恳请指正,任重而道远,慢慢加油!

  • 相关阅读:
    HBase 基础结构
    java基础4
    uni-app 之 获取网络列表数据
    大数据之Hive(二)
    海尔智家:“超预期”成为“新常态”
    Uni-App 快捷登录
    如何应对红帽不再维护 CentOS
    reStructuredText 初学者语法汇总
    [附源码]java毕业设计校园新闻管理系统
    每日一题 1993. 树上的操作
  • 原文地址:https://blog.csdn.net/qq_44111805/article/details/126314710