Curvelet变换是基于傅里叶变换和小波变换的一种改进,其特点是有高度的各向异性,具有良好表达图形沿边缘的信息的能力,对于恢复形状的沿边缘的主要结构和抑制周边噪声有其特有优势。

其过程为

这和传统的DFT及小波变换的处理过程类似,把图表中的curvelet换成DFT和wavelet就可以了。

Curvelet变换是最近图像处理较新的一种多尺度几何变换算法。其发展历程在短短十年间:

1999年,Candès和Donoho在Ridgelet变换的基础上提出了连续曲波(Curvelet)变换——第一代Curvelet变换中的Curvelet99。

2002年,Strack、Candès和Donoho提出了第一代Curvelet变换中的Curvelet02。

2002年,Candès等人提出了第二代Curvelet变换。

2005年,Candès提出了两种基于第二代Curvelet变换理论的快速离散实现方法:

1)非均匀空间抽样的二维FFT算法(Unequally-Spaced Fast Fourier Transform,USFFT);

2)Wrap算法(Wrapping-Based Transform)

与小波变换类似,Curvelet变换同样有其对应公式。Curvelet系数可由下式得到,即信号与小波函数内积:

这里j表示尺度,l表示方向,k表示位移。变换的推导以及原理是个十分复杂的过程,这需要有相当强的数学功底。

Curvelet变换原理

Curvelet 变换通过对Radon 域内的每一个投影轴作一维小波分析,并由局部脊波分析得到多尺度结构。设参量θ是常数,平移量1是变量,脊波系数R,(a,b,θ)为

然后对每个分块用式(1,2)进行脊波分析。上面每步均可逆,经过逆变换可得重建图像。

通过Radon域的多角度投影,Curvelet变换明显加强了目标边界。同时由于Curvelet变换是多尺度脊波变换的子集,它可以用投影切片定理来实现:一幅n&TImes;n的图像可表达成2n条径向线的积分结果,对每条线的投影数据计算一维小波变换,就得到脊波系数。这样的Curvelet变换冗余因子达到16J+1。由于经典算法中分块的径向抽样角度恒定,直角坐标与极坐标的转换将导致在同一块内数据的非均匀抽样,当块中心附近的抽样值满足奈奎斯特抽样定理要求时,在块的边界部分将出现欠抽样;而当块边界部分满足抽样定理要求时,块中心部分数据将会过抽样,而且块的尺寸越大,非均匀抽样的影响就越明显。因此,在原算法中尽管离散Curvelet变换的实现较简单,但是为了无失真地重构图像,保证块边界周围的抽样值足够多,它在块的中心部分实施了过抽样,因此耗时和冗余度也相应增大。

下面是对Curvelet变换的理解:

在时间域:Curvelet变换可以看做是一个椭圆以内积形式依次覆盖整个矩阵(指要变换的矩阵),这个图在很多地方都出现过。就我个人的理解详细解释下。

这里的椭圆就是Curvelet变换的窗口,相当于小波变换的基函数。其长轴与短轴关系为平方关系,其窗口大小视尺度j而定。与二维小波变换最大的优势在于Curvelet变换具有方向性。就是在尺度j下,椭圆做完整个矩阵的内积后(即依次覆盖完整个矩阵),可得到一组系数。然后将椭圆进行旋转适当的角度a再与矩阵做内积得到a角度的Curvelet系数。这样将椭圆进行多次旋转,每旋转一个角度就能得到尺度j一个方向的系数矩阵。在尺度j下做L次旋转,那么尺度j下就产生L个角度的系数矩阵。做完尺度j了接下来做尺度j+1下所有角度,方法同上。

如一幅图像上有一段弧,椭圆长轴沿着弧方向做覆盖内积得到的系数就大。这样就适合做图像边缘检测。

对于Curvelet变换的Matlab程序包curvlab可在网上下载。Curvlab包里有Curvelet的快速离散算法的Matlab程序和C++程序。

将其添加在Matlab里面:File -》 set path

Add Folder 添加好curvlab里相关*. M文件的路径。

这时在Matlab里面使用Curvelet的快速变换及反变换函数:

fdct_usfft()

ifdct_usfft()

fdct_wrapping()

ifdct_wrapping()

在Matlab中Curvelet变换后返回的是一个cell矩阵。这个矩阵装着各个尺度、各个方向的系数值。

C= fdct_usfft(***);

C{j}表示一个cell矩阵,装着尺度j上所有方向的系数。

C{j}{l}就表示是一个二维矩阵,表示尺度j,方向l上的所有系数,

一般尺度越高,其对应的都是高频系数。

curvelet matlab示例代码理解

1. fdct_wrapping

funcTIon C = fdct_wrapping(x, is_real, finest, nbscales, nbangles_coarse)

% fdct_wrapping.m - Fast Discrete Curvelet Transform via wedge wrapping - Version 1.0

%

% Inputs

% x M-by-N matrix 输入为MxN的矩阵

%

% OpTIonal Inputs

% is_real Type of the transform 转化的类型

% 0: complex-valued curvelets 复数值的曲波变化

% 1: real-valued curvelets 实数值的曲波变化

% [default set to 0] 默认设置为0

% finest Chooses one of two possibiliTIes for the coefficients at the

% finest level: 选择一种表示方式计算最优级的系数

% 1: curvelets 曲波变化

% 2: wavelets 小波变化

% [default set to 2] 默认设置为2

% nbscales number of scales including the coarsest wavelet level

% 包含最粗小波级在内的伸缩数

% [default set to ceil(log2(min(M,N)) - 3)]

% nbangles_coarse

% number of angles at the 2nd coarsest level, minimum 8,

% 第二粗糙级的角度数,最小为8

% must be a multiple of 4. [default set to 16]

% 必须为4的倍数,默认为16

% Outputs

% C Cell array of curvelet coefficients.

% C{j}{l}(k1,k2) is the coefficient at

% - scale j: integer, from finest to coarsest scale,

% 从最佳尺度到最粗尺度

% - angle l: integer, starts at the top-left corner and

% increases clockwise,

% 从左上角开始顺时针增长

% - position k1,k2: both integers, size varies with j

% and l.

% If is_real is 1, there are two types of curvelets,

% ‘cosine’ and ‘sine’。 For a given scale j, the ‘cosine’

% coefficients are stored in the first two quadrants (low

% values of l), the ‘sine’ coefficients in the last two

% quadrants (high values of l)。

%

% See also ifdct_wrapping.m, fdct_wrapping_param.m

%

% By Laurent Demanet, 200412345678910111213141516171819202122232425262728293031323334353637383940414243

2. DCT基本示例代码理解

% fdct_wrapping_demo_basic.m -- Displays a curvelet both in the spatial and frequency domains.

m = 1024;

n = 1024;

X = zeros(m,n);

%forward curvelet transform

disp(‘Take curvelet transform: fdct_wrapping’);

tic; C = fdct_wrapping(X,0,2,8,64); toc; %tic toc配合使用测量程序运行时间

%specify one curvelet

s = 7; %从1开始增大,空间域变细,频率域变粗

w = 10;%从1(左上角)开始增大,空间域顺时针旋转,与笛卡尔corona相对应

[A,B] = size(C{s}{w});%尺度为s,方向为w,的矩阵大小

a = ceil((A+1)/2);

b = ceil((B+1)/5);

C{s}{w}(a,b) = 1; %该尺度、方向中心位置元素设置为1

%adjoint curvelet transform

disp(‘Take adjoint curvelet transform: ifdct_wrapping’);

tic; Y = ifdct_wrapping(C,0); toc;%进行反曲波变化,得到空间域图像

%display the curvelet

F = ifftshift(fft2(fftshift(Y)));

subplot(1,2,1); colormap gray; imagesc(real(Y)); axis(‘image’); 。。。

title(‘a curvelet: spatial viewpoint’);

subplot(1,2,2); colormap gray; imagesc(abs(F)); axis(‘image’); 。。。

title(‘a curvelet: frequency viewpoint’);

%get parameters

[SX,SY,FX,FY,NX,NY] = fdct_wrapping_param(C);

脊波变换 matlab,浅析curvelet变换原理与理解 - 全文相关推荐

  1. householder变换matlab,基于Householder变换的QR分解

    01.function [Q,R]=qrhs(A) 02.% 基于Householder变换,将方阵A分解为A=QR,其中Q为正交矩阵,R为上三角阵 03.% 04.% 参数说明 05.% A:需要进 ...

  2. matlab dwt 多层分解,多尺度小波分解Matlab/Python实现与原理分析

    小波分解的理解 Matlab中实现小波分解方式 在matlab中实现小波分解的方式比较简单,通过[C,L] = wavedec(X,N,'wname')得到C和L,如下图,C表示分解得到的各个层的小波 ...

  3. 二维haar小波matlab_二维小波变换MATLAB实现.ppt

    二维小波变换MATLAB实现 二维小波变换MATLAB实现 斑渺龋钝臃疗该限桨呀呕肚厌欧没规兰痊脱飘疑艰雁峪告涡稽朵猫著明帝二维小波变换MATLAB实现二维小波变换MATLAB实现 dwt2函数 功能 ...

  4. matlab fft反变换,Matlab实现FFT变换

    Matlab实现FFT变换 Matlab实现FFT变换(单边谱及双边谱)­ ­ 以前对于Fourier Transform从来没有细究,不管在LabVIEW还是Matlab里都有现成的FFT(快速Fo ...

  5. 剪切波变换matlab,剪切波变换MATLAB实现代码

    [实例简介] 剪切波变换MATLAB实现代码,包含2D及3D图片的,还有对应的反变换代码 [实例截图] [核心代码] ShearletTransform_Matlab └── 2D ├── dfilt ...

  6. gabor 变换matlab,Gabor变换到底是什么鬼?

    欲讲gabor,必须先看下傅里叶变换有什么缺点! 1.傅里叶变换 1) 简介 数字图像处理的方法主要分成两大部分:空域分析法和频域分析法.空域分析法就是对图像矩阵进行处理:频域分析法是通过图像变换将图 ...

  7. 【控制】拉普拉斯拉氏变换原理分解理解

    扩展链接: [控制]Z变换及其原理讲解 [Matlab 控制] 拉氏变换和Z变换 拉氏变换原理分解理解 拉氏变换原理分解理解 1. 拉普拉斯变换 2. 拉普拉斯逆变换 (1)反演公式 (2)查表法(分 ...

  8. hough变换检测直线 matlab,Matlab实现Hough变换检测图像中的直线

    Hough变换的原理: 将图像从图像空间变换至参数空间,变换公式如下: 变换以后,图像空间与参数空间存在以下关系: 图像空间中的一点在参数空间是一条曲线,而图像空间共线的各点对应于参数空间交于一点的各 ...

  9. 同步挤压s变换matlab,同步挤压广义S变换信号时频分解与重构方法与流程

    本发明涉及信号处理领域,是一种高精度的同步挤压广义S变换信号时频分解与重构方法. 背景技术: 信号是指携带信息的一元函数或多元函数.在实际的生活中,我们每天都会接触大量的信号,例如,某医院每天看病的人 ...

最新文章

  1. python官网下载步骤linux-Linux 安装python3.x步骤
  2. 一口气说出 4种 “附近的人” 实现方式,面试官笑了,嘿嘿
  3. SpringMVC搭建+实例
  4. 前端学习(1416):ajax的运行原理
  5. 机器学习用于金融市场预测难在哪?
  6. 智能云媒体服务器,智慧广电媒体解决方案
  7. java虚拟机MyEclipse_Eclipse和MyEclipse运行环境java虚拟机jvm设置,自己设置jre
  8. quot;蓝筹quot;如何使程序猿?
  9. k3s 卸载_Mac-Homebrew安装/卸载/更换国内镜像源
  10. [JSOI2009]球队收益
  11. 网络信息安全基本属性
  12. 软件测试每日例会,每日例会(二).md
  13. python合并工作簿所有内容_使用Python将多个工作簿合并为一个xlsx工作簿
  14. 图片放大不失真 —— 矢量图
  15. 咸鱼的 GitHub 情报 | 20200103 期
  16. unity 角色鉴赏 spine动画鉴赏人物
  17. iOS 单元测试- 入门学习2
  18. html收藏页面代码,我的收藏页面.html
  19. 生命周期onLoad和onShow的区别
  20. java万年历解析,java万年历

热门文章

  1. SKU(Stock Keeping Unit)是指库存量单位
  2. bert在预训练时的两个下游任务详解
  3. Excel制作导入模板,多级联动下拉框(一整列的设置),修改一级下拉框内容,自动清空二级内容
  4. 源特VPS8703 微功率隔离电源专用驱动芯片 6.5-30VIN/30V/0.5A 功率管的功能简介
  5. 03 请给我寄一张明信片 04 激动人心的旅行
  6. “群箱乱舞”的背后,我们从京东叮咚了解到什么?
  7. 手把手带你写一个中高级程序员必会的分布式RPC框架
  8. 一个简单的音乐网站设计与实现(HTML+CSS)___音乐网站7页--界面设置简洁好看,带有登陆注册
  9. Web功能之复制粘贴剪切板
  10. python计算化学键,Python语句print((16 14)/2)的输出结果是(? ?)。