Python電腦視覺3:模糊,平滑,去噪

來源:互聯網
上載者:User

標籤:

我是一名初學者,如果你發現文中有錯誤,請留言告訴我,謝謝

映像的模糊和平滑是同一個層面的意思,平滑的過程就是一個模糊的過程。

而映像的去噪可以通過映像的模糊、平滑來實現(映像去噪還有其他的方法)

 

那麼怎麼才能對一幅映像進行模糊平滑呢?

映像的模糊平滑是對映像矩陣進行平均的過程。相比於映像銳利化(微分過程),映像平滑處理是一個積分的過程。

映像平滑過程可以通過原映像和一個積分運算元進行卷積來實現。

下面介紹兩種積分運算元

 

 全1運算元 

最簡單的積分運算元就是全1運算元

利用全1運算元可以對映像進行模糊平滑操作,有一定的去噪能力。

下面是python執行個體

import numpy as npfrom PIL import Imageimport matplotlib.pyplot as pltimport matplotlib.cm as cmsuanzi = np.ones((3,3)) # 建立全1運算元 # 開啟映像並轉化成灰階映像image = Image.open("pika.jpg").convert("L")image_array = np.array(image)# 原映像與全1運算元進行卷積image2 = signal.convolve2d(image_array,suanzi,mode="same")# 將結果灰階值轉化到0-255image2 = (image2/float(image2.max()))*255# 顯示映像plt.subplot(2,1,1)plt.imshow(image_array,cmap=cm.gray)plt.axis("off")plt.subplot(2,1,2)plt.imshow(image2,cmap=cm.gray)plt.axis("off")plt.show()

運行結果如,(為了看到效果,映像經過人工局部放大)

為原映像,為經過模糊處理映像

比較兩幅圖可以看出,全1運算元有一定的模糊凹凸貼圖

 

 高斯運算元 

利用高斯運算元進行模糊處理就是我們常聽到的高斯模糊。

標準差為σ的高斯分布如下式

 

我們可以通過numpy模組的fromfunction()方法來產生高斯運算元。

import numpy as np# 乘以100是為了使運算元中的數便於觀察# sigma指定高斯運算元的標準差def func(x,y,sigma=1):    return 100*(1/(2*np.pi*sigma))*np.exp(-((x-2)**2+(y-2)**2)/(2.0*sigma**2))# 產生標準差都2的5*5高斯運算元a = np.fromfunction(func,(5,5),sigma=2)print(a)# 結果[[ 2.92749158  4.25947511  4.82661763  4.25947511  2.92749158] [ 4.25947511  6.19749972  7.02268722  6.19749972  4.25947511] [ 4.82661763  7.02268722  7.95774715  7.02268722  4.82661763] [ 4.25947511  6.19749972  7.02268722  6.19749972  4.25947511] [ 2.92749158  4.25947511  4.82661763  4.25947511  2.92749158]]

 對上面的5*5高斯運算元每個元素進行四捨五入,可以得到下面矩陣

 

看到有些地方直接用上面的矩陣對映像進行高斯模糊,實際上是運用的是標準差為2的高斯近似運算元。

利用高斯運算元對映像進行模糊,程式如下

import numpy as npfrom PIL import Imageimport matplotlib.pyplot as pltimport matplotlib.cm as cmimport scipy.signal as signal# 產生高斯運算元的函數def func(x,y,sigma=1):    return 100*(1/(2*np.pi*sigma))*np.exp(-((x-2)**2+(y-2)**2)/(2.0*sigma**2))# 產生標準差為2的5*5高斯運算元suanzi = np.fromfunction(func,(5,5),sigma=2)# 開啟映像並轉化成灰階映像image = Image.open("pika.jpg").convert("L")image_array = np.array(image)# 映像與高斯運算元進行卷積image2 = signal.convolve2d(image_array,suanzi,mode="same")# 結果轉化到0-255image2 = (image2/float(image2.max()))*255# 顯示映像plt.subplot(2,1,1)plt.imshow(image_array,cmap=cm.gray)plt.axis("off")plt.subplot(2,1,2)plt.imshow(image2,cmap=cm.gray)plt.axis("off")plt.show()

 

運行結果如,(為了看到效果,映像經過人工局部放大)

為原映像,為經過高斯模糊處理映像

對比高斯運算元和全1運算元,可以看出,高斯運算元的模糊想過似乎更好。

而且,我們可以通過更改高斯運算元的標準差和維數來調整模糊效果

一般來說,高斯運算元標準差越大,維數越大,映像越模糊。

 

參考列表

1.《python電腦視覺編程》

2.度娘,感謝那些熱愛分享知識的朋友

 

Python電腦視覺3:模糊,平滑,去噪

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.