图像傅里叶变换的MATLAB实现
图像傅里叶变换的MATLAB实现
本文基于《MATLAB图像处理实例详解》[杨丹,赵海滨,龙哲]2013年版
文章目录
- 图像傅里叶变换的MATLAB实现
- 图像的二维离散傅里叶变换
- 傅里叶变换后平移
- 变亮后进行傅里叶变换
- 旋转后进行傅里叶变换
- 添加高斯噪声
- 傅里叶反变换
图像的二维离散傅里叶变换
图像的二维离散傅立叶变换,代码如下
% 读入图片
I = imread("img/test1.png");% 变换之后为 complex double类型
J = fft2(I);% double类型
K = abs(J/256);figure;
subplot(121); imshow(I); % 显示图像
subplot(122); imshow(uint8(K)); % 显示频谱图
为什么要除以256 ?
首先将图片数据转化为实数类型。这一步将0-255的像素值转化为0.0-1.0范围内的实数。大多数图像处理API支持整数和实数类型的输入。如果输入是整数类型,这些API会在内部将输入转化为实数后处理,再将输出转化为整数。如果有多个处理步骤,在整数和实数之间的反复转化将导致精度损失,因此推荐在图像处理前将其转化为实数类型
imshow(uint8(K));
为什么要将图片转化为uint8形式?matlab中,常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算。
在matlab中,为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型。
如果直接运行imshow(I),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0 ~ 255范围。
而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。
傅里叶变换后平移
% 读入图片
I = imread("img/test1.png");
% 傅里叶变换
J = fft2(I);
% 类型转换
K = abs(J/255);
% 对原图像进行平移
K = fftshift(K);
figure;
subplot(121); imshow(I); title('原图像');
subplot(122); imshow(uint8(K)); title('傅里叶变换平移之后的图像');
变亮后进行傅里叶变换
% 读取图像
R = imread("img/test2.png");
% 将图片变为灰度图像
I = rgb2gray(R);
% 将图像变亮,因为I为uint8类型,所以不用担心超出255的范围。
I1 = I * exp(1);
% 进行傅里叶变换
J1 = fft2(I); % 原图
J2 = fft2(I1); % 变亮后
% 转换
K1 = abs(J1/255);% 原图
K2 = abs(J2/255);% 变亮后
% 图像平移
K1 = fftshift(K1); % 原图
K2 = fftshift(K2); % 变亮后
figure;
subplot(221); imshow(R); title('原图像');
subplot(222); imshow(I); title('灰度图像');
subplot(223); imshow(uint8(K1)); title('傅里叶变换平移之后的图像');
subplot(224); imshow(uint8(K2)); title('变亮之后的图像');
旋转后进行傅里叶变换
% 读取图像
R = imread("img/test2.png");
% 将图片变为灰度图像
I = rgb2gray(R);
% 将图像逆时针45度旋转
I1 = imrotate(I, 45, 'bilinear');
% 进行傅里叶变换
J1 = fft2(I); % 原图
J2 = fft2(I1); % 平移后
% 转换
K1 = abs(J1/255);% 原图
K2 = abs(J2/255);% 平移后
% 图像平移
K1 = fftshift(K1); % 原图
K2 = fftshift(K2); % 平移后
figure;
subplot(221); imshow(R); title('原图像');
subplot(222); imshow(I); title('灰度图像');
subplot(223); imshow(uint8(K1)); title('傅里叶变换平移之后的图像');
subplot(224); imshow(uint8(K2)); title('平移之后的图像');
添加高斯噪声
% 读取图像
R = imread("img/test2.png");
P1 = R; % 原彩色图像
% 将图片变为灰度图像
I = rgb2gray(R);
P3 = I;
% 添加高斯噪声
I1 = imnoise(I, 'gaussian', 0, 0.03);
P2 = imnoise(R, 'gaussian', 0, 0.03);
P4 = I1;
% 进行傅里叶变换
J1 = fft2(I); % 原图
J2 = fft2(I1); % 添加后
% 转换
K1 = abs(J1/255);% 原图
K2 = abs(J2/255);% 添加后
% 图像平移
K1 = fftshift(K1); % 原图
K2 = fftshift(K2); % 添加后
figure;
subplot(321); imshow(P1); title('原图像');
subplot(322); imshow(P2); title('高斯噪声');
subplot(323); imshow(P3); title('原图像');
subplot(324); imshow(P4); title('高斯噪声');
subplot(325); imshow(uint8(K1)); title('原图像');
subplot(326); imshow(uint8(K2)); title('高斯噪声');
傅里叶反变换
% 读取图像
R = imread("img/test2.png");
% 将图片变为灰度图像
I = rgb2gray(R);
% 进行傅里叶变换
J = fft2(I);
% 图像平移
L = fftshift(J);
% 平移回来
M = ifftshift(L);
% 傅里叶反变换
M = ifft2(M);figure;
subplot(121); imshow(I); title('原图');
subplot(122); imshow(uint8(M)); title('反变换');
图像傅里叶变换的MATLAB实现相关推荐
- 傅里叶变换的Matlab代码
原文:http://blog.csdn.net/xiaofengsheng/article/details/5991680 傅里叶变换的Matlab代码: img=imread('e:/4.jpg') ...
- matlab 二重傅里叶积分,傅里叶积分、傅里叶变换的matlab实现.doc
傅里叶积分.傅里叶变换的matlab实现.doc PAGE PAGE 1 院 校: 物理与电子科学学院 班 级: 0801 班 姓 名: 目 录 1. 引言---------------------- ...
- matlab计算正交变换,图像的正交变换matlab.pdf
图像的正交变换matlab <数字图像处理>课程实验报告 实验名 :图像的正交变换实验 1 院系: 自动化测试与控制系 班级: 1201132 姓名: 李丹阳 学号: 1120110113 ...
- 关于通用雷达信号的时频分析与图像绘制(Matlab)
关于通用雷达信号的时频分析与图像绘制(Matlab) 最近在研究雷达信号的调制识别,所以对通用的雷达信号种类进行了时频域上的研究,下面小结给大家,从信号的原理到matlab的时频图绘制. 信号种类 这 ...
- [Python从零到壹] 六十四.图像识别及经典案例篇之图像傅里叶变换和傅里叶逆变换详解
祝大家新年快乐,阖家幸福,健康快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所 ...
- 【数字图像处理】图像直方图均衡化、空域滤波(均值滤波、中值滤波)、图像锐化(Laplace算子)、图像傅里叶变换实验
图像直方图均衡化.空域滤波.图像锐化.图像傅里叶变换 一.图像直方图均衡化 二.图像空域滤波 1.均值滤波(滤波次数n→3) 2.中值滤波(滤波次数n→3) 3.图像锐化(Laplace算子) 三.图 ...
- 图像转置的MATLAB和OpenCV源码
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 注意,图像转置和图像旋转是两回事,图像转置只是把 ...
- matlab图像相加例子,MATLAB图像处理例子
MATLAB图像处理例子 clc;clear all;close all; a = imread( railway_05.jpg ); b = rgb2gray(a); c = im2bw(b,240 ...
- 亮度均匀性 matlab,求:亮度保持的夜景图像直方图均衡算法 matlab程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求:亮度保持的夜景图像直方图均衡算法 matlab程序 我是大四学生,最近在做一个论文,头疼死了,不知道这个论文的程序怎么写.这里是matlab论坛 我想 ...
- 通俗讲解:图像傅里叶变换
转自某乎:通俗讲解:图像傅里叶变换 - 知乎 这里我们主要要讲的是二维图像傅里叶变换,但是我们首先来看一张很厉害的一维傅里叶变换动图. 妈耶~厉害哇!它把时域和频域解释的很清楚! 什么!你看不懂! 简 ...
最新文章
- Oracle再发力,区块链平台多项更新
- mybaits if判断进入不了
- HTTP与HTTPS——密码学笔记(九)
- PXC 部署前置检查
- Maven的优势举例
- 一文详解Serverless架构模式
- 在springBoot中使用Mapper类问题_@Mapper_@MapperScan_xml文件跟mapper分开_xml文件跟mapper在同一个目录下
- 使用java代码发送zip文件到邮箱_Azkaban安装与使用(下)
- SNMP协议交互学习-获取udp的udpindatagrams
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第1节 基本概念_03maven一键构建概念
- 软考分类精讲-软件管理
- 远程访问树莓派的摄像头实现远程监控
- 程序员搞什么副业好?
- 【Netty - 解码器】did not read anything but decoded a message 异常
- Win10、Win7定时开关机
- MES系统读取MySQL数据_MES系统数据库
- 定了,“518囤币日”来了!囤币者,永不孤单!
- ZEN mining
- python毕业设计作品基于django框架个人博客系统毕设成品(6)开题答辩PPT
- Tomcat7 session 持久化关闭