C++实现离散余弦变换(参数为Eigen矩阵) 问题描述 昨天写了一个参数为二维指针为参数的离散余弦变换,虽然改进了参数为二维数组时,当数组大小不确定时声明函数时带来的困难,但使用指针作为参数也存在一些不足之处,比如需要手动寻址.容易出现指针越界等.因此这篇文章中的代码对昨天的代码做了进一步的改进,将函数的参数设置为Eigen矩阵,很好的避免了上述问题. DCT 代码的主体跟之前的代码没啥差别,主要就是改变了函数的参数类型 // DCT - Discrete Cosine Transform v…
C++实现离散余弦变换(参数为二维指针) 写在前面 到目前为止已经阅读了相当一部分的网格水印等方面的论文了,但是论文的实现进度还没有更上,这个月准备挑选一些较为经典的论文,将其中的算法实现.在实现论文的过程中,发现论文中有用到一些空域转频率域的算法.因此也就想到了实现一下离散余弦变换.虽然本文的代码和网上很多已有的代码很类似,思路都没有太多的差别,但是本文有一个比较重要的改进.具体的说,网上现有DCT算法输入的是一个固定的二维数组.当二维数组作为函数参数进行传递时,至少需要给出第二个维度的大小,…
图像处理中常用的正交变换除了傅里叶变换以外,还有一些其它常用的正交变换,其中离散余弦变换DCT就是一种,这是JPEG图像压缩算法里的核心算法,这里我们也主要讲解JPEG压缩算法里所使用8*8矩阵的二维离散余弦正变换. 一维离散余弦变换 一般表达式 要弄懂二维离散余弦变换,首先我们需要先了解它在一维下的情况,具体表达式如下: 式中F(u)是第u个余弦变换值,u是广义频率变量,u=1,2,….,N-1;f(x)是时域N点序列.x= 1,2,….,N-1; 矩阵表示法 更为简洁的定义离散余弦变换是采用…
原理: 离散余弦变换(DCT for Discrete Cosine Transform)是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(DFT for Discrete Fourier Transform),但是只使用实数.离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为一个实偶函数的傅里叶变换仍然是一个实偶函数),在有些变形里面需要将输入或者输出的位置移动半个单位(DCT有8种标准类型,其中4种是常见的). 使用场景: 离散余弦变换…
Matlab进行矩阵填充时可以填充空矩阵,相当于空矩阵不存在,例如一下代码: P_RES = [ P_xv P_xvy P_xv*dy_dxv'; P_yxv P_y P_yxv*dy_dxv'; dy_dxv*P_xv dy_dxv*P_xvy dy_dxv*P_xv*dy_dxv'+... dy_dhd*Padd*dy_dhd']; 结果是可行的. 而使用C++ Eigen时,使用的填充代码是这样的:     Eigen::MatrixXf  P13,P23,P33,P31,P32;   …
最近为了在C++中使用矩阵运算,简单学习了一下Eigen矩阵库.Eigen比Armadillo相对底层一点,但是只需要添加头文库即可使用,不使用额外的编译和安装过程. 基本定义 Matrix3f是3*3矩阵,MatrixXf表示矩阵维数不确定,MatrixXf m(3,4)表示3*4矩阵. 'MatrixXd是double型,MatrixXf是float`型. 列优先和行优先 Eigen中存储Matrix用的是column-major,但是初始化赋值的时候是row-major Matrix3d…
// // Created by qian on 19-7-16. // /* 相机位姿用四元数表示 q = [0.35, 0.2, 0.3, 0.1] x,y,z,w * 注意:输入时Quaterniond(w,x,y,z) W 在前!!! * 实现:输出四元素对应的旋转矩阵,旋转矩阵的转置, * 旋转矩阵的逆矩阵,旋转矩阵乘以自身的转置,验证旋转矩阵的正交性 * Vector3.normalized的特点是当前向量是不改变的并且返回一个新的规范化的向量: * Vector3.Normaliz…
1 矩阵基本运算简介 Eigen重载了+,-,*运算符.同时提供了一些方法如dot(),cross()等.对于矩阵类的运算符重载只支持线性运算,比如matrix1*matrix2是矩阵相乘,当然必须要满足矩阵乘法规则.对于向量和标量的加法(vector+scalar)这里并不支持,关于非线性运算这里暂不介绍. 2 加减运算 矩阵加减运算中必须要保证左右矩阵的行列对应相等.此外更重要的一点是,矩阵的类型也必须一致,这里的矩阵运算并不支持隐式的类型转换.矩阵运算中重载的运算符有: 二元运算符+:a+…
在您阅读本文前,先需要告诉你的是:即使是本文优化过的算法,DCT去噪的计算量依旧很大,请不要向这个算法提出实时运行的苛刻要求. 言归正传,在IPOL网站中有一篇基于DCT的图像去噪文章,具体的链接地址是:http://www.ipol.im/pub/art/2011/ys-dct/,IPOL网站的最大特点就是他的文章全部提供源代码,而且可以基于网页运行相关算法,得到结果.不过其里面的代码本身是重实现论文的过程,基本不考虑速度的优化,因此,都相当的慢. 这篇文章的原理也是非常简单的,整个过程就是进…
最近需要用 C++ 做一些数值计算,之前一直采用Matlab 混合编程的方式处理矩阵运算,非常麻烦,直到发现了 Eigen 库,简直相见恨晚,好用哭了. Eigen 是一个基于C++模板的线性代数库,直接将库下载后放在项目目录下,然后包含头文件就能使用,非常方便.此外,Eigen的接口清晰,稳定高效.唯一的问题是之前一直用 Matlab,对 Eigen 的 API 接口不太熟悉,如果能有 Eigen 和 Matlab 对应的说明想必是极好的,终于功夫不负有心人,让我找到了,原文在这里,不过排版有…