opencv c++实现MATLAB otf2psf函数

这篇博客介绍了如何在C++中利用OpenCV实现MATLAB的otf2psf函数,该函数是傅里叶变换的逆过程,通过逆傅里叶变换和矩阵位移来完成。作者提供了具体的代码实现,并指出此过程与psf2otf函数的位移次数不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

psf2otf函数和otf2psf函数

在使用Opencv做傅里叶变换(FFT)的时候,经常会用到MATLAB中的psf2otf函数otf2psf函数,关于psfotf 的含义可参考MATLAB官网。psf2otf函数已经有很多博主实现,可参见C++实现Matlab的psf2otf函数基于C++的psf2otf实现 两篇优秀的博文。

由于自己还用到了MATLAB中的otf2psf函数,于是自己实现了,C++的运行结果和MATLAB中的函数运行结果一致。

otf2psf函数的实现

otf2psf函数的实现正好是psf2otf函数的逆过程,所以函数实现过程为:

  1. 采用逆傅里叶变换函数ifft,将otf还原为psf(中心点还需移动)
  2. 然后循环移动psf矩阵的值向上(或向左),直到中心像素到达(0,0)位置

需要强调的是,psf2otfotf2psf循环移动的次数不同。psf2otf的移动次数为:psf.size/2;otf2psf的移动次数为:psf.size/2+1

具体代码(opencv3)


Mat otf2psf(Mat otf, Size size)
{
   
	Mat planes[] = {
    Mat(otf.size(), CV_32F), Mat(otf.size(), CV_32F
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值