博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MATLAB imresize 函数和 OpenCV resize 函数结果不同
阅读量:7109 次
发布时间:2019-06-28

本文共 1432 字,大约阅读时间需要 4 分钟。

hot3.png

为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同?今年 4 月,我在依照 MATLAB 代码自己写一个卷积神经网络 C++ 实现的过程中,就发现了这个问题,不过那时问题不是太大,所以也没有给出太多关注。今天在 stackoverflow 上正好看到了一个相关问题,解答了我心中的疑惑。这篇的文章主要内容是将这个 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<<"Before: A = "<<

但是,在把矩阵缩小的时候,却出现了结果不一样:

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<<"resize smaller: A = "<<

这是为什么呢?原因在于 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<<"Before: A = "<
<

本文是开源项目 OpenCV-and-CPP-for-MATLAB-Users 文档的一部分,更多的文章和完整代码请移步项目的 Github主页。

转载请注明出处。感谢简书作者 YimianDai分享

转载于:https://my.oschina.net/u/1046919/blog/726437

你可能感兴趣的文章
Redis和Memcached的区别
查看>>
【C#入门经典(第五版)】第二章 编写C#程序
查看>>
Cisco交换机密码破解方法
查看>>
Android中怎么启动关闭Service及功能解释
查看>>
【Python基础 06】运算符
查看>>
inux访问控制的流程-tcp_wrappers讲解
查看>>
DNS域名解析过程 五月的仓颉
查看>>
查看linux 版本
查看>>
2017-3-27日碎碎念
查看>>
ORACLE 归档模式
查看>>
OFFICE 2007 SP3后续补丁微软官方下载地址
查看>>
zabbix监控redis多实例
查看>>
"Volume Shadow Copy Service" error
查看>>
crontab 计划任务 linux计划任务基本
查看>>
18.存储过程--SQL
查看>>
我的友情链接
查看>>
ISA Server签名
查看>>
C# C/S 图片验证码功能源码
查看>>
SCVMM 2012 SP1 安装与配置指南(一)概述
查看>>
在eclipse中使用断言Assert
查看>>