python验证数学原理_一起学opencv-python九(性能的测量和优化与图像处理的数学原理)...
圖像混合
其實用的就是cv2.addWeighted函數,前面也介紹過這個函數。不過首先得把圖片的形狀搞成一樣的,這個畫圖可以做到。
接下來是一塊比較重要的內容。
性能的測量和優化
參考
https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_core/py_optimization/py_optimization.html
首先是opencv中計算事件的函數,cv2.getTickCount,cv2.getTickFrequency,這兩個函數要結合起來用。
當然time模塊或者timeit模塊也可以,timeit模塊更精細,這個我們在python學習那里已經掌握了,忘記的去考古即可。
用的不是同一個圖片,可以看到整個程序一共4.7s,有4.48s都花費在中值濾波上了。
這個是因為沒有在ipython環境下。
可能是安裝anaconda的時候配置過了環境變量吧,直接輸入ipython就可以進入了。
關于ipython,推薦https://blog.csdn.net/ztf312/article/details/78677093和
https://blog.csdn.net/qq_31095335/article/details/52179599
ipython的tab補全確實是不錯的哦。
有性能優化的時候每依次大概需要469,沒有則需要476,這個差距不是太大。
看起來x*x和x**2的差距就比較大了。
視圖和副本前面我們介紹過。
副本,視圖和深拷貝的差距一目了然。
圖像處理的數學原理
參考了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
有一個很重要的概念叫做卷積。
上面的式子表示的是一個離散卷積,因為是數字信號,這里的卷積其實是一個加權和。推薦到https://www.zhihu.com/question/22298352?rf=21686447去看一看。數學定義中的卷積是有連續的,那么求和號∑就變成了積分號,其實萊布尼茲設計積分號的時候就是把∑拉長。
其實也是加權疊加嘛。
我更習慣說是飽和而不是截斷。卷積核的和為1,暫時想不出來比較好的證明方法。
平滑之后邊界看起來比較模糊了。
關于邊緣檢測的原理:參考https://www.jianshu.com/p/2334bee37de5
里面太基礎的數學我就不在這里重復了,我這里截圖過來的都是我覺得需要一定解釋的。
這里沒有把從G(x,y)到最后的圖像的過程說清楚,參考https://blog.csdn.net/chaipp0607/article/details/54348624
也就是由G(x,y)到最后的圖其實還有一個二值化或者說閾值化的過程,當計算出來的Gx或者Gy大于一定值的時候我們才認為這個像素點是一個邊界。
上面的差分都是用的后向差分,目的是為了讓以x,y為中心包含的九宮格的元素包含進來。最后肯定是還要對這個結果進行一下閾值化。上面還是沒有對數學很深入,我覺得我需要深入一下,參考了https://blog.csdn.net/u014485485/article/details/78364573
這個最后的結果是中間是-4的那個,那么-8的那個是怎么來的呢?其實用的是全微分而不是偏微分,下面我來演示一下過程,一階差分用的是后向差分,也就是f(x,y)-f(x-1,y),而二階差分用的是前向差分,也就是fx(x+1,y)-fx(x,y),目的還是為了包含的元素都在以x,y為中心的九宮格里面。
最后化簡出來就是中心為-8的那個。中間是-20的那個是把fxx和fyy前的系數變成2的結果,但是不知道為什么做,可能是要突出這兩項二階偏導吧。
兩個缺點:
1.沒有了邊緣的方向信息;
2.雙倍加強了噪聲的影響
還有一些高斯和拉普拉斯的結合版:https://blog.csdn.net/u014485485/article/details/78364573
關于高斯模糊的原理:請參考http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html
我就不截圖過來了。
想要再深入了解高斯模糊數學原理的:https://www.cnblogs.com/evennl/p/3894438.html
簡單的說就是高斯分布函數的傅里葉變換還是均值為0的高斯分布函數,所以是低通濾波。但是數學是需要嚴謹的推導的,推導過程就在上面。
關于協相關和卷積:
對圖像和濾波矩陣進行逐個元素相乘再求和的操作就相當于將一個二維的函數移動到另一個二維函數的所有位置,這個操作就叫卷積或者協相關。卷積和協相關的差別是,卷積需要先對濾波矩陣進行180的翻轉,但如果矩陣是對稱的,那么兩者就沒有什么差別了,上面算子由好多都是對稱的。
還有https://www.cnblogs.com/xiaojianliu/p/9076547.html也提到了區別,都說的是一件事,卷積需要倒180再乘,其實就是為了湊卷積的形式:
為什么要湊卷積的形式呢,我們接著往下看。我們再來看一看其它人描述卷積核的角度:
紅線部分已經大概說了銳化的原理,邊緣的亮度和其它地方會差別比較大,簡單理解一下,如果其它地方比邊緣的亮度要高,那么用銳化核進行卷積操作以后,邊緣的亮度就比周圍的亮度更低了,就提高了對比度。嗯,我們還知道了增加卷積核的半徑可以增強銳化效果。
卷積的計算
什么是可分離卷積呢?參考https://www.cnblogs.com/cvtoEyes/p/8848815.html
快速計算卷積:
這就理解了為什么要把卷積核倒180來湊卷積的形式了吧,因為只有符合卷積的形式才滿足卷積定理,才能快速計算卷積。
這一講的數學只是函數蠻多的。
總結
以上是生活随笔為你收集整理的python验证数学原理_一起学opencv-python九(性能的测量和优化与图像处理的数学原理)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python获取qq好友ip_qqzen
- 下一篇: websocket python爬虫_p