天天看點

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

圖像混合

其實用的就是cv2.addWeighted函數,前面也介紹過這個函數。不過首先得把圖檔的形狀搞成一樣的,這個畫圖可以做到。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

接下來是一塊比較重要的内容。

性能的測量和優化

參考

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

首先是opencv中計算事件的函數,cv2.getTickCount,cv2.getTickFrequency,這兩個函數要結合起來用。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

當然time子產品或者timeit子產品也可以,timeit子產品更精細,這個我們在python學習那裡已經掌握了,忘記的去考古即可。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

用的不是同一個圖檔,可以看到整個程式一共4.7s,有4.48s都花費在中值濾波上了。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

這個是因為沒有在ipython環境下。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

可能是安裝anaconda的時候配置過了環境變量吧,直接輸入ipython就可以進入了。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

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

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

ipython的tab補全确實是不錯的哦。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

有性能優化的時候每依次大概需要469,沒有則需要476,這個差距不是太大。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

看起來x*x和x**2的差距就比較大了。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

視圖和副本前面我們介紹過。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

副本,視圖和深拷貝的差距一目了然。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

圖像處理的數學原理

參考了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

有一個很重要的概念叫做卷積。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

上面的式子表示的是一個離散卷積,因為是數字信号,這裡的卷積其實是一個權重和。推薦到https://www.zhihu.com/question/22298352?rf=21686447去看一看。數學定義中的卷積是有連續的,那麼求和号∑就變成了積分号,其實萊布尼茲設計積分号的時候就是把∑拉長。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

其實也是權重疊加嘛。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

我更習慣說是飽和而不是截斷。卷積核的和為1,暫時想不出來比較好的證明方法。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

平滑之後邊界看起來比較模糊了。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

關于邊緣檢測的原理:參考https://www.jianshu.com/p/2334bee37de5

裡面太基礎的數學我就不在這裡重複了,我這裡截圖過來的都是我覺得需要一定解釋的。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

這裡沒有把從G(x,y)到最後的圖像的過程說清楚,參考https://blog.csdn.net/chaipp0607/article/details/54348624

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

也就是由G(x,y)到最後的圖其實還有一個二值化或者說門檻值化的過程,當計算出來的Gx或者Gy大于一定值的時候我們才認為這個像素點是一個邊界。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

上面的差分都是用的後向差分,目的是為了讓以x,y為中心包含的九宮格的元素包含進來。最後肯定是還要對這個結果進行一下門檻值化。上面還是沒有對數學很深入,我覺得我需要深入一下,參考了https://blog.csdn.net/u014485485/article/details/78364573

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

這個最後的結果是中間是-4的那個,那麼-8的那個是怎麼來的呢?其實用的是全微分而不是偏微分,下面我來示範一下過程,一階差分用的是後向差分,也就是f(x,y)-f(x-1,y),而二階差分用的是前向差分,也就是fx(x+1,y)-fx(x,y),目的還是為了包含的元素都在以x,y為中心的九宮格裡面。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

最後化簡出來就是中心為-8的那個。中間是-20的那個是把fxx和fyy前的系數變成2的結果,但是不知道為什麼做,可能是要突出這兩項二階偏導吧。

兩個缺點:

1.沒有了邊緣的方向資訊;          

 2.雙倍加強了噪聲的影響

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

還有一些高斯和拉普拉斯的結合版:https://blog.csdn.net/u014485485/article/details/78364573

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

關于高斯模糊的原理:請參考http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html

我就不截圖過來了。

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

簡單的說就是高斯分布函數的傅裡葉變換還是均值為0的高斯分布函數,是以是低通濾波。但是數學是需要嚴謹的推導的,推導過程就在上面。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

關于協相關和卷積:

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

   對圖像和濾波矩陣進行逐個元素相乘再求和的操作就相當于将一個二維的函數移動到另一個二維函數的所有位置,這個操作就叫卷積或者協相關。卷積和協相關的差别是,卷積需要先對濾波矩陣進行180的翻轉,但如果矩陣是對稱的,那麼兩者就沒有什麼差别了,上面算子由好多都是對稱的。

還有https://www.cnblogs.com/xiaojianliu/p/9076547.html也提到了差別,都說的是一件事,卷積需要倒180再乘,其實就是為了湊卷積的形式:

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

為什麼要湊卷積的形式呢,我們接着往下看。我們再來看一看其它人描述卷積核的角度:

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

紅線部分已經大概說了銳化的原理,邊緣的亮度和其它地方會差别比較大,簡單了解一下,如果其它地方比邊緣的亮度要高,那麼用銳化核進行卷積操作以後,邊緣的亮度就比周圍的亮度更低了,就提高了對比度。嗯,我們還知道了增加卷積核的半徑可以增強銳化效果。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

卷積的計算

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

什麼是可分離卷積呢?參考https://www.cnblogs.com/cvtoEyes/p/8848815.html

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

快速計算卷積:

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

這就了解了為什麼要把卷積核倒180來湊卷積的形式了吧,因為隻有符合卷積的形式才滿足卷積定理,才能快速計算卷積。

一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理
一起學opencv-python九(性能的測量和優化與圖像處理的數學原理)圖像混合性能的測量和優化圖像處理的數學原理

這一講的數學隻是函數蠻多的。