c++下的小波变换方法

c++下小波变换没找到相关的库函数,自己懂的又不深入,所以在网上找到了开源代码,使用vs2013导入到了工程,也是颇费周折,现在记下来操作过程。

找到的小波变换的开源代码是:https://github.com/rafat/wavelib

里面也有帮助文档,但是使用vs2013导入到自己的工程下面,还是有点麻烦。

一、修改自己工程的属性

1.工程属性 –> 2.c/c++ –> 3.预编译头 –> 4.创建(Yc)修改为不使用预编译

二、增加头文件

1.工程属性 –> 2.c/c++ –> 3.常规 –> 4.附加包含目录。
将下载的wavelib的解压后的文件夹地址放入进来

三、使相关文件(.c,.h)工程可见

可以在工程下面新建一个文件夹,然后添加现有项,将wavelib文件夹中的src文件夹下的所有.c,.h都添加到工程里面

四、导入header文件

在工程相应的文件里,#include “src/wavelib.h”

最后

查看帮助文档,或者example下的示例。调用函数来完成用到的小波变换。

小波变换是一种时频分析方法,可以将信号分解成不同频率的子带,从而更好地理解信号的特征。下面是使用C++和OpenCV进行一维连续小波变换的示例代码: ```cpp #include <opencv2/opencv.hpp> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/core/utility.hpp> #include <iostream> #include <vector> #include <cmath> using namespace cv; using namespace std; // 小波变换函数 void wavelet(Mat& src, Mat& dst, int level) { Mat temp = src.clone(); for (int i = 0; i < level; i++) { int rows = temp.rows; int cols = temp.cols; Mat LL, LH, HL, HH; pyrDown(temp(Rect(0, 0, cols, rows)), LL); pyrDown(temp(Rect(0, rows / 2, cols, rows / 2)), LH); pyrDown(temp(Rect(cols / 2, 0, cols / 2, rows)), HL); pyrDown(temp(Rect(cols / 2, rows / 2, cols / 2, rows / 2)), HH); Mat LHHL; pyrUp(LH, LHHL, LL.size()); Mat HHLH; pyrUp(HL, HHLH, LL.size()); Mat HHLL; pyrUp(HH, HHLL, LL.size()); Mat LL_new; LL.copyTo(LL_new); for (int i = 0; i < LL.rows; i++) { for (int j = 0; j < LL.cols; j++) { LL_new.at<float>(i, j) = (LL.at<float>(i, j) + LHHL.at<float>(i, j) + HHLH.at<float>(i, j) + HHLL.at<float>(i, j)) / 4; } } temp = LL_new.clone(); } dst = temp.clone(); } int main() { // 生成测试信号 int N = 512; Mat signal(N, 1, CV_32FC1); for (int i = 0; i < N; i++) { signal.at<float>(i, 0) = sin(2 * CV_PI * i / 32) + sin(2 * CV_PI * i / 16); } // 进行小波变换 Mat dst; wavelet(signal, dst, 3); // 显示结果 Mat dst_show; normalize(dst, dst_show, 0, 255, NORM_MINMAX); dst_show.convertTo(dst_show, CV_8UC1); imshow("Wavelet Transform", dst_show); waitKey(0); return 0; } ``` 上述代码中,我们首先生成了一个长度为512的测试信号,然后调用wavelet函数进行小波变换,最后将结果进行归一化并显示出来。在wavelet函数中,我们使用了OpenCV自带的pyrDown和pyrUp函数进行了一维小波变换
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值