matlab中imresize函数的用法,为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同
为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同?今年 4 月,我在依照 MATLAB 代码自己写一个卷积神经网络 C++ 实现的过程中,就发现了这个问题,不过那时问题不是太大,所以也没有给出太多关注。今天在 stackoverflow 上正好看到了一个相关问题 why OpenCV cv2.resize gives different answer than MATLAB imresize?,解答了我心中的疑惑。这篇的文章主要内容是将这个 stackoverflow 问题做了注解,并将部分代码由 Python 翻译成 C++。
首先我们可以看到,在变大的时候,MATLAB 和 OpenCV 有一样的结果:
x = imresize([1,2;3,4],[4,4],'bilinear')
% x =
% 1.0000 1.2500 1.7500 2.0000
% 1.5000 1.7500 2.2500 2.5000
% 2.5000 2.7500 3.2500 3.5000
% 3.0000 3.2500 3.7500 4.0000
double data[] = {1, 2, 3, 4};
cv::Mat A(2, 2, CV_64FC1, data);
std::cout<
cv::resize(A, A, cv::Size(4, 4), cv::INTER_LINEAR);
std::cout<
// [1, 1.25, 1.75, 2;
// 1.5, 1.75, 2.25, 2.5;
// 2.5, 2.75, 3.25, 3.5;
// 3, 3.25, 3.75, 4]
但是,在把矩阵缩小的时候,却出现了结果不一样:
imresize(x,[2,2],'bilinear')
% ans =
% 1.5625 2.1875
% 2.8125 3.4375
cv::resize(A, A, cv::Size(2, 2), cv::INTER_LINEAR);
std::cout<
// [1.375, 2.125;
// 2.875, 3.625]
这是为什么呢?原因在于 MATLAB 的 imresize 函数默认是开启了 anti-aliasing,将其关闭,结果就跟 C++ 一样了:
imresize(x,[2,2],'bilinear','AntiAliasing',false)
% ans =
% 1.3750 2.1250
% 2.8750 3.6250
那么问题来了,怎么让 OpenCV 做到 MATLAB imresize 函数的 anti-aliasing 功能呢?这个问题,留待日后解决。本文具体代码可见 OpenCV-and-CPP-for-MATLAB-Users Demo_OpenCVFunctions 文件夹下的 demo_resize.cpp 函数,为了方便起见,将代码陈列如下:
#include
#include
void demo_resize()
{
double data[] = {1, 2, 3, 4};
cv::Mat A(2, 2, CV_64FC1, data);
std::cout<
cv::resize(A, A, cv::Size(4, 4), cv::INTER_LINEAR);
std::cout<
cv::resize(A, A, cv::Size(2, 2), cv::INTER_LINEAR);
std::cout<
}
转载请注明出处。
matlab中imresize函数的用法,为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同相关推荐
- matlab i型级联filter,Matlab中filter,conv,impz用法(最新整理)
<Matlab中filter,conv,impz用法(最新整理)>由会员分享,可在线阅读,更多相关<Matlab中filter,conv,impz用法(最新整理)(5页珍藏版)> ...
- matlab运行dxcv,MATLAB imresize 函数和 OpenCV resize 函数结果不同
为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同?今年 4 月,我在依照 MATLAB 代码自己写一个卷积神经网络 C++ 实现的过程中,就发现了这个问题,不过那 ...
- matlab imresize算法详解,为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同
为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同?今年 4 月,我在依照 MATLAB 代码自己写一个卷积神经网络 C++ 实现的过程中,就发现了这个问题,不过那 ...
- matlab输入指令错误怎么修改,在MATLAB中运行程序时,显示错误: 此上下文中不允许函数定义。 怎么修改?...
点击查看在MATLAB中运行程序时,显示错误: 此上下文中不允许函数定义. 怎么修改?具体信息 答:MATLAB程序运行错误后,切换到MATLAB命令行中,观察命令行中的错误信息,确定错误原因. 1. ...
- matlab中的plot的用法
文章目录 画单个带点的黑色实线: 在一张图片里绘制多副可以使用subplot命令: 标题使用title()命令 图片叠加 hold on,box on;用法 matlab中的plot的用法 画单个带点 ...
- matlab中e用什么表示什么,matlab中e怎么表示
方法/步骤 1.自然数对数 log(x) 我们在MATLAB主窗口中输入a1=log(2.7183),回车,我们可以看到a1近似为1,e约等 于2. MATLAB中 如何输入对数函数? 方法/步骤 1 ...
- fname什么意思matlab,matlab中f(:,1)是什么意思 matlab中f(:,:,3)是什么意思?
导航:网站首页 > matlab中f(:,1)是什么意思 matlab中f(:,:,3)是什么意思? matlab中f(:,1)是什么意思 matlab中f(:,:,3)是什么意思? 相关问题: ...
- matlab中 y =ft(x)的意思,matlab中y=fft(x)语句的意思
matlab傅里叶变换中fft(x,n),x,n分别是什么含义? fft(x,n)是一维快速傅里叶变换,x相当于信号,n是变换点数.离散傅里叶变换DFT的快速算法就是FFT. matlab中FFT函数 ...
- matlab中switch算工资,switch语句matlab
matlab中switch语句的用法例子 if-else-end语句所对应的是多重判断选择,而有时也会遇到多分支判断选择的问题. MATLAB语言为解决多分支判断选择提供了switch-case语句. ...
最新文章
- Azure 服务管理 Cmdlet(1)
- ActionScript 3.0 Step By Step系列(三):学学流程控制,编编if-else switch while for
- MATLAB无穷大上的反常积分
- 【labelme】改造labelme
- ServiceNow 中关于UI Action 在portal端的使用
- 从案例角度解析建模平台动态规则引擎
- java truevfs_Java-Apache Commons VFS:使用FTP
- ios 贝塞尔曲线 颜色填充_iOS贝塞尔曲线(UIBezierPath)的基本使用方法
- 黑客可利用超声波秘密控制语音助手设备
- Linux-iptables初识
- Latex中参考文献排序
- 多元统计分析朱建平pdf_应用多元统计分析 朱建平.pdf
- 配置sdk的环境变量
- 【VHDL】四位全减器
- Equinox 和 OSGI 介绍
- 如何将Nios II硬件和软件合成一个文件(NIOS II)烧进EPCS falsh
- Ant design Vue 如何在a-table表格标题/内容上添加一个按钮
- Postek博思得打印机
- [POI2008]MAF-Mafia
- 令人心酸至极的100个微瞬间