curvelet下载的curvelet工具包,有以下三个文件:fdct_usfft_matlab、fdct_wrapping_matlab、mecv三个文件夹添加到matlab路径中即可。

curvelet matlab示例代码理解:

1. fdct_wrapping

  1. function C = fdct_wrapping(x, is_real, finest, nbscales, nbangles_coarse)
  2. % fdct_wrapping.m - Fast Discrete Curvelet Transform via wedge wrapping - Version 1.0
  3. %
  4. % Inputs
  5. % x M-by-N matrix 输入为MxN的矩阵
  6. %
  7. % Optional Inputs
  8. % is_real Type of the transform 转化的类型
  9. % 0: complex-valued curvelets 复数值的曲波变化
  10. % 1: real-valued curvelets 实数值的曲波变化
  11. % [default set to 0] 默认设置为0
  12. % finest Chooses one of two possibilities for the coefficients at the
  13. % finest level: 选择一种表示方式计算最优级的系数
  14. % 1: curvelets 曲波变化
  15. % 2: wavelets 小波变化
  16. % [default set to 2] 默认设置为2
  17. % nbscales number of scales including the coarsest wavelet level
  18. % 包含最粗小波级在内的伸缩数
  19. % [default set to ceil(log2(min(M,N)) - 3)]
  20. % nbangles_coarse
  21. % number of angles at the 2nd coarsest level, minimum 8,
  22. % 第二粗糙级的角度数,最小为8
  23. % must be a multiple of 4. [default set to 16]
  24. % 必须为4的倍数,默认为16
  25. % Outputs
  26. % C Cell array of curvelet coefficients.
  27. % C{j}{l}(k1,k2) is the coefficient at
  28. % - scale j: integer, from finest to coarsest scale,
  29. % 从最佳尺度到最粗尺度
  30. % - angle l: integer, starts at the top-left corner and
  31. % increases clockwise,
  32. % 从左上角开始顺时针增长
  33. % - position k1,k2: both integers, size varies with j
  34. % and l.
  35. % If is_real is 1, there are two types of curvelets,
  36. % 'cosine' and 'sine'. For a given scale j, the 'cosine'
  37. % coefficients are stored in the first two quadrants (low
  38. % values of l), the 'sine' coefficients in the last two
  39. % quadrants (high values of l).
  40. %
  41. % See also ifdct_wrapping.m, fdct_wrapping_param.m
  42. %
  43. % By Laurent Demanet, 2004

  

2. DCT基本示例代码理解

  1. % fdct_wrapping_demo_basic.m -- Displays a curvelet both in the spatial and frequency domains.
  2.  
  3. m = 1024;
  4. n = 1024;
  5.  
  6. X = zeros(m,n);
  7.  
  8. %forward curvelet transform
  9. disp('Take curvelet transform: fdct_wrapping');
  10. tic; C = fdct_wrapping(X,0,2,8,64); toc; %tic toc配合使用测量程序运行时间
  11.  
  12. %specify one curvelet
  13. s = 7; %从1开始增大,空间域变细,频率域变粗
  14. w = 10;%从1(左上角)开始增大,空间域顺时针旋转,与笛卡尔corona相对应
  15. [A,B] = size(C{s}{w});%尺度为s,方向为w,的矩阵大小
  16. a = ceil((A+1)/2);
  17. b = ceil((B+1)/5);
  18. C{s}{w}(a,b) = 1; %该尺度、方向中心位置元素设置为1
  19.  
  20. %adjoint curvelet transform
  21. disp('Take adjoint curvelet transform: ifdct_wrapping');
  22. tic; Y = ifdct_wrapping(C,0); toc;%进行反曲波变化,得到空间域图像
  23.  
  24. %display the curvelet
  25. F = ifftshift(fft2(fftshift(Y)));
  26. subplot(1,2,1); colormap gray; imagesc(real(Y)); axis('image'); ...
  27. title('a curvelet: spatial viewpoint');
  28. subplot(1,2,2); colormap gray; imagesc(abs(F)); axis('image'); ...
  29. title('a curvelet: frequency viewpoint');
  30.  
  31. %get parameters
  32. [SX,SY,FX,FY,NX,NY] = fdct_wrapping_param(C);

  示例代码流程: 
* 首先创建了一副空图像,对其进行DCT变化,得到其系数C(可以理解为一个四维矩阵,由于每个二维矩阵维度不同,故使用cell数据结构),当然C中的元素全为0。 
* 之后将其尺度s、角度为w的二维矩阵C{s}{w}中心元素设置为1,对C进行IDCT变换,得到其空间域的图像Y。 
* 之后对Y做傅里叶变换,得到其频率域图像F。绘制Y与F的图像。

2.1 变化后系数矩阵维度的理解

下表显示了对图像做C = fdct_wrapping(X,0,2,6,16);变换后,得到系数C的详细信息,其中原始图片大小为512*512。最内层即Coarse是由低频系数组成的一个矩阵,最外层Fine是高频系数组成的矩阵。

层次 尺度系数 方向参量的个数 矩阵的形式
Coarse C{1} 1 21*21
Detail C{2} 16 18*22 16*22 22*18 22*16
  C{3} 32 34*22 32*22 22*32 22*34
  C{4} 32 67*44 64*43 64*44 44*64 43*64 44*67
  C{5} 64 131*44 128*43 128*44 44*128 43*128 44*131
Fine C{6} 1 512*512

2.2 尺度数s的影响

下图显示了对图像做C = fdct_wrapping(X,0,2,6,16);变换后,s=1:6,w=1下的空间域与频域的图像。可以看出: 
1. 随着s增大,即尺度由最佳尺度变为最粗尺度时,空间域的“针”图形组件变细,而频率域的“针”图像逐渐变粗。这个可以由空间域和频率域具有一定的对称性得知,空间域越“胖”,频率域越“瘦”。 
2. 尺度s值越大,代表的的越是高信息。

 

2.2 角度数w的影响

下图显示了对图像做C = fdct_wrapping(X,0,2,6,16);变换后,s=5,w=1:10:60下的空间域与频域的图像。可以看出: 
w=1时,“楔形”位于左上角位置,随着w增大,“楔形”顺时针转动。由于空间限制,只贴出部分图片。

 

2.3 位置a b(其元素值为1)的影响

下图所示为对原始图像进行C = fdct_wrapping(X,0,2,total_s,16);,改变C{5}{1}(a,b)=1;,a b取值变化时所对应空间域与频率域的图像,可以看出: 
a b的改变并不会对频率域图像造成影响,而在空间域上“针”状物体会根据a b的值发生相应的位移

3 curvelet的性质

  • 小波变换是一种具有较强时、频局部分析功能的非平稳信号分析方法成功地应用于信号的特征提取领域,曲波变换作为新一代的多尺度几何分析工具取得了较好的识别效果,它考虑了尺度、位置、角度信息使其在表达图像中的曲线时明显优于小波变换。
  • Curvelet变换各向异性的特点更适合分析图像中的曲线或直线状边缘特征。
  • 符合生理学研究指出的“最优”图像表示方法应该具有的三种特征,多分辨、带通、具有方向性

MATLAB工具包——curvelet变换的理解(转)的更多相关文章

  1. Matlab实现Hough变换检測图像中的直线

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

  2. Matlab---傅里叶变换---通俗理解(二)

    1.用Matlab进行傅立叶变换 FFT是离散傅里叶变换的高速算法,能够将一个信号变换到频域.有些信号在时域上是非常难看出什么特征的,可是假设变换到频域之后,就非常easy看出特征了.这就是非常多信号 ...

  3. Matlab实现Hough变换检测图像中的直线 分类: 图像处理 2014-06-14 22:07 641人阅读 评论(0) 收藏

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

  4. Hilbert-Huang Transform: matlab 希尔伯特-黄变换: matlab实现

    关于Hilbert-Huang的matlab实现,材料汇总,比较杂...感谢所有网络上的贡献者们:) 核心:以下代码计算HHT边际谱及其对应频率 工具包要求:G-Rilling EMD Toolbox ...

  5. 遗传算法MATLAB工具包简介

    下面介绍的函数都是Sheriffed大学遗传算法工具包内的常用函数 复制矩阵 B=rep(A,RepN) 1 A表示要被复制的矩阵,RepN包含每个方向的复制次数,RepN(1)代表纵向复制次数,Re ...

  6. MATLAB与三大变换

    运行 Simulink 有三种方式: z 在 MATLAB 的命令窗口直接键入“Simulink”并回车: z 单击 MATLAB 工具条上的 Simulink 图标: z 在 MATLAB 菜单上选 ...

  7. Matlab 中 arburg 函数的理解与实际使用方法

    1. 理解 1.1 Matlab 帮助: a = arburg(x,p)返回与输入数组x的p阶模型相对应的归一化自回归(AR)参数. 如果x是一个向量,则输出数组a是一个行向量. 如果x是矩阵,则参数 ...

  8. OpenGL模型视图变换、投影变换、视口变换的理解

    OpenGL中不设置模型,投影,视口,所绘制的几何图形的坐标只能是-1到1(X轴向右,Y轴向上,Z轴垂直屏幕向外). 产生目标场景的过程类似于用照相机进行拍照: (1)把照相机固定在三角架上,并让他对 ...

  9. matlab中cell array的理解

    1. matlab中有一个函数iscell() 用于判断一个数组是不是cell array 参考:MATLAB Function Reference iscell Determine whether ...

随机推荐

  1. Knative Serving 健康检查机制分析

    作者|  阿里云智能事业群技术专家牛秋霖(冬岛) 导读:从头开发一个Serverless引擎并不是一件容易的事情,今天咱们就从Knative的健康检查说起.通过健康检查这一个点来看看Serverles ...

  2. Oracle 相关操作SQL

    SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#,l.os_user_name,s.machi ...

  3. IndentationError: unindent does not match any outer indentation level笔记

    执行一个Python脚本的时候,报"IndentationError: unindent does not match any outer indentation level" 错 ...

  4. group:状压dp,轮廓线

    神仙题.但是难得的傻孩子cbx没有喊题解,所以也就难得的自己想出来了一个如此神仙的题. 如果是自己想的,说它神仙是不是有点不合适啊..? 反正的确不好像.关键就在于这个标签.颓完标签就差不多会了. % ...

  5. KETTLE常见问题和优化

    1.创建MySQL空资源库报错问题:因为boolean类型的问题,Mysql中的boolean类型实际上保存为TINYINT,需要手动的修改生成资源库的sql脚本,将其中的插入用户ENABLED的值由 ...

  6. 谷歌Chrome浏览器无法安装插件的解决方法(本文干货!)

    这个问题困扰了我很久,作为小白学习可能会用到谷歌插件,奈何谷歌也太变态,国内的环境无法正常登录谷歌账户.无法访问应用商店,而Chrome主版本号大于66的只能从Chrome应用商店下载并安装插件,各种 ...

  7. 自己实现 aop 和 spring aop

    上文说到,我们可以在 BeanPostProcessor 中对 bean 的初始化前化做手脚,当时也说了,我完全可以生成一个代理类丢回去. 代理类肯定要为用户做一些事情,不可能像学设计模式的时候创建个 ...

  8. dianFanEditor Web在线编辑器

    个人很喜欢kodexplorer 的在线编辑器.苦于没有加载FTP目录的功能. 索性自己改造了一下,用.NET 做了几个WEB接口,用CEF3做浏览器内核,打包了在线地址做编辑器. 即可加载本地磁盘, ...

  9. PHP对象继承

    PHP对象继承<?php class foo{ public function printItem($string) { echo 'Foo: ' . $string . PHP_EOL; } ...

  10. 构建大型 Vue.js 项目的10条建议

    下面是我在开发大型 Vue 项目时的最佳实践.这些技巧将帮助你开发更高效.更易于维护和共享的代码. 今年做自由职业的时候,我有机会开发了一些大型 Vue 应用程序.我所说的这些项目,Vuex stor ...