matlab curvelet,学习Curvelet

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系数可由下式得到,即信号与小波函数内积:

36485785_1.jpg 

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

下面是对Curvelet变换的理解:

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

36485785_2.jpg

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

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

36485785_3.jpg

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

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

36485785_4.jpg

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上的所有系数,

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值