Matlab中psf2otf()函数在opencv中的实现
在Matlab中有个psf2otf()函数,可以将小尺寸的点扩散函数,扩大尺寸,并作二维傅里叶变换,opencv中没有这个函数,所以编了这么个函数:
/*****************************
Mat psf2otf(const Mat&psf, Size outSize=Size(3,3))
参数说明:
psf——输入的点扩散函数;
outSize——是输出otf的尺寸;
在本程序中,还调用了circShift()函数,该函数具体参见:
http://www.cnblogs.com/phoenixdsg/p/8425336.html
本程序中,还调用了mymax()函数和myMagnitude()函数,难度不大自己想办法吧。
*******************************/
下面是psf2otf()函数的定义:
{
Mat otf;
if(countNonZero(psf)&&!psf.empty())
{
Size psfSize=psf.size();
Size paddSize=outSize-psfSize;
copyMakeBorder(psf,otf,paddSize.height/,paddSize.height/,
paddSize.width/ ,paddSize.width/,
BORDER_CONSTANT,Scalar());
circShift(otf,-otf.size().height/,-otf.size().width/);
otf=fft(otf);
//计算psf的元素个数
int nElem=psf.cols*psf.rows;
double nOps=;
int nfft=nElem/psfSize.width;
nOps +=nfft+psfSize.width*log2(psfSize.width)*nfft;
nfft=nElem/psfSize.height;
nOps +=nfft+psfSize.width*log2(psfSize.height)*nfft;
//将复数otf分解成实部real和虚部imagin
Mat planes[];
split(otf,planes);
double imagin_max=mymax(abs(planes[]));
double mag_max=mymax(myMagnitude(otf));
if((imagin_max/mag_max)<eps)
return planes[];
}
return otf;
}
下面是对该函数的测试程序:
int main()
{
Mat mat=(Mat_<double>(,)<<
,-,,
-,,-,
,-,);
Mat otf=psf2otf(mat);
cout<<otf<<endl;
return ;
}
输出结果如下:

Matlab中psf2otf()函数在opencv中的实现的更多相关文章
- python中的函数存入list中的实例
最近由于接触了python这个强大的东西,在写代码时考虑到代码的扩展性,就想到了将python的函数名存入list中.有点像习惯的c/c++中的函数指针的意思. 下面上代码: # coding=utf ...
- JavaScript中的函数和C#中的匿名函数(委托、lambda表达式)
在js中function是一个一个引用类型,所以可以出现这样的代码: 'use strict'; var compare=function(value1, value2) { if (value1&l ...
- C++结构体中使用函数与类中使用函数小结
#include <iostream>#include <string.h>using namespace std;struct stud//学生信息结构体{ char ...
- shell中的函数、shell中的数组、告警系统需求分析
7月16日任务 20.16/20.17 shell中的函数20.18 shell中的数组20.19 告警系统需求分析 20.16/20.17 shell中的函数 函数就是一个子shell就是一个代码段 ...
- Linux centosVMware shell中的函数、shell中的数组、
一.shell中的函数 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可. 格式: function _name() { command ...
- 解决python中write()函数向文件中写中文时出现乱码的问题
今天看<python编程从入门到实践>的第10章文件.异常,在做练习的时候,向文件中写内容,但是写中文就不行,后来在百度上查了众多资料,解决方法如下: 解决:在open()函数中添加一个e ...
- mysql中UNIX_TIMESTAMP()函数和php中time()函数的区别
http://tech.ddvip.com/2009-01/1231392775105351.html mysql 中:UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date) 若 ...
- js中test()函数在正则中使用
test() 方法用于检测一个字符串是否匹配某个模式. 返回一个 Boolean 值,它指出在被查找的字符串中是否匹配给出的正则表达式. regexp.test(str) 参数 regexp 必选项. ...
- QT中使用 slot 传递 opencv 中得Mat对象以及 使用多线程集成开源代码。
关于 slot传递 Mat 对象 以前一直是使用 Qtimer 定时器,设定超时后读取 dialog 对象的 Mat成员实现在 UI 里显示图像,发现这样对以后集成其他面向过程的代码增加了复杂度. 所 ...
随机推荐
- MyBatis-02-第一个Mybatis程序
2.第一个Mybatis程序 思路:搭建环境-->导入Mybatis-->编写代码-->测试! 2.1.搭建环境 搭建数据库 CREATE DATABASE `mybatis`; u ...
- angular8 集成swiper, 并将swiper封装成公共组件
安装Swiper npm install swiper --save 或者 yarn add swiper --save 在angular.json文件添加swiper.js和swiper.css ...
- 【洛谷P2387】魔法森林
题目大意:给定一个 N 个点,M 条边的无向图,边有两个边权 a, b,求从 1 号节点到 N 号节点路径的两个权值和的最大值最小是多少. 题解: 对于有两个属性的结构的最优化问题,可以考虑先按照其中 ...
- Oracle之:Function :strFormatDate()
create or replace function strFormatDate(i_datestr in varchar2) return date is begin if i_datestr is ...
- 题解 【NOIP2016】魔法阵
[NOIP2016]魔法阵 Description 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法量. 大魔法师有m个魔法物品,编号分别为1,2,...,m.每个物品具有一个魔法 ...
- oracle rowtype
v_customer customerinfo%rowtype; select * into v_customer from customerinfo where guid = v_loan.cust ...
- SQL Server代码的一种学习方法
使用SQL Server Management Studio的操作过程中,界面上方都可以生成sql脚本代码. 如新建数据库时: CREATE DATABASE [db_New] ON PRIMARY ...
- 获取网卡速率,cpu使用率
];//获取网卡名称 PerformanceCounter NetworkR = new PerformanceCounter("Network Interface", " ...
- yolov3 in PyTorch
https://github.com/ultralytics/yolov3 Introduction简介 This directory contains PyTorch YOLOv3 software ...
- BZOJ 4388 [JOI2012春季合宿]Invitation (线段树、二叉堆、最小生成树)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4388 题解 模拟Prim算法? 原题所述的过程就是Prim算法求最大生成树的过程.于是我 ...