MATLAB实现图像变换和滤波

MATLAB实现图像变换和滤波方法对具有不同特征的灰度图像进行处理

图像变换方法包括:DFT及IDFT,DCT及IDCT

图像滤波方法包括低通滤波和高通滤波

图像变换

DFT/IDFT

图像一般是二维的,根据二维离散傅里叶变换公式DFT,可以将图片从空间域转换到频率域内,对其进行一些处理,再通过离散傅里叶反变换IDFT,转换回原空间域,达到一些特殊处理效果。

在这里插入图片描述

DCT/IDCT

离散余弦变换(Discrete Cosine Transform)本质上也是离散傅里叶变换(Discrete Fourier Transform),但是只有实数部分。有这样一个性质:如果信号x[n]在给定区间内满足狄利赫里条件,且为实对称函数,则可以展开成仅含有余弦项的傅里叶级数,即离散余弦变换。所以,我们在构造离散信号的周期函数的时候,要对其进行偶延拓。

在这里插入图片描述

图像滤波

图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。常见的滤波方法有低通滤波和高通滤波。

图像是一个二维的信号,其中像素点灰度值的高低代表信号的强弱。图像中的高频是指图像中灰度变化剧烈的点,一般是图像轮廓或者是噪声;图像中的低频是指图像中平坦的,灰度变化不大的点,图像中的大部分区域。

根据图像的高频与低频特征,我们可以设计相应的高通与低通滤波器,高通滤波可以检测图像中尖锐、变化明显的地方;低通滤波可以让图像变得光滑,滤除图像中的噪声。

MATLAB代码实现

% 1.读取图片
x=imread('.\BMP_images\lena256.BMP');
y=imread('.\BMP_images\cman256.BMP');
 
% 2.将两图分别转换成灰度图像 
% x=rgb2gray(x);
% y=rgb2gray(y);

% 3.FFT变换,并将中心平移
dftxchange = fftshift(fft2(x));   
dftychange = fftshift(fft2(y));
 
% 4.将平移后矩阵取实部,显示频谱图在窗口中。使用angle函数求相位角,显示相位图
figure(1)
subplot(1,2,1);imshow(x);title('原图1');
subplot(1,2,2);imshow(y);title('原图2');
figure(2)
subplot(2,2,1);imshow(log(abs(dftxchange)),[8 10]);title('图1的DFT频谱图');
subplot(2,2,3);imshow(angle(dftxchange));title('图1的DFT相位图');
subplot(2,2,2);imshow(log(abs(dftychange)),[8 10]);title('图2的DFT频谱图');
subplot(2,2,4);imshow(angle(dftychange));title('图2的DFT相位图');

% 5.DCT变换
dcta=dct2(x); 
dctb=dct2(y); 

% 6.显示频谱图和相位图
figure(3)
subplot(2,2,1);imshow(log(abs(dcta)),[]);title('图1的DCT变换幅度图');
subplot(2,2,2);imshow(angle(dcta),[]);title('图1的DCT变换相位图');
subplot(2,2,3);imshow(log(abs(dctb)),[]);title('图2的DCT变换幅度图'); 
subplot(2,2,4);imshow(angle(dctb),[]);title('图2的DCT变换相位图'); 
 
% 7.对图1和图2的频谱图和相位图分别进行IDFT重建,对图1(图2)的频谱图和图2(图1)的频谱图、相位图分别进行IDFT重建,显示重建后图片。
A=fft2(double(x)); B=fft2(double(y));
Af=abs(A); phaseA=angle(A);
Bf=abs(B); phaseB=angle(B);
  
rA=Af.*cos(phaseA)+Af.*sin(phaseA).*1i;
rB=Bf.*cos(phaseB)+Bf.*sin(phaseB).*1i;
xchange=uint8(abs(ifft2(rA)));
ychange=uint8(abs(ifft2(rB)));
figure(4);
subplot(2,1,1);imshow(xchange,[]);title('图1的幅度和1相位DFT重建');
subplot(2,1,2);imshow(ychange,[]);title('图2的幅度和2相位DFT重建');

% % 8.对图1和图2的频谱图和相位图分别进行IDFT重建,对图1(图2)的频谱图和图2(图1)的频谱图、相位图分别进行IDFT重建,显示重建后图片。
% rab0=Af.*cos(phaseB)+Af.*sin(phaseB).*1i;
% rab1=Bf.*cos(phaseA)+Bf.*sin(phaseA).*1i;
% xy=uint8(abs(ifft2(rab0)));
% xy1=uint8(abs(ifft2(rab1))); 
% subplot(2,2,2);imshow(xy,[]);title('图1幅谱与2相谱IDFT重建');
% subplot(2,2,4);imshow(xy1,[]);title('图2幅谱与1相谱IDFT重建');
 
% 7.对图1和图2的频谱图和相位图分别进行IDCT重建,对图1(图2)的频谱图和图2(图1)的频谱图、相位图分别进行IDCT重建,显示重建后图片。
dctxchange1=abs(dcta);dctxap=angle(dcta);
dctyychange2=abs(dctb);dctybp=angle(dctb);
dctxxchange4=dctxchange1.*cos(dctxap)+dctxchange1.*sin(dctxap).*1i;
dctyychange5=dctyychange2.*cos(dctybp)+dctyychange2.*sin(dctybp).*1i; 
dctxxchange4=uint8(abs(idct2(dctxxchange4)));
dctyychange5=uint8(abs(idct2(dctyychange5)));
figure(5)
subplot(2,1,1);imshow(dctxxchange4,[]);title('图1幅度与1相位IDCT重建');
subplot(2,1,2);imshow(dctyychange5,[]);title('图2幅度与2相位IDCT重建');
% dctxxchange4=dctxchange1.*cos(dctybp)+dctxchange1.*sin(dctybp).*1i;
% dctyychange5=dctyychange2.*cos(dctxap)+dctyychange2.*sin(dctxap).*1i;
% dctxchanger1=uint8(abs(idct2(dctxxchange4)));
% dctychanger1=uint8(abs(idct2(dctyychange5)));
% subplot(2,2,2);imshow(dctxchanger1,[]);title('图1幅度与2相位IDCT重建'); 
% subplot(2,2,4);imshow(dctychanger1,[]);title('图2幅度与1相位IDCT重建');

更多详细代码发布在https://github.com/JeremyChou28/digital_image_processing/tree/main/project1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/241090.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多线程案例-定时器(附完整代码)

定时器是什么 定时器是软件开发中的一个重要组件.类似于一个"闹钟".达到一个设定的时间之后,就执行某个指定好的代码. 定时器是一种实际开发中非常常用的组件. 比如网络通信种,如果对方500ms内没有返回数据,则断开尝试重连. 比如一个Map,希望里面的某个key在3s之后过…

视频播放插件ckplayer

地址:https://www.ckplayer.com/demo.html 效果图

events.out.tfevents文件信息提取

深度学习训练数据有时候是记录在log文件中,文件名类型为events.out.tfevents.xxx.king,当然这些文件可以通过tensorbord工具可视化,这里提供一些events.out.tfevents文件信息提取的方法。 (1)events.out.tfevents多个文件可视化 …

UniGui使用CSSUniTreeMenu滚动条

有些人反应UniTreeMenu当菜单项目比较多的时候会超出但是没有出滚动条,只需要添加如下CSS 老规矩,unitreemeu的layout的componentcls里添加bbtreemenu,然后在css里添加 .bbtreemenu .x-box-item{ overflow-y: auto; } 然后当内容超出后就会…

反射篇笔记

反射的本质:加载类。 把某个类的字节码文件加载到内存中。并允许以变成的方式解剖类中的各种成分(成员方法,变量,构造器)。 例如在使用IDEA时,他的提示,就是利用反射,提前将类中的…

AMEYA360:海康存储PCIe4.0固态硬盘A4000介绍

海康存储即将发布PCIe4.0固态硬盘新品A4000,搭载全新定制主控及高品质3D NAND闪存颗粒,最大顺序读取速度达7100MB/s,提供五年质保服务。 2022年,海康存储开始在PCIe 4.0固态硬盘领域全面发力,推出C4000 ECO、C4000等多…

将自己的django项目部署到云服务器(腾讯云centos)

最近自己买了个云服务玩,突然就想把自己写的小项目部署到云服务器上,这样就可以实现公网访问了。以下是整个部署过程和遇到的各种问题的解决方案,有想自己部署自己功能的,可以参考着进行哦。 1、设置好腾讯云的远程登录代码 先给…

yarn历史日志_配置文件

yarn历史日志yarn配置文件yarn执行任务 1.3. YARN的历史日志 1.3.1. 历史日志概述 我们在YARN运行MapReduce的程序的时候,任务会被分发到不同的节点,在不同的Container内去执行。如果一个程序执行结束后,我们想去查看这个程序的运行状态呢…

接口芯片选型分析 四通道差分驱动可满足ANSI TIA/EIA-422-B 和ITU V.11 的要求 低功耗,高速率,高ESD

四通道差分驱动可满足ANSI TIA/EIA-422-B 和ITU V.11 的要求 低功耗,高速率,高ESD。 其中GC26L31S可替代AM26LS31/TI,GC26L32S替代AM26LS32/TI,GC26E31S替代TI的AM26LV31E

19.java绘图

A.Graphics类 Graphics类是java.awt包中的一个类,它用于在图形用户界面(GUI)或其他图形应用程序中进行绘制。该类通常与Component的paint方法一起使用,以在组件上进行绘制操作。 一些Graphics类的常见用法和方法: 在组…

天软基金经理因子定期报告(2023-12)

天软基金经理因子定期报告(2023-12)报告概要: 从投资业绩来看,葛兰长期业绩表现优于市场,任职以来年化收益率为12.714%,最大回撤为-53.460%。 从投资能力来看,其选股能力与收益择时能力较为突出…

发布 Whatsonchain 上的 BSV20 插件

我们发布了 whatsonchain 上的 BSV20 插件来验证 BSV20 代币。 对于任何交易,whatsonchain 都可以通过以下网址打开: https://whatsonchain.com/tx/{hash}我们使用此 bsv20 v21 交易 打开 Whatsonchain 。 打开whatsonchain后你会看到BSV20插件&#x…

阿里云国际跨境直播解决方案,视频AI创新营销模式丰富直播场景

据第三方咨询公司iiMedia Research预测,2017-2020年,视频直播行业一直处于高速发展阶段。2020年,视频直播行业市场收入超1万亿元,累计覆盖用户5.26亿。 视频直播的应用范围已从视频娱乐、电子商务等泛互联网行业扩展到在线教育、…

python算法例17 下一个稀疏数

1. 问题描述 如果一个数是稀疏数,则它的二进制表示中没有相邻的1,例如5(二进制表示为101)是稀疏数,但是6(二进制表示为110)不是稀疏数,本例将给出一个n,找出大于或等于n…

Backtrader 文档学习-Quickstart

Backtrader 文档学习-Quickstart 0. 前言 backtrader,功能十分完善,有完整的使用文档,安装相对简单(直接pip安装即可)。 优点是运行速度快,支持pandas的矢量运算;支持参数自动寻优运算&#x…

软件测试基础知识+面试总结(超详细整理)

一、什么是软件? 软件是计算机系统中的程序和相关文件或文档的总称。 二、什么是软件测试? 说法一:使用人工或自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异…

yaml 文件格式

yaml文件:是一种标记语言,以竖列形式展示序列化的时间格式,可读性高 类似于json格式。语法简单。 yaml通过缩进来表示数据结构,连续的项目用-减号来表示。 yaml文件使用的注意事项: 1,大小写敏感 2&am…

深度学习环境配置------windows系统(GPU)------Pytorch

深度学习环境配置------windows系统(GPU)------Pytorch 准备工作明确操作系统明确显卡系列 CUDA和Cudnn下载与安装1.下载2.安装 环境配置过程1.安装Anacoda2.配置环境1)创建一个新的虚拟环境2)pytorch相关库的安装 2.安装VScode1&…

​Linux系列之yum安装​

yum是Linux系统的安装必备神器,简直不要太方便。但是新系统一般是不自带yum工具的,所以需要手动安装一下。 环境:Ubuntu sudo apt-get install yumsudo apt-get install rpm 环境:centos7 新建一个目录用来保存yum安装包 mk…

redis-学习笔记(Jedis 前置知识)

自定义的 Redis 客户端 咱们可以实现编写出一个自定义的 Redis 客户端 因为 Redis 公开了自己使用的自定义协议 ---- RESP 协议清楚了, 那么通信数据格式就清除了, 就能完成各层次之间的数据传输, 就能开发服务器和客户端 RESP — Redis 的 序列化 协议 特点: 简单好实现快读进…