SciPy模組應用

2022-07-04 14:12:11 字數 2465 閱讀 6465

1.影象模糊

影象的高斯模糊是非常經典的影象卷積例子。本質上,影象模糊就是將(灰度)影象i 和乙個高斯核進行卷積操作:

,其中是標準差為σ的二維高斯核。高斯模糊通常是其他影象處理操作的一部分,比如影象插值操作、興趣點計算以及很多其他應用。scipy 有用來做濾波操作的scipy.ndimage.filters 模組。該模組使用快速一維分離的方式來計算卷積。eg:         

))im2 = filters.gaussian_filter(im,5) %第二個引數表示標準差

隨著σ 的增加,一幅影象被模糊的程度。σ 越大,處理後的影象細節丟失越多。如果打算模糊一幅彩色影象,只需簡單地對每乙個顏色通道進行高斯模糊:

原始影象                                       使用σ=5的高斯濾波器

2.影象導數

在很多應用中影象強度的變化情況是非常重要的資訊。強度的變化可以用灰度影象i(對於彩色影象,通常對每個顏色通道分別計算導數)的x和y 方向導數ix 和iy 進行描述。影象的梯度向量為

。梯度有兩個重要的屬性,一是梯度的大小:

,它描述了影象強度變化的強弱,一是梯度的角度:

,描述了影象中在每個點(畫素)上強度變化最大的方向。numpy 中的arctan2() 函式

返回弧度表示的有符號角度,角度的變化區間為-π...π。可以用離散近似的方式來計算影象的導數。影象導數大多數可以通過卷積簡單地實現:

。對於dx 和dy,通常選擇prewitt 濾波器:

或者sobel 濾波器:

這些導數濾波器可以使用scipy.ndimage.filters 模組的標準卷積操作來簡單地實現:   

)) #轉化為灰度影象

# sobel 導數濾波器

imx =zeros(im.shape)

filters.sobel(im,

1,imx)

imy =zeros(im.shape)

filters.sobel(im,

0,imy)

magnitude = sqrt(imx**2+imy**2)

上面的指令碼使用sobel 濾波器來計算x 和y 的方向導數,以及梯度大小。sobel() 函式的第二個引數表示選擇x 或者y 方向導數,第三個引數儲存輸出的變數。在兩個導數影象中,正導數顯示為亮的畫素,負導數顯示為暗的畫素。灰色區域表示導數的值接近於零。

上述計算影象導數的方法有一些缺陷:在該方法中,濾波器的尺度需要隨著影象解析度的變化而變化。為了在影象雜訊方面更穩健,以及在任意尺度上計算導數,可以使用高斯導數濾波器:

。之前用於模糊的filters.gaussian_filter() 函式可以接受額外的引數,用來計算高斯導數。可以簡單地按照下面的方式來處理:

sigma = 5

# 標準差

imx =zeros(im.shape)

filters.gaussian_filter(im, (sigma,sigma), (

0,1), imx)

imy =zeros(im.shape)

filters.gaussian_filter(im, (sigma,sigma), (

1,0), imy)

該函式的第三個引數指定對每個方向計算哪種型別的導數,第二個引數為使用的標準差。

SciPy中的統計模組

numpy 替我們搞定了向量和矩陣的相關操作,基本上算是乙個高階的科學計算器。scipy 基於 numpy 提供了更為豐富和高階的功能擴充套件,在統計 優化 插值 數值積分 時頻轉換等方面提供了大量的可用函式,接下來我們就學習一下 scipy 中的統計和優化模組。import numpy as np...

利用python中的scipy模組做線性規劃

為數學建模準備。scipy.optimize.linprog 引數選擇 linprog c,a ub,b ub,a ed,b ed,bounds none 引數解釋 c 價值向量,只規劃最小值,若規劃最大值需改為 c,但注意得出的結果應再加負號即為所求最大值 a ub和b ub 分別對應於不等式約束...

scipy安裝 安裝Scipy失敗 解決途徑

這個問題困擾我一天,後來發現好簡單,忍不住記錄分享。症狀描述 在cmd 中輸入 pip install numpty pip install numpty 安裝numpy庫成功,但輸入 pip install scipy 安裝失敗,我嘗試很多方法都失敗。中間歷經曲折直接上答案。成功經驗 在shell...