I am doing something about convolving images in Python and for sake of speed I chose opencv 2.4.9.

Opencv offers a way called filter2D to do this and here's its docs:http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=filter2d#filter2d

In docs, it says:

Convolves an image with the kernel.

But I have doubts(caused by something else) so I make some experiments on it:

First, I make a normal 3x3 matrix a using numpy as:

  [[ 1.,  5.,  0.],
[ 7., 2., 9.],
[ 2., 3., 4.]]

Then, I make a 2x2 matrix b as the cornel as:

>>> b

  [[ 1.,  2.],
[ 3., 4.]]

Finally, in order to make it clear to see difference between convolve and correlate, rotate b by 180 degree and b will look like:

  [[ 4.,  3.],
[ 2., 1.]]

Now, All pre-work is done. We could begin the experiment.

Step 1. Use scipy.ndimage.convolvendconv = ndimage.convolve(a, b, mode = 'constant')and ndconv is:

  [[ 35.,  33.,  18.],
[ 41., 45., 44.],
[ 17., 24., 16.]]

Convolution op will rotate b by 180 degree and do correlation using b on a. So ndconv[0][0] = 4*1+3*5+2*7+1*2 = 35, and ndconv[2][2] = 4*4+3*0+2*0+1*0 = 16

This result is correct.

Step 2. Use scipy.ndimage.correlatendcorr = ndimage.correlate(a, b, mode = 'constant')and ndcorr is:

  [[  4.,  23.,  15.],
[ 30., 40., 47.],
[ 22., 29., 45.]]

According to correlation's definition, ndcorr[0][0] = 1*0+2*0+3*0+4*1 = 4 because the border will expand by 0.

(Someone may be confused by the expandation's difference between conv and corr. It seems convolveexpand image in directions right and down while correlate in directions left and up.)

But this is not the point.

Step 3. Use cv2.filter2Dcvfilter = cv2.filter2D(a, -1, b) and cvfilter is:

  [[ 35.,  34.,  35.],
[ 41., 40., 47.],
[ 33., 29., 45.]]

If we ignore the border cases, we will find that what cv2.filter2D did is actually a correlation other than aconvolution! How could I say that?

because cvfilter[1..2][1..2] == ndcorr[1..2][1..2].

WEIRD, isn't it?

Could anyone be able to tell the real thing that cv2.filter2D do? Thanks a lot.

[CLPR] 卷积还是相关? - Opencv之filter2D探究的更多相关文章

  1. (原)使用intel的ipp库计算卷积及相关

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5462631.html 参考网址: https://software.intel.com/zh-cn/n ...

  2. 图像卷积、相关以及在MATLAB中的操作

    图像卷积.相关以及在MATLAB中的操作 2016年7月11日 20:34:35, By ChrisZZ 区分卷积和相关 图像处理中常常需要用一个滤波器做空间滤波操作.空间滤波操作有时候也被叫做卷积滤 ...

  3. [CLPR] 卷积神经网络的结构

    本文翻译自: http://www.codeproject.com/Articles/16650/Neural-Network-for-Recognition-of-Handwritten-Digi ...

  4. 相关与卷积(数字信号处理)的数学原理及 Python 实现

    数学原理 在数字信号处理中,相关(correlation)可以分为互相关(cross correlation)和自相关(auto-correlation). 互相关是两个数字序列之间的运算:自相关是单 ...

  5. opencv:图像卷积

    卷积基本概念 C++代码实现卷积 #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; u ...

  6. 13、OpenCV实现图像的空间滤波——图像平滑

    1.空间滤波基础概念 1.空间滤波基础 空间滤波一词中滤波取自数字信号处理,指接受或拒绝一定的频率成分,但是空间滤波学习内容实际上和通过傅里叶变换实现的频域的滤波是等效的,故而也称为滤波.空间滤波主要 ...

  7. OpenCV图像处理与视频分析详解

    1.OpenCV4环境搭建 VS2017新建一个控制台项目 配置包含目录 配置库目录 配置链接器 配置环境变量 重新启动VS2017 2.第一个图像显示程序 main.cpp #include< ...

  8. opencv笔记4:模板运算和常见滤波操作

    time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...

  9. SSE图像算法优化系列十一:使用FFT变换实现图像卷积。

    本文重点主要不在于FFT的SSE优化,而在于使用FFT实现快速卷积的相关技巧和过程. 关于FFT变换,有很多参考的代码,特别是对于长度为2的整数次幂的序列,实现起来也是非常简易的,而对于非2次幂的序列 ...

随机推荐

  1. hdu3374 kmp+最小表示法

    Give you a string with length N, you can generate N strings by left shifts. For example let consider ...

  2. ECharts学习(1)--toolbox(工具栏)

    1. toolbox:这是ECharts中的工具栏.内置有导出图片.数据视图.动态类型切换.数据区域缩放.重置五个工具. 2. toolbox中的属性,不包含五个工具.里面最主要的就是feature这 ...

  3. dubbo provider如何对invoker进行export

    如何把provider的invoker export出去:1)为原始对象加wrapper,生成invoker:2)给invoker加各种filter,启动监听服务:3)注册服务地址 以HelloSer ...

  4. MySql Server 5.7的下载及安装详细步骤

    1.下载安装包 1)找到官网下载地址(https://dev.mysql.com),选择downloads,找到windows

  5. learning docker steps(7) ----- docker registry 搭建

    参考: https://docs.docker.com/engine/reference/builder/ https://hub.docker.com/_/registry/ https://www ...

  6. 快速切题 poj3026

    感受到出题人深深的~恶意 这提醒人们以后...数字后面要用gets~不要getchar 此外..不要相信那个100? Borg Maze Time Limit: 1000MS   Memory Lim ...

  7. spring集成redis——主从配置以及哨兵监控

    Redis主从模式配置: Redis的主从模式配置是非常简单的,首先我们需要有2个可运行的redis环境: master node : 192.168.56.101 8887 slave node: ...

  8. Loom

    <iframe width="630" height="394" src="https://www.useloom.com/embed/a9d4 ...

  9. Influxdb简单实用操作

    新的infludb版本已经取消了页面的访问方式,只能使用客户端来查看数据 一.influxdb与传统数据库的比较 库.表等比较: influxDB 传统数据库中的概念 database 数据库 mea ...

  10. CS231n 斯坦福深度视觉识别课 学习笔记(完结)

    课程地址 第1章 CS231n课程介绍 ---1.1 计算机视觉概述 这门课的主要内容是计算机视觉.它是一门需要涉及很多其他科目知识的学科. 视觉数据占据了互联网的绝大多数,但是它们很难利用. --- ...