curvelet变换的理解

article/2025/10/13 1:18:56

一、matlab下curvelet工具包配置

  1. 首先在curvelet官方网站下载curvelet工具包,解压,其中包含了matlab与C语言两种实现的版本。
    curvelet文件结构
  2. 打开matlab,点击set path,选择“添加并包含子文件夹”,将有关的matlab代码,即fdct_usfft_matlab、fdct_wrapping_matlab、mecv三个文件夹添加到matlab路径中。
  3. 点击保存,设置完毕。

二、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, 2004

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);

示例代码流程:
* 首先创建了一副空图像,对其进行DCT变化,得到其系数C(可以理解为一个四维矩阵,由于每个二维矩阵维度不同,故使用cell数据结构),当然C中的元素全为0。
* 之后将其尺度s、角度为w的二维矩阵 C{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} C { 1 } 121*21
Detail C{2} C { 2 } 1618*22 16*22 22*18 22*16
C{3} C { 3 } 3234*22 32*22 22*32 22*34
C{4} C { 4 } 3267*44 64*43 64*44 44*64 43*64 44*67
C{5} C { 5 } 64131*44 128*43 128*44 44*128 43*128 44*131
Fine C{6} C { 6 } 1512*512

2.2 尺度数s的影响

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

2.2 角度数w的影响

下图显示了对图像做C = fdct_wrapping(X,0,2,6,16);变换后, s=5w=1:10:60 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; C { 5 } { 1 } ( a , b ) = 1 ; ,a b取值变化时所对应空间域与频率域的图像,可以看出:
a b的改变并不会对频率域图像造成影响,而在空间域上“针”状物体会根据a b的值发生相应的位移

3 curvelet的性质

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

http://chatgpt.dhexx.cn/article/TsFGuxBa.shtml

相关文章

java几何画板_geogebra几何画板下载

geogebra几何画板官方版是一款功能十分强大、非常专业的理科几何绘制工具,使用geogebra几何画板官方版您可以在上面画点、向量、线段、直线、多边形、圆锥曲线,甚至是函数以图像的形式呈现到您眼前。geogebra几何画板最新版是款非常不错的软件。 基本简介…

如何远程连接SQL Server数据库

一.设置客户端网络实用工具 点击“开始”-“程序”,在“Microsoft SQL Server”菜单中选择“客户端网络实用工具”。 在“别名”选项中点击“添加”。 在“服务器别名”中,填入您网站域名,在“网络库”区域中点击“TCP/IP”,在…

连接远程Mysql数据库

一、运行环境 数据库:Mysql 数据库所在系统:Linux(Ubuntu) IDE:PyCharm 测试环境:windows10 二、相关配置 1. 切换root用户权限 >> sudo -s2. 修改数据库配置 >> sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf #…

如何配置SQL Server数据库远程连接

本地数据库(SQL Server 2012或以上) 连接外网服务器的数据库,外网的服务器端需要做如下配置: 1、首先是要打开 数据的配置管理工具 2、配置相关的客户端协议,开启TCP/IP 3、数据库默认的远程端口是 1433(不…

远程连接服务器MySQL数据库

1.添加腾讯云安全组规则的MySQL 3306端口,设置相应的安全组规则。 规则设置,例如 2.参考另一篇博客。。。mysql数据库开启远程访问 设置完权限后 3.mysql配置my.cnf 是否不允许外网访问 [rootVM_71_45_centos ~]# vim /etc/my.cnf 找到里面bind-addre…

如何连接远程服务器上的数据库

远程服务器上切换root权限:sudo su root 远程服务器上检查防火墙是否对外开放3306端口:firewall-cmd --query-port3306/tcp 若为false则命令行开放端口:firewall-cmd --add-port3306/tcp 本地再次检查端口是否开放成功:telnet &l…

数据库远程连接

需求介绍 本地项目是SpringBoot项目要连接远程windows服务器上的mysql数据库。 实现步骤 1. 在windows服务器上下载与配置MySQL 1.1下载MySQL 可以在本地下载好后复制到远程服务器上,我是这样干的,服务器上下载太慢了 1.2配置MySQL 配置MySQL是为了…

远程连接sql数据库

[注] up使用sql 2012数据库较多,在这里就拿sql数据库来举例,其他的应该是类比。远程登录时建议使用sa登录,或者新建一个用户去登录sql(网站参考过一些博主,基本都是用sa或者其他用户名登录)。 1、sql数据的…

Mysql 连接远程数据库

一、改表 首先将mysql数据库中的user表中的数据看一下 select host,user from mysql.user; 可以看到root用户只允许localhost登录 我们需要更改一下 update mysql.user set host‘%’ where user‘root’; 更改好了之后再次查看发现已经变了,但是需要注意的是这种方…

java连接远程服务器上的数据库(MySQL)

1. 服务器上的准备工作 Linux服务器上下载并安装mysql服务 输入命令安装mysql服务:#yum install mysql-server即可联网安装mysql服务器输入指令开启mysql服务:#service mysqld start初始化mysql:#mysql_secure_installation接下来的一连串指令只要按照提示输入 y/n并且配置好密…

如何远程连接MySQL数据库

新安装的 MySQL 只有一个 root 用户,默认不开启远程连接。下面以 Ubuntu 系统下的 MySQL 为例,说明如何远程连接 MySQL 数据库。 登录 root 用户 mysql -uroot -pyongdu查看 mysql 数据库中的所有表 mysql> show databases; -------------------- |…

远程连接数据库

Windows系统(远程方) Windows系统功能 1. 启动telnet客户端 需要启动 telnet客户端( 安装完,最好重启电脑 ) telnet 连通性测试: Win r -> cmd -> Telnet www.baidu.com 80 回车后:出现…

远程连接SQL server 数据库

开发工具与关键技术: ssms SQL 作者:GuanLW 撰写时间:2022/3/28 第一步:打开电脑的防火墙,在高级设置里面添加入站和出站规则(控制面板>系统和安全>Windows defender防火墙>高级设置&#xff…

如何远程连接SQLServer数据库

如何远程连接SQLServer数据库 准备工作 1.打开 选中如下的连接方式 连接成功后就会出出现 2.连接成功后:右键设置属性 安全性设置:如下图所示 设置连接属性: 设置完成之后点击完成!!! 3.打开 启动sqlSe…

Java远程连接数据库——远程连接MySQL数据库,操作和管理MySQL数据库

目录 Java与MySQL 1.MySQL远程连接情况 1.1.查看权限情况 1.2.Java连接情况 2.MySQL远程连接设置 2.1.IP地址开放设置 2.2.开放3306端口 3.总结 Java与MySQL 上一篇笔记已经写好了MySQL的安装使用与Java连接MySQL的操作,但那仅仅是本地连接,我们都…

如何远程连接数据库

大家在本地连接自己的数据库可能没有问题,但当服务器的时候就需要远程连接了,那么如何能够让远程的数据库被我们访问到呢,接下来就具体执行一下相关的操作,以我的为例,连接虚拟机中的数据库,操作系统是linu…

十行代码编写一个Python小游戏,你准备好了吗?

准备好了吗?我们即将开始激动人心的游戏编程之旅。 或许你之前学习过一点编程,但若是你从没接触过游戏编程,那么你仍然会对游戏程序的运行感到不解。游戏程序不像计算一个公式或谜题,得到答案之后程序就结束了,游戏程序…

python小游戏实现代码

早上逛CSDN首页就见到这么一篇教程。看了一下很有意思,就马上动手实现了一下。看看效果吧: 完整代码: # -*- coding: utf-8 -*- # 1 - Import library import pygame from pygame.locals import * import math import random # 2 - Initialize the game keys = [False, Fals…

python简单小游戏代码教程,Python简单小游戏代码

球球各位大神怎么用python写一个猜词小游戏的代码? key input(请输入一个单词:)description input(输入单词描述:)chance 5mark 5print(现在开始游戏)print(description \t 这是单词的描述,请你输入这个单词: )for i in ra…