为何 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 函数结果不同相关推荐

  1. matlab i型级联filter,Matlab中filter,conv,impz用法(最新整理)

    <Matlab中filter,conv,impz用法(最新整理)>由会员分享,可在线阅读,更多相关<Matlab中filter,conv,impz用法(最新整理)(5页珍藏版)> ...

  2. matlab运行dxcv,MATLAB imresize 函数和 OpenCV resize 函数结果不同

    为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同?今年 4 月,我在依照 MATLAB 代码自己写一个卷积神经网络 C++ 实现的过程中,就发现了这个问题,不过那 ...

  3. matlab imresize算法详解,为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同

    为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同?今年 4 月,我在依照 MATLAB 代码自己写一个卷积神经网络 C++ 实现的过程中,就发现了这个问题,不过那 ...

  4. matlab输入指令错误怎么修改,在MATLAB中运行程序时,显示错误: 此上下文中不允许函数定义。 怎么修改?...

    点击查看在MATLAB中运行程序时,显示错误: 此上下文中不允许函数定义. 怎么修改?具体信息 答:MATLAB程序运行错误后,切换到MATLAB命令行中,观察命令行中的错误信息,确定错误原因. 1. ...

  5. matlab中的plot的用法

    文章目录 画单个带点的黑色实线: 在一张图片里绘制多副可以使用subplot命令: 标题使用title()命令 图片叠加 hold on,box on;用法 matlab中的plot的用法 画单个带点 ...

  6. matlab中e用什么表示什么,matlab中e怎么表示

    方法/步骤 1.自然数对数 log(x) 我们在MATLAB主窗口中输入a1=log(2.7183),回车,我们可以看到a1近似为1,e约等 于2. MATLAB中 如何输入对数函数? 方法/步骤 1 ...

  7. fname什么意思matlab,matlab中f(:,1)是什么意思 matlab中f(:,:,3)是什么意思?

    导航:网站首页 > matlab中f(:,1)是什么意思 matlab中f(:,:,3)是什么意思? matlab中f(:,1)是什么意思 matlab中f(:,:,3)是什么意思? 相关问题: ...

  8. matlab中 y =ft(x)的意思,matlab中y=fft(x)语句的意思

    matlab傅里叶变换中fft(x,n),x,n分别是什么含义? fft(x,n)是一维快速傅里叶变换,x相当于信号,n是变换点数.离散傅里叶变换DFT的快速算法就是FFT. matlab中FFT函数 ...

  9. matlab中switch算工资,switch语句matlab

    matlab中switch语句的用法例子 if-else-end语句所对应的是多重判断选择,而有时也会遇到多分支判断选择的问题. MATLAB语言为解决多分支判断选择提供了switch-case语句. ...

最新文章

  1. Azure 服务管理 Cmdlet(1)
  2. ActionScript 3.0 Step By Step系列(三):学学流程控制,编编if-else switch while for
  3. MATLAB无穷大上的反常积分
  4. 【labelme】改造labelme
  5. ServiceNow 中关于UI Action 在portal端的使用
  6. 从案例角度解析建模平台动态规则引擎
  7. java truevfs_Java-Apache Commons VFS:使用FTP
  8. ios 贝塞尔曲线 颜色填充_iOS贝塞尔曲线(UIBezierPath)的基本使用方法
  9. 黑客可利用超声波秘密控制语音助手设备
  10. Linux-iptables初识
  11. Latex中参考文献排序
  12. 多元统计分析朱建平pdf_应用多元统计分析 朱建平.pdf
  13. 配置sdk的环境变量
  14. 【VHDL】四位全减器
  15. Equinox 和 OSGI 介绍
  16. 如何将Nios II硬件和软件合成一个文件(NIOS II)烧进EPCS falsh
  17. Ant design Vue 如何在a-table表格标题/内容上添加一个按钮
  18. Postek博思得打印机
  19. [POI2008]MAF-Mafia
  20. 令人心酸至极的100个微瞬间

热门文章

  1. paperclip的id partition功能还是相当的给力,省得我们实现了,这个功能之前连想都没想到,...
  2. Linux/Unix环境下的make和makefile详解
  3. Python网络爬虫实战:天猫胸罩销售数据分析
  4. 对Web页面元素的绝对唯一引用方法
  5. NodeJS API简介
  6. No-PDO-Models-MySQL数据库层抽象类
  7. 2.2 Java的基本数据类型
  8. 程序员的十层楼   (1)
  9. Atlas Samples Suse Linux 10.1
  10. 12个不可不知的Sublime Text应用技巧和诀窍