MATLAB实现图像巴特沃斯滤波、高频增强滤波及直方图均衡化

2023-05-16

1、巴特沃斯滤波器

1.1 基本概念

在图像处理中,巴特沃斯滤波器传递函数如下:
巴特沃斯低通滤波器公式:
巴特沃斯低通滤波器
巴特沃斯高通滤波器公式:
巴特沃斯高通滤波器
在公式中,D(u,v)代表频域当中,点(u,v)到中心点的距离,我们知道二维图像的傅里叶变换的频域幅值图大概是长这样的:
二维傅里叶变换
所以中心点也就是(M/2,N/2),M和N代表图像的长和宽,那么D(u,v)就可以用下面的式子来表示了:
表达式
而D0就是截止距离了,就相当于在频域当中画一个圈,对圈内或者圈外保留就可以达到所谓的低通和高通了,这个D0就相当于一维当中的截止频率。

1.2 MATLAB实现

有了上面的概念理解,程序实现起来也不难了。基本的思路就是先对图像进行二维傅里叶变换,之后根据公式设计巴特沃斯滤波器的传递函数,在频域对图像进行处理,最后再傅里叶反变换回来就结束了。具体代码如下:

clear all;
clc;

%% 读取原图像
Original_image=imread('Origin.tif');
[len,wid]=size(Original_image);
Original_image=im2double(Original_image);
g=fft2(Original_image); %二维傅立叶变换
g=fftshift(g);  %频移

%% 设计巴特沃斯滤波器
n1=2;   %巴特沃斯滤波器阶数为2
D0=0.05*len;  %截止频率5%的图像宽度
[M,N]=size(g);
m=fix(M/2);
n=fix(N/2);
for i=1:M
   for j=1:N
        D=sqrt((i-m)^2+(j-n)^2);
        h1=1/(1+(D0/D)^(2*n1));   %计算高通滤波器传递函数
        h2=0.5+2*h1;    %设计high-frequency emphasis其中a=0.5,b=2.0
        s1(i,j)=h1*g(i,j);  %用设计的滤波器处理原图像
   end
end


%% 傅里叶反变换后
filter_image1=im2uint8(real(ifft2(ifftshift(s1))));  %傅里叶反变换

%% 变换前后图像显示
subplot(1211),imshow(Original_image),title('(a) A chest X-ray image');
subplot(122),imshow(filter_image1),title('(b) Result of Butterworth highpass filtering');

1.3 处理结果

由于截止频率比较高,所以背景比较黑,边界也看不清楚
巴特沃斯处理结果

2、高频增强滤波器(High-Frequency Emphasis Filtering)

2.1 基本概念

高频增强滤波器的传递函数如下:
在这里插入图片描述
其中a>=0,b>a,Hhp(u,v)表示高通滤波器,这个滤波器在保留高频分量的同时,也加入了背景的低频成分。

2.2 Matlab实现

这个也比较简单,只要在上面的

       h1=1/(1+(D0/D)^(2*n1));   %计算高通滤波器传递函数

这句代码的后面添加一句就行了:

h2=0.5+2*h1;    %设计high-frequency emphasis其中a=0.5,b=2.0
s2(i,j)=h2*g(i,j);  %用设计的high-frequency emphasis滤波器处理原图像

之后同样是反变换一下得到变换后的图像:

filter_image2=im2uint8(real(ifft2(ifftshift(s2))));  %傅里叶反变换
subplot(121),imshow(Original_image),title('(a) A chest X-ray image');
subplot(122),imshow(filter_image2),title('(b) Result of high-frequency emphasis filtering');

2.3 处理结果

可以看到这张的边界更加清晰一些了
高频增强

3、直方图均衡化

3.1 基本概念

直方图均值通俗来说就是把一幅图像的灰度值集合,通过一定的映射关系,映射到另一个灰度值集合中,其目的就是为了使各个灰度级点数比较均衡同时达到增强对比度的效果,具体怎么做我也不介绍了,网上的资料也比较多。这里贴一篇——直方图均衡化

3.2 MATLAB实现

直方图均衡化MATLAB中其实是有封装好的函数的即histeq()函数:
在这里插入图片描述
另外还有一个显示图像直方图分布的函数——imhist()函数
但是在这里为了看一下直方图均衡化到底是怎么实现的,我还是自己码一下,这样可以了解一下实现过程,更熟悉掌握。

3.2.1 直方图均值化——自己编写代码

直接按照均衡化的思路来码代码,基本是以下几个步骤:
1.统计各像素点的灰度值
2.各灰度级的概率计算
3.累积概率分布函数计算
4.灰度级映射
直接看代码,我们这个是在第2部分高通增强基础filter_image2上进行的:

%% 直方图均衡化
%进行像素灰度统计;  
s = zeros(1,256);%统计各灰度数目,共256个灰度级  
for i = 1:len  
    for j = 1: wid
        s(filter_image2(i,j) + 1) = s( filter_image2(i,j) + 1) + 1;%对应灰度值像素点数量增加一  
    end  
end  
%计算灰度分布密度  
p = zeros(1,256);  
for i = 1:256  
    p(i) = s(i) / (len * wid * 1.0);  
end  
%计算累计直方图分布  
c = zeros(1,256);  
c(1) = p(1);
for i = 2:256   
        c(i) = c(i - 1) + p(i);  
end  
%累计分布取整,将其数值归一化为1~256 
c = uint8(255 .* c + 0.5);  
%对图像进行均衡化
for i = 1:len 
    for j = 1: wid
        hist_image(i,j) = c(filter_image2(i,j)+1);  
    end  
end  

3.2.2 直方图均衡化——MATLAB自带函数

这就更简单了,如下:

mat_hist_image=histeq(filter_image2,256);

3.3 处理结果

最后我们来看看自己码的直方图均衡化代码和MATLAB自带的函数处理的结果:
在这里插入图片描述
图©和图(d)分别表示两种处理的结果,看到效果基本是一样的,与图(b)比较,可以发现背景变得更加清晰了,我们的目的也达到了。

#声明

本文章的公式以及图片来源于冈萨雷斯的《数字图像处理 第2版》Example 4.9

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB实现图像巴特沃斯滤波、高频增强滤波及直方图均衡化 的相关文章

  • 树莓派 - PX4 安装教程

    留坑 xff0c 近期群上有小伙伴想要入坑 树莓派PX4 xff0c 所以想写一个基础安装教程 xff0c 如果有不合理请指出 250渣渣架子 xff0c 后期换成Q380了 准备清单 1 xff0c 树莓派Pi3 xff08 推荐这个 x
  • STM32 Systick定时器在实现1us延时时的问题与解决

    问题 xff1a 使用systick config 函数来实现计数 xff0c 这个函数在下面代码中的 SysTick CTRL TICKINT Msk 开启了中断 不论系统时钟为72Mhz或36Mhz若设置STM32每10us进入一次中断
  • VINS-MONO运行(运行VINS-Mono没有轨迹的原因)

    VINS MONO下载及编译 与github中 https github com HKUST Aerial Robotics VINS Mono的一致 下载VINS MONO文件 cd catkin ws src git clone htt
  • gitkraken汉化

    想要汉化gitkraken xff0c 上链接 xff0c 下载解压 链接 xff1a https pan baidu com s 136cQzS7 SsIazhyF1IojsQ 提取码 xff1a 0lzb 01 双击运行install
  • 使用Ubuntu系统运行C或C++程序

    查找Ubuntu系统是否有gcc软件 xff0c 输入指令which gcc 查看gcc的版本 xff0c 输入gcc version 然后就可以确定系统自带gcc编译器了 gcc用来编译C xff0c g 43 43 用来编译C 43 4
  • Ubuntu删除文件和文件夹命令

    r表示向下递归删除 f表示直接强制删除 xff0c 没有任何提示 对于文件夹的删除一般用rm rf xff08 文件夹删除必须有r xff0c 递归删除 xff09 对于文件的删除一般用rm f xff08 其实rm本身就可以完成文件删除
  • slam十四讲中Sophus库安装以及遇到so3.h找不到文件的解决

    首先安装Sophus库 xff0c 首先说明一下 xff0c 我安装的是非模板类 xff0c 非模板类相对模板类更好上手 xff0c 且我下载的slam作者提供的sophus库压缩包也是非模板类 一 下载 git clone https g
  • 解决resource not found问题

    在运行ros中的xacro文件时出现的如下问题 resource not found mbot description ROS path 0 61 opt ros melodic share ros ROS path 1 61 opt ro
  • CV::mat 学习

    原文 xff1a http blog sina com cn s blog ac1864bd010188cm html opencv从c到c 43 43 Opencv2 0版本发布后 xff0c 其新的C 43 43 接口 xff0c cv
  • pcl::pointcloud和pcl::pointcloud::Ptr区别

    后者是指针类型的点云类 定义点云的格式 xff1a pcl PointCloudpcl PointXYZ Ptr cloud Ptr new pcl PointCloudpcl PointXYZ pcl PointCloudpcl Poin
  • ROS安装 rosdep update报错解决

    https blog csdn net leida wt article details 115120940 跟这个做 xff0c 注意正文中对第五个地址的补充gbpdistro url 61 https ghproxy com 43 gb
  • Jetson Xavier 通过jetson-io配置设备树 (9)

    1 在终端输入扩展40Pin配置脚本 sudo opt nvidia jetson io jetson io py 2 选择进入Configure 40 pin expansion header 3 空格选中spi1 或者其他需要的扩展功能
  • UCOSIII系统学习笔记

    说明 xff1a 本文主要讲针对STM32的UCOSIII3 03版本的文件与内核分析 此文只是对UCOSIII粗略的讲解 xff0c 希望读者在读完后能对UCOSIII系统整体多些认识 xff0c 细节方面还请读者参考相关书籍 xff0c
  • 汽车CAN总线详解

    概述 CAN xff08 Controller Area Network xff09 总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线 xff0c 它起初用于实现汽车内ECU之间可靠的通信 xff0c 后因其简单实用可靠等
  • microchip pm42100-kit调试记录

    1 先给板子上电 xff0c 2 安装chiplink 新安装的是连接不上串口的 通过Help gt 帮助目录 xff0c 安装 nbm文件 加载 nbm文件 Tools gt Plugins gt Downloaded gt Add Pl
  • nvidia orin简介

    NVIDIA发布的Xavier已经在市场上打拼了好几年了 xff0c 同行竞争者一直在追赶 力图超越 xff0c Xavier也在应用中出现了一些问题 xff0c NVIDIA也该把Orin这个新武器揭开面纱了 虽然去年的GTC上有一些信息
  • PCI-E 1x, 4x, 8x, 16x 接口定义

    1 PCI E插槽及金手指实物图 xff08 1 xff09 PCI E插槽 从上至下依次为PCI E 4X PCI E 16X PCI E 1X xff08 2 xff09 PCI E金手指 PCI E 1X金手指 PCI E 4X金手指
  • Jetson Xavier RC EP 的PCIe互通测试(12)

    一 硬件连接 xff1a 交叉线 X16引脚定义 xff1a 从此面看 xff1a 从上到下 xff0c 依次为A1 A2 A3 从背面看 xff1a 从上到下 xff0c 依次为B1 B2 B3 注意断开 xff1a A2 A3 B1 B
  • 将自己的ubuntu20.04做成镜像

    系统 xff1a Ubuntu20 04 软件 xff1a systemback 硬件 xff1a 128GU盘一个 1 安装systemback sudo sh c 39 echo 34 deb arch 61 amd64 http mi
  • Orin + SC16IS752+SP3072 SPI转串口485

    文章目录 1 前言 2 修改过程 2 1 sc16is752 芯片 2 1 1引脚说明 2 1 2 设备树配置 2 2 1 源码分析 3 调试 1 前言 Orin 有四路串口 对于多数设备来说已经够用 通过SPI 转串口再转RS485在Or

随机推荐

  • MIPI CSI介绍

    文章目录 1 概述2 MIPI接口的演变2 1 CSI 12 2 CSI 22 3 CSI 32 4 更多关于CSI 3 其他3 1 为什么用MIPI CSI 2代替USB 3 2 MIPI CSI 2的性能亮点3 3 MIPI相机 它是如
  • 车载摄像头概述

    1 车载摄像头概述 SerDes环境 上边的摄像头是德国豪车配备的车载摄像头 我们是从国外网站上买的 为了选择车载摄像头 xff0c 你需要获得关于它的各种信息 首先 xff0c 您需要获取连接器和序列化器制造商名称的信息 xff0c 然后
  • ARM7的三级流水线过程

    看到汇编中很多关于程序返回与中断返回时处理地址都很特别 xff0c 仔细想想原来是流水线作用的效果 所以 xff0c 决定总结学习下ARM流水线 ARM7处理器采用3级流水线来增加处理器指令流的速度 xff0c 能提供0 9MIPS MHz
  • nor flash和nand flash的区别

    NOR 和 NAND 是现在市场上两种主要的非易失闪存技术 Intel 于 1988 年首先开发出 NOR flash 技术 xff0c 彻底改变了原先由 EPROM 和 EEPROM 一统天下的局面 紧接着 xff0c 1989 年 xf
  • UART通信协议

    UART 是用于控制计算机与串行设备的芯片 有一点要注意的是 xff0c 它提供了RS 232C 数据终端设备接口 xff0c 这样计算机就可以和调制解调器或其它使用RS 232C接口的串行设备通信了 作为接口的一部分 xff0c UART
  • stm32f103的IAP升级时,部分APP程序功能丢失,串口中断不起作用,怎么办?

    昨天我用stm32f103做IAP升级 xff0c APP程序是一个LED闪烁和一个串口1收发数据 结果IAP升级后 xff0c 发现APP程序只有LED闪烁但是串口1不行甚至引起死机 这种半死不活的现象是最莫名其妙的 xff0c 它一半在
  • 计算机的启动过程(详细)

    零 boot的含义 先问一个问题 xff0c 启动 用英语怎么说 xff1f 回答是boot 可是 xff0c boot原来的意思是靴子 xff0c 启动 与靴子有什么关系呢 xff1f 原来 xff0c 这里的boot是bootstrap
  • 史上最全Linux面试题(2020最新版)

    出处 xff1a https blog csdn net thinkwon article details 104588679 作者 xff1a ThinkWon 导读 xff1a 本文整理了最新的Linux面试题 xff0c 近3万字 x
  • Endnote中文参考文献格式下载地址(官网)

    Endnote中文参考文献格式官网下载地址 1 下载2 安装 1 下载 今天在写中文论文时 xff0c 发现Endnote里没有中文参考文献格式 上网找了一下有些下载尽然还要币 xff0c 最后看到其实官网里就有GBT7114格式 xff1
  • C++中String类对象的初始化和基本用法

    1 初始化的几种方法和错误案例 首先当然是包含头文件了 xff1a span class token macro property span class token directive keyword include span span c
  • C++中multimap和map容器及使用

    map multimap容器里存放的都是pair模板类的对象 xff0c 而且按照first成员从小到大排序 1 pair模板 pair模板类的定义如下 xff0c 其中有两个成员变量 xff1a first和second xff1a 2
  • Word标题前出现黑块解决办法

    最近Word写文章 xff0c 再次遇到了让人头疼的问题 xff0c 就是自己定义的多级列表 xff0c 某一级前面不显示数字而是一个黑块 之前就遇到过这个问题 xff0c 不知怎么就解决了 再次遇到就懵了 尝试了网上的几种方法 xff0c
  • 从印象笔记无法连接到服务器,到win 10 Eage浏览器无法访问

    昨天电脑上的印象笔记突然无法同步 xff0c 同步的图标上显示了红色的感叹号 按照网上很多的解决方法试了之后都无法解决 印象笔记也重新安装了 xff0c 也退出企图重新登录 xff0c 结果登录界面显示无法连接到服务器 按照官网给出的解决方
  • Crazyflie笔记一:概述开发范围、工具、特点介绍

    原文地址 xff1a http blog sina com cn s blog 402c071e0102v6ho html Crazyflie笔记一 xff1a 概述开发范围 工具 特点介绍 2015 01 04 12 48 31 转载 标
  • Ubuntu16.04如何设置自动休眠时间

    可能有的人觉得 xff0c 虚拟机几分钟没动就自己锁住了 xff0c 再次进入又要输密码非常麻烦 xff0c 那如何设置屏幕关闭时间呢 xff1f 下面就说一说 xff1a 1 打开设置选项 xff0c 在电脑的右上方 2 点击system
  • PX4使用I2C方式添加自定义传感器(1)

    PX4使用I2C方式添加自定义传感器 xff08 1 xff09 前言 毕业设计就是要在PX4上添加一个传感器 xff08 角度传感器 xff09 xff0c 由于板子上的接口数量很少 xff0c 很是宝贵 最后只能选择通过I2C通信方式
  • PX4通过I2C方式添加自定义传感器(2)

    PX4 I2C通信方式传感器驱动分析 xff08 以ets airspeed为例 xff09 1 说明 这篇文章我们就来看看I2C传感器的驱动过程 xff0c 当然里面也有很多东西我不是很理解 xff0c 所以仅谈我领悟的一些东西 我就以e
  • PX4通过I2C方式添加自定义传感器(3)

    添加自定义传感器并实现数据的发送和订阅 1 前期准备 1 1 建立文件夹和相关文件配置 我是在src drivers distance sensor文件夹下操作的 xff0c 当然其他文件夹下都类似 首先建立了两个文件夹angle sour
  • Matlab 同一文件夹下图片批量处理的两种简单方法

    Matlab 同一文件夹下图片批量处理的两种简单方法 最近因为实验中有许多图片需要处理 xff0c 本来的做法是一张张读取图片 xff0c 这是相当麻烦的 xff0c 因为每处理一张图片就需要修改相应的图片名 于是就想着要是可以批量处理就好
  • MATLAB实现图像巴特沃斯滤波、高频增强滤波及直方图均衡化

    1 巴特沃斯滤波器 1 1 基本概念 在图像处理中 xff0c 巴特沃斯滤波器传递函数如下 xff1a 巴特沃斯低通滤波器公式 xff1a 巴特沃斯高通滤波器公式 xff1a 在公式中 xff0c D u v 代表频域当中 xff0c 点