系列文章

·【基于MATLAB的数字图像处理】第一章·绪论

·【基于MATLAB的数字图像处理】第二章·视觉系统与图像处理系统

·【基于MATLAB的数字图像处理】第三章·基本图像变换

·【基于MATLAB的数字图像处理】第四章·图像增强

·【基于MATLAB的数字图像处理】第五章·图像编码

·【基于MATLAB的数字图像处理】第六章·形态学图像处理

·【基于MATLAB的数字图像处理】大作业·综合图像处理平台

目录

前言

一、傅里叶变换

1.一维傅里叶变换

2.二维傅里叶变换

3.傅里叶变换性质

4.MATLAB示例程序

二、离散余弦变换

1.一维离散余弦变换

2.二维离散余弦变换

3.应用及MATLAB示例程序

三、小波变换

1.简介

2.MATLAB示例程序


前言

为了有效和快速地对图像进行处理,常常需要将原定义在图像空间的图像以某种形式转换到另外一些空间,并利用在这些空间的特有性质方便地进行一定的加工,最后再转换回图像空间以得到所需的效果。

一般将从图像空间向其他空间的变换称为正变换,而将从其他空间向图像空间的变换称为反变换或逆变换

一般变换后的图像,大部分能量都分布于低频谱段,这对以后图像的压缩\传输都比较有利。

正变换通式:

其中h(x,u)称为正向变换核函数

逆变换通式:

其中k(x,u)称为逆向变换核函数


一、傅里叶变换

离散傅里叶变换(DFT)描述了离散信号的时域表示和频域表示,经过傅里叶变换可以将时域上的图像转换为频域空间进行分析,是线性系统分析和信号处理中一种非常有效的数学工具。

首先说明,傅里叶变换的数学表达形式原本为积分形式,针对的是连续函数的情况,但是在计算机中,无法识别连续信号,需要对一个连续函数f(x)进行等间隔采样,得到离散形式的傅里叶变换公式,下文都是采用这种形式。

1.一维傅里叶变换

1-D傅里叶正变换公式:

1-D傅里叶反变换公式:

公式中有exp(j2πux/N)一项,可以通过欧拉公式

将公式进行变换,最终的结果肯定是一个复数,可以写成如下的形式:

定义频谱(幅度)为F(u)的模:

定义相位角为复数角的正切:

2.二维傅里叶变换

2-D傅里叶正变换公式:

2-D傅里叶逆变换公式:

同样我们可以定义频谱和相位角:

但是二维的傅里叶变换公式本身比较复杂,并且对于计算机来说,计算的消耗也很大,我们可以引入一些傅里叶变换的性质,试着简化公式,并减小计算量。

3.傅里叶变换性质

分离性质:

进行一次二维的傅里叶变换性质等同于进行两次一维傅里叶变换,先固定列(v),对x进行累加运算,算出F(x,v),然后再固定行,计算最终的二维傅里叶变换结果:

这样进行运算可以将进行该算法的时间复杂度由O()减少为O(),大大减少了计算消耗。

平移性质:

在我们计算图像的频谱时,进行可视化后,得到的低频部分往往分散在四角,这使得我们在想进行滤波操作时很不方便,于是我们可以通过位移性质将低频部分都集中到中央。

图像在空间平移相当于其变换在频域与一个指数项相乘:

图像在空间与一个指数项相乘相当于其变换在频域平移:

 旋转性质:

f(x,y)旋转一个角度对应于将其傅里叶变换F(u,v)也 旋转相同的角度

尺度性质:

  1. 对f(x,y)在幅度方面的尺度变换导致对其傅里叶变换F(u,v)在幅度方面的对应尺度变化
  2. 对 f(x, y) 在空间尺度方面的放缩导致对其傅里叶变换F(u, v)在频域尺度方面的相反放缩,并且使幅度方面减小。

卷积定理:

在时间域对两个函数做卷积运算,相当于在频率域进行对应的两个函数做乘法。

4.MATLAB示例程序

这里我们的第一个图像是自己画的一个黑白方块图,第二个图像是提取的Lune女士的图像并旋转了45度,然后进行傅里叶变换,并进行了移位操作,然后使用二维和三维图分别显示。

%% Example from book
clear;clc;
N = 100;
f = zeros(50,50); %50X50零矩阵
f(5:35,23:28) = 1;
F = fft2(f,N,N); %二维傅里叶变换
x1=1:N;y1=1:N;%移位
F2 = fftshift(abs(F)); %移位%% 真实图片
image = imread("Lena.tif");
[M,N] = size(image); %获取图像行数和列数
Rot = imrotate(image,45,'bilinear'); %图像旋转45度
F3=fft2(Rot,M,N); % 二维傅里叶变换
x2=1:M;y2=1:N;
F4=fftshift(abs(F3));%% 图像显示
figure;
% subplot(2,3,3);mesh(x1,y1,abs(F(x1,y1))); %三维网格显示 不移位
subplot(2,3,3);mesh(x1,y1,F2(x1,y1)); %三维网格显示 移位
subplot(2,3,6);mesh(x2,y2,F4(x2,y2));
% colormap(jet);colorbar; %模型渲染
subplot(2,3,1);imshow(f);
subplot(2,3,2);imshow(abs(F),[0,10]);
% subplot(2,3,2);imshow(F2);%移位
subplot(2,3,4);imshow(Rot);
subplot(2,3,5);imshow(abs(F3),[1000,2550]); % 将min显示为黑色,将max显示为白色

实验效果:


二、离散余弦变换

Fourier变换是在图像变换中最广泛使用的一种变换,但他也存在一些问题,它的参数都是复数,在数据描述方面是实数的两倍,因此提出了离散余弦变换(DCT),离散余弦变换类似于傅里叶变换,但是只使用实数,减少了一般的计算量。

如果函数f(x)是一个连续的实偶函数,那么在进行傅里叶变换时,后面的复数项为奇函数,积分后其值为0,只剩下实数项,这样就简化了运算。

1.一维离散余弦变换

正变换:

逆变换:

变换核函数:

2.二维离散余弦变换

离散余弦变换也是傅里叶变换的一种,因此对于二维离散余弦变换也可以使用分离性质和对称性质,将一次二维离散余弦变换,变为两次一维离散余弦变换。

正变换:

逆变换:

3.应用及MATLAB示例程序

离散余弦变换常用于JPEG格式的压缩,也常用于加水印。

经过DCT变换后,能量集中于图像的左上角。

在DCT变换域中,图像被分解为直流(DC)分量和交流(AC)分量,从稳健性的角度看,在保证水印不可见性的前提下,DC分量比AC分量更适合嵌入水印,在DCT域中AC系数又有高频系数和低频系数之分,将水印嵌入高频系数可以获得较好的不可见性,但稳健性较差。另一方面,将水印嵌入低频系数可获得较好的稳健性,但对视觉观察有较大影响。

在实例程序中,我先复现了一下书上的压缩图像的代码,然后又实现了给图像加一个黑色矩形水印的实例。

%% Example_from_book
clear;clc;
RGB=imread("LenaRGB.tif");
GRAY=rgb2gray(RGB); %RGB转为灰度图
subplot(1,3,1);imshow(GRAY); %显示灰度图
D=dct2(GRAY); %进行离散余弦变换
subplot(1,3,2);imshow(abs(D),[]); %显示变换后的图像
colormap(gray(4));colorbar; %色彩渲染
D(abs(D)<0.1)=0; %将DCT值小于0.1的元素设为0
I=idct2(D)/255; %进行余弦逆变换
imwrite(I,"DCTLena.jpeg"); %将图像存储到当前文件夹下
subplot(1,3,3);imshow(I); %在视觉效果上不会差别太大,但有效的节约了大量的存储空间%% 图像加水印
clear;clc;
figure;
RGB=imread("LenaRGB.tif");
GRAY=rgb2gray(RGB); %RGB转为灰度图
subplot(2,2,1);imshow(GRAY); %显示灰度图
D=dct2(GRAY); %进行离散余弦变换
subplot(2,2,2);imshow(D); %显示变换后的图像
D(20:70,20:100)=0; %在这块区域加一个黑色水印
subplot(2,2,3);imshow(D); %显示添加后的图
K=idct2(D)/255; %傅里叶逆变换
subplot(2,2,4);imshow(K);

实验效果:


三、小波变换

1.简介

傅里叶变换的不足之处:利用傅里叶变换只能获得信号的整个频谱,很难获得信号的局部特征,特别是对于突变信号和非平稳信号,都难以获得希望的结果;其次,在图像分析时,有时需要将信号在时域和频域中的特性或空域和频域中的特性结合起来分析,傅里叶变换不能判断某一时间段的频率成分。

为了解决这个问题,1946年Gabor先提出了加窗的Fourier变换,一定程度上克服了该缺陷,但没从根本上解决问题,因为为了提高局部可观察性,就需要加大窗口,导致计算量大增,因此提出了小波变换,小波变换以局部化函数所形成的的小波基为基底展开,它是一个时间和频率的局域变换,可以通过伸缩和平移等运算功能对函数或信号进行多尺度的细化分析。

然后将信号在这个函数系上进行分解,就得到了连续小波变换

小波变换的过程:

  1. 把小波ψ(t)和原始信号f(t)的开始部分进行比较
  2. 计算系数c 。该系数表示该部分信号与小波的近似程度。系数 c 的值越高表示信号与小波越相似,因此系数c 可以反映这种波形的相关程度
  3. 把小波向右移,距离为k,得到的小波函数为ψ(t-k),然后重复步骤1和2。再把小波向右移,得到小波ψ(t-2k),重复步骤1和2。按上述步骤一直进行下去,直到信号f(t)结束
  4. 扩展小波ψ(t),例如扩展一倍,得到的小波函数为ψ(t/2)
  5. 重复步骤1~4,通过系数c可以反应不同小波基于信号f(t)的波段近似程度

小波变换核函数:

将小波变换由一维推广到二维,就可以用于图像处理,实质上相当于分别对图像数据的行和列做一维小波变换。通过水平和垂直滤波,离散小波将原图像分为4个子带图:垂直和水平的低频子带图像LL、水平方向的低频和垂直方向的高频子带图像LH、水平方向的高频和垂直方向的低频子带图HL、垂直和水平的高频子带图HH。

2.MATLAB示例程序

在这个程序中,第一部分进行了小波变换,将低频和高频带显示;第二个示例使用小波变换进行了两幅图像的融合。

%% Example form book part.1
clear;clc;
RGB=imread("LenaRGB.tif");
GRAY=rgb2gray(RGB);
subplot(121);imshow(GRAY);
title("原始图像");
axis square;
axis on;
[c,s]=wavedec2(GRAY,2,'bior3.7'); %使用bior3.7小波进行2层小波分解
ca1=appcoef2(c,s,'bior3.7',1); %提取小波分解结构中第1层低频系数
ch1=detcoef2('h',c,s,1);
cv1=detcoef2('v',c,s,1);
cd1=detcoef2('d',c,s,1);
% 上述三条等价于:[ch1,cv1,cd1]=detcoef2('all',c,s,1);%尺度1的所有方向的高频系数
%分别对各频率成分进行重构
al=wrcoef2('a',c,s,'bior3.7',1);
hl=wrcoef2('h',c,s,'bior3.7',1);
vl=wrcoef2('v',c,s,'bior3.7',1);
dl=wrcoef2('d',c,s,'bior3.7',1);
cl=[al,hl,vl,dl];  %显示分解后各频率成分的信息
subplot(122);
imshow(cl);
axis square;
axis on;
title('分解后低频和高频信息');%% Example from book Part.2
clear;clc;
I1=imread("LenaRGB.tif");
I2=imread("BaboonRGB.tif");
I1=rgb2gray(I1);
I2=rgb2gray(I2);
I1=double(I1)/256;
I2=double(I2)/256;
XFUS=wfusimg(I1,I2,'sym4',5,'max','max'); %基于小波分解的图像融合
figure;
subplot(131);
imshow(I1);%colormap(jet); %设置色彩索引图
axis square;
axis on;
title("Image1")
subplot(132);
imshow(I2);%colormap(jet); %设置色彩索引图
axis square;
axis on;
title("Image2");
subplot(133);
imshow(XFUS);%colormap(jet); %设置色彩索引图
axis square; %用来产生正方形的坐标系
axis on;
title("融合后的图像");

实验效果:

【基于MATLAB的数字图像处理】第三章·基本图像变换相关推荐

  1. 【基于MATLAB的数字图像处理】第四章·图像增强

    系列文章 ·[基于MATLAB的数字图像处理]第一章·绪论 ·[基于MATLAB的数字图像处理]第二章·视觉系统与图像处理系统 ·[基于MATLAB的数字图像处理]第三章·基本图像变换 ·[基于MAT ...

  2. 【基于MATLAB的数字图像处理】大作业·综合图像处理平台

    系列文章目录 ·[基于MATLAB的数字图像处理]第一章·绪论 ·[基于MATLAB的数字图像处理]第二章·视觉系统与图像处理系统 ·[基于MATLAB的数字图像处理]第三章·基本图像变换 ·[基于M ...

  3. 基于MATLAB的数字图像处理系统设计

    一.课题背景 MATLAB 作为国内外流行的数字计算软件,具有强大的图像处理功能,界面简洁,操作直观,容易上手,而且是图像处理系统的理想开发工具. 笔者阐述了一种基于MATLAB的数字图像处理系统设计 ...

  4. java数字图像处理开题报告,基于MATLAB的数字图像处理算法研究与仿真开题报告...

    基于MATLAB的数字图像处理算法研究与仿真开题报告 毕 业 设 计 (2013 届) 题 目基于 MATLAB 的数字图像 处理算法研究与仿真 学 院 物理电气信息学院 专 业 通信工程 年 级 0 ...

  5. 基于MATLAB的数字图像处理的设计与实现 转

    基于MAT [摘要]数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人们服务.数字图像处理是一种通 ...

  6. 基于MATLAB的数字图像处理系统

    基于MATLAB的数字图像处理系统 摘要:数字图像处理技术是20世纪60年代发展起来的一门新兴学科,随着图像处理理论和方法的进一步完善,使得数字图像处理技术在各个领域得到了广泛应用,并显示出广阔的应用 ...

  7. 基于MATLAB的数字图像处理系统GUI界面设计

    基于MATLAB的数字图像处理系统GUI界面设计 图像读入 从图形文件中读入图像 imread Syntax: A = imread(filename, fmt) filename:指定的灰度或彩色图 ...

  8. 基于MATLAB的数字图像处理基本操作

    实验一:图像增强 实验名称:图像增强 实验目的:1.熟悉图像在Matlab下的读入,输出及显示: 2.熟悉直方图均衡化: 3.熟悉图像的线性指数等: 4.熟悉图像的算术运算及几何变换. 实验原理: 图 ...

  9. 基于MATLAB的数字图像处理仿真软件

    1 引言 1.1MATLAB介绍 MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的 ...

最新文章

  1. Nature: 人的肠道古细菌基因组集
  2. mysql 编译安装
  3. nodejs中的全局函数setTimeout/clearTimeout,setInterval/clearInterval,unref/ref
  4. 使用Windows8开发Metro风格应用五
  5. golang变量的数据类型:整型及其使用细节
  6. Windows10记事本和Visual Studio Code文件encoding的设置
  7. Leetcode--90. 子集Ⅱ
  8. 程序员编程,你的练习是不是有效的?
  9. 云图说|一张图带你了解华为云分布式数据库中间件
  10. 【推荐算法】知识驱动的智能化推荐算法(附交流视频和PPT下载链接)
  11. sid更新 续订sas软件_更新SAS 9.4(64位) SID的方法
  12. 小米android phone驱动安装,驱动安装是小米刷机第一步 小米手机驱动怎么安装 - 驱动管家...
  13. 游程编码用matlab实现代码_二值图像游程编码算法的Matlab实现 -
  14. Python 中的决策树
  15. 07-SNAP处理Sentinel-1 IW GRD数据
  16. Android游戏开发教程------(绘制屏幕)
  17. 一周技术学习笔记(第81期)-《愿生命从容》
  18. win10专业版使用vmware安装虚拟机时“出现此主机支持Intel VT-x,但Intel VT-x处于禁用状态”。
  19. csrf(csrf请求非法是什么意思)
  20. 实现数组扁平化的几种方式

热门文章

  1. 四川企立方:拼多多团购要怎么申请团购点
  2. C#开发 ActiveX 小票打印控件
  3. 利用SAH实现kD树快速分割模型实践
  4. x86汇编_短路求值-AND / OR运算符_笔记_39
  5. NVidia 3060/1650S 独显笔记本 HDMI外接屏幕有输出,笔记本屏幕无输出/ubuntu 更改显卡驱动后无法进入图形界面的处理方法 以及禁止内核自动更新
  6. 高速大容量nfcb卡nfc手机测试b卡协议正确性14443b 848kbps nfc平板
  7. 计算机技术应用于教学案例,信息技术应用教学案例.doc
  8. 戴尔笔记本开机时卡在logo处底下小进度圈不动,进不了系统
  9. Unity Addressable学习笔记一(整体介绍)
  10. [C++][图]列出连通集