基于OpenCV的离散哈特莱变换
来源:互联网 发布:网络微信图片发不出去 编辑:程序博客网 时间:2024/06/10 07:35
离散哈特莱变换(Discrete Hartley Transform, DHT):
DHT公式给成正交变换的形式:
其中:
上面定义式中直接将定标因子写为1/N的开方,这样保证DHT的变换矩阵HN直接是正交矩阵:
观察发现矩阵HN不但是正交矩阵并且还是对称矩阵(转置与本身相等),因此逆矩阵与本身相等(正交矩阵的逆矩阵等于其转置),即DHT的逆变换与正变换形式相同。
DHT也有四种形式,上面给出的是第一种形式,其它参见维基百科【1】。
模仿离散余弦变换,正变换与逆变换相同:
下面是代码:
void MainWindow::on_pushButton_8_clicked(){ Mat img = imread("D:/Pic/2.jpg",0); Mat src(img.rows,img.cols,CV_64FC1); img.convertTo(src,CV_64FC1); Mat dst(src.rows,src.cols,CV_64FC1); double pi = 3.141592657; Mat tmp(200,200,CV_64FC1); int N = 200; for(int i=0;i<200;i++) for(int j=0;j<200;j++) { tmp.at<double>(j,i) = (double)(cos(2*pi*i*j/N)+sin(2*pi*i*j/N))*pow(1/N,1/2); } dst = tmp*src*tmp/45000; imshow("dst",dst); Plot* plot = new Plot(dst); //QGridLayout *grid = new QGridLayout(ui->frame); //grid->addWidget(plot,0,0); //plot->setTitle("3D"); plot->coordinates()->axes[X1].setLabelString("X(um)"); //只能写在这 plot->coordinates()->axes[Y1].setLabelString("Y(um)"); //设置坐标轴标签 plot->coordinates()->axes[Z1].setLabelString("Z(nm)"); plot->coordinates()->axes[Z2].setLabelString("Z(nm)"); plot->coordinates()->axes[Z3].setLabelString("Z(nm)"); plot->coordinates()->axes[Z4].setLabelString("Z(nm)"); double start,stop; //设置颜色条 plot->coordinates()->axes[Z1].limits(start,stop); plot->legend()->setLimits(start,stop);// plot->legend()->setAutoScale(true); plot->resize(700,600); plot->show(); //grid->~QGridLayout();}效果图:
结果说明:四周亮点属于低频信息,最后生成的图像没有把低频信息中心化,也没有将频谱用对数运算(网上信息表明:对数运算的作用是因为只有频谱的话不能突出图像的波动情况,加对数后可以放大波动。),代码只是测试一下离散哈特莱变换。
阅读全文
0 0
- 基于OpenCV的离散哈特莱变换
- 基于OpenCV的离散正弦变换
- openCV里的离散傅立叶变换
- 基于离散余弦变换的数字水印
- 基于Matlab的离散小波变换
- 基于Matlab的离散小波变换
- 基于OpenCV的傅里叶变换及逆变换
- 基于opencv的小波变换
- 基于opencv的仿射变换
- 基于opencv的小波变换
- 基于OpenCV的小波变换
- 基于OpenCV的傅里叶变换及逆变换
- 基于OpenCV的图像几何变换算法
- 基于opencv的一维Fourier变换
- 基于opencv的小波变换
- 基于opencv的小波变换
- 离散傅立叶变换——opencv实现
- Opencv实现离散小波变换小结
- linux bash command not found
- Fragment设计的工厂模式
- 集合框架
- 纯CSS实现从中间延展的下划线
- 向MySQL中插入表情符号
- 基于OpenCV的离散哈特莱变换
- 禁用windows 2008R2的恢复模式,防止服务器意外关机而进行恢复模式
- java获取使用mybatis刚插入数据的主键id
- has_secure_password可以使用在update上的原因
- Fragment的动态添加
- java.security.NoSuchAlgorithmException: AES KeyGenerator not available
- 2017全国信号处理技术应用大会暨2017中国信号处理技术工程师年会
- 【React Native开发】
- lua_rawget,lua_rawset,lua_rawgeti,lua_rawseti