python验证数学原理_一起学opencv-python九(性能的测量和优化与图像处理的数学原理)...

4565fc505ef3fe840672789534f478c2.png

图像混合

其实用的就是cv2.addWeighted函数,前面也介绍过这个函数。不过首先得把图片的形状搞成一样的,这个画图可以做到。5b008a527dcac48b9ac68dae5a549fa0.png

接下来是一块比较重要的内容。

性能的测量和优化

参考

https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_core/py_optimization/py_optimization.html

首先是opencv中计算事件的函数,cv2.getTickCount,cv2.getTickFrequency,这两个函数要结合起来用。6cbefd759bb43b9ec8bf6a01681c1332.png

当然time模块或者timeit模块也可以,timeit模块更精细,这个我们在python学习那里已经掌握了,忘记的去考古即可。609ed036763fc23bc762d9d364e3c3f6.png

用的不是同一个图片,可以看到整个程序一共4.7s,有4.48s都花费在中值滤波上了。a98efa9b87a20d7dca5845a8105d584c.png

3a9373abce5c020450c90eda2ce8be7a.png

这个是因为没有在ipython环境下。4b0cf30826430a2bd4f258f6c68d2114.png

可能是安装anaconda的时候配置过了环境变量吧,直接输入ipython就可以进入了。ac7e5ade36ff976f9a1c5b6d2e5dcb76.png

关于ipython,推荐https://blog.csdn.net/ztf312/article/details/78677093和

https://blog.csdn.net/qq_31095335/article/details/52179599

ipython的tab补全确实是不错的哦。076d91f0247a5ecd90bf8d2a8f6c2e8c.png

58c53c0906cbfd4d71589032666e1526.png

有性能优化的时候每依次大概需要469,没有则需要476,这个差距不是太大。2d3c753f66144a966eacf210948ac1c7.png

看起来x*x和x**2的差距就比较大了。e793fd205bc7a4a598fb632551fc327e.png

视图和副本前面我们介绍过。ca490be876ed4aada9e38e2b185df6ae.png

53456b69669f485746c77dda9e680fe3.png

副本,视图和深拷贝的差距一目了然。6559bcfe2508699a75eca384b671ac10.png

图像处理的数学原理

参考了https://www.cnblogs.com/bithuaning/p/6924978.html

http://www.cnblogs.com/wuyuankun/p/4149499.html和

https://blog.csdn.net/chaipp0607/article/details/72236892?locationNum=9&fps=1

有一个很重要的概念叫做卷积。3fa82345fca36bc4db381d4edf655a8c.png

上面的式子表示的是一个离散卷积,因为是数字信号,这里的卷积其实是一个加权和。推荐到https://www.zhihu.com/question/22298352?rf=21686447去看一看。数学定义中的卷积是有连续的,那么求和号∑就变成了积分号,其实莱布尼兹设计积分号的时候就是把∑拉长。c3ac16b59d3c6b3be85a11da92e1a1cb.png

其实也是加权叠加嘛。1ca6af27b1b1fc1bd0385dd75e02e81b.png

我更习惯说是饱和而不是截断。卷积核的和为1,暂时想不出来比较好的证明方法。960740fea58a1b1cebaeeac78d29c64d.png

614c327236af091b357171c3045b3a6b.png

b341f3ef951d6cb0266f422059a0f5ee.png

080a48037c4d9e051b07dee6fe96628e.png

4ee43a24d4a6f54ec38949cb8371f963.png

平滑之后边界看起来比较模糊了。7491f312381ff202a115095c3c8d428e.png

e6a56093acc1167ae7690bf723769d80.png

e35b56303b29b1b5f18772ec32624272.png

b26009ff9d47361edade49b04a4a9708.png

76ce556138746fbd9fde8968b3e189a2.png

454b79dfc29d830bcebda15b7251a550.png

36a8e28afeb9ead4fb18061afbbd8094.png

关于边缘检测的原理:参考https://www.jianshu.com/p/2334bee37de5

里面太基础的数学我就不在这里重复了,我这里截图过来的都是我觉得需要一定解释的。c34e2ab31ac499471f1362dcbab33f80.png

这里没有把从G(x,y)到最后的图像的过程说清楚,参考https://blog.csdn.net/chaipp0607/article/details/54348624ad871536c6c39a157e567f01cb623fce.png

bec3428248deb7d7f62a3bb24cc101b8.png

也就是由G(x,y)到最后的图其实还有一个二值化或者说阈值化的过程,当计算出来的Gx或者Gy大于一定值的时候我们才认为这个像素点是一个边界。b61e3385768e2662f37fef073f858241.png

e7b61f697eef22c61754e0e23b8efb51.png

上面的差分都是用的后向差分,目的是为了让以x,y为中心包含的九宫格的元素包含进来。最后肯定是还要对这个结果进行一下阈值化。上面还是没有对数学很深入,我觉得我需要深入一下,参考了https://blog.csdn.net/u014485485/article/details/783645735e108d22f09ac463cbd553e92d1e9761.png

这个最后的结果是中间是-4的那个,那么-8的那个是怎么来的呢?其实用的是全微分而不是偏微分,下面我来演示一下过程,一阶差分用的是后向差分,也就是f(x,y)-f(x-1,y),而二阶差分用的是前向差分,也就是fx(x+1,y)-fx(x,y),目的还是为了包含的元素都在以x,y为中心的九宫格里面。a99896ba69aa9c339e52b6f86c47f9fc.png

最后化简出来就是中心为-8的那个。中间是-20的那个是把fxx和fyy前的系数变成2的结果,但是不知道为什么做,可能是要突出这两项二阶偏导吧。

两个缺点:

1.没有了边缘的方向信息;

2.双倍加强了噪声的影响1481d03fff0fb0373a90d1aaf8aa4943.png

25c5a5350ed0f7faf8e7a7f37400afab.png

c699bcad8f2d1afe18b1b6034e472e94.png

还有一些高斯和拉普拉斯的结合版:https://blog.csdn.net/u014485485/article/details/78364573ddfb766ea7554af4e3094cac2b1cf0c9.png

关于高斯模糊的原理:请参考http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html

我就不截图过来了。

想要再深入了解高斯模糊数学原理的:https://www.cnblogs.com/evennl/p/3894438.html

简单的说就是高斯分布函数的傅里叶变换还是均值为0的高斯分布函数,所以是低通滤波。但是数学是需要严谨的推导的,推导过程就在上面。5acdebbf00b4a174f77074d720d2e396.png

4fb9e60e2a84d77784bded33ec5ecbc5.png

11f6de43bb0f7ba4ac9fa1a2e307e2bb.png

关于协相关和卷积:680dc268a89cd79a269f7cde73f03fd8.png

773b513d23f0a018c70e9a9f0142291a.png

对图像和滤波矩阵进行逐个元素相乘再求和的操作就相当于将一个二维的函数移动到另一个二维函数的所有位置,这个操作就叫卷积或者协相关。卷积和协相关的差别是,卷积需要先对滤波矩阵进行180的翻转,但如果矩阵是对称的,那么两者就没有什么差别了,上面算子由好多都是对称的。

还有https://www.cnblogs.com/xiaojianliu/p/9076547.html也提到了区别,都说的是一件事,卷积需要倒180再乘,其实就是为了凑卷积的形式:4cd44265bf664a16d64990dc78e38596.png

为什么要凑卷积的形式呢,我们接着往下看。我们再来看一看其它人描述卷积核的角度:70a82334c44abd0f3f2e542004895b92.png

红线部分已经大概说了锐化的原理,边缘的亮度和其它地方会差别比较大,简单理解一下,如果其它地方比边缘的亮度要高,那么用锐化核进行卷积操作以后,边缘的亮度就比周围的亮度更低了,就提高了对比度。嗯,我们还知道了增加卷积核的半径可以增强锐化效果。25b5b4fd700cf06e8aad49243d440317.png

5ab3acc9bda1a6cdc00e30819aeea338.png

e81eddc36c970b50eacbe43ed2c782a2.png

892fcd4491e14311ac0e77ffb66b31a1.png

dcc8ea1e9fd5c269c585b582b60b547d.png

6e790451b9eebafceeffe9ac2110844d.png

卷积的计算86164b42df138be93e75f8c47694372f.png

什么是可分离卷积呢?参考https://www.cnblogs.com/cvtoEyes/p/8848815.html3cb46a22b27a23fa9c970af790586d66.png

快速计算卷积:23c064f137d3130145adc2076e3b1afc.png

这就理解了为什么要把卷积核倒180来凑卷积的形式了吧,因为只有符合卷积的形式才满足卷积定理,才能快速计算卷积。78a20eebac5a536e7b68d7e54e4f977e.png

7ba5799d19fe704fa80081c96ccd023a.png

这一讲的数学只是函数蛮多的。e060cb1b22d61fc07ceff66e283ea934.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值