python 一維和二位資料的高斯模糊濾波

2022-09-06 12:24:24 字數 2423 閱讀 2898

高斯分布(正態分佈)函式:

高斯函式二階函式:

def calc(self,x,y=0):

if self.level==1:

return 1/((2*math.pi)**0.5*self.sigema)*math.exp(-(x**2/2/(self.sigema**2)))

elif self.level==2:

return 1/(2*math.pi*self.sigema*self.sigema)*math.exp(-(x**2+y**2)/2/self.sigema/self.sigema)

σ為標準差

定義乙個模糊半徑,通過上述公式獲取到需要的核函式

如半徑r=1 ,σ=2

一階時為x=[-1,0,1],生成核為[0.176033,0.199471,0.176033]/data.sum()

及把[0.319168,0.361664,0.319168]作為下面計算的卷積和

對於邊緣資料進行映象模糊對稱 ,再將資料進行卷積運算即可得出濾波資料

模糊演算法:

def verticalflipping(self,data):#

垂直翻轉

if data.shape[0]<=1:

return

data

newarray=np.zeros(data.shape)

for i in

range(data.shape[0]):

newarray[i]=data[-i-1]

return

newarray

def horizontalflipping(self,data):#

水平翻轉

if data.shape[1]<=1:

return

data

newarray=np.zeros(data.shape)

for i in range(data.shape[1]):

newarray[:,i]=data[:,-i-1]

return

newarray

def fuzzy(self,data):#

影象邊緣模糊演算法: 映象模糊

data=np.array(data)

if self.level==2:

data=np.row_stack((self.verticalflipping(data[:self.radius]),data))

data=np.row_stack((data,self.verticalflipping(data[-1:])))

data=np.column_stack((self.horizontalflipping(data[:,:self.radius]),data))

data=np.column_stack((data,self.horizontalflipping(data[:,-self.radius:]) ))

return data

濾波方法

#

濾波函式

deffilter(self, data, template):

arr=self.fuzzy(data)

height=arr.shape[0]

width=arr.shape[1]

newdata=np.zeros((height, width))

if self.level==1:

for i in

range(arr.shape[0]):

for j in range(self.radius,arr.shape[1]-self.radius):

t=arr[i, j-self.radius:j+self.radius+1]

a=np.multiply(t,template)

newdata[i,j]=a.sum()

return newdata[:,self.radius:-self.radius]

elif self.level==2:

for i in range(self.radius, height-self.radius):

for j in range(self.radius, width-self.radius):

t=arr[i-self.radius:i+self.radius+1, j-self.radius:j+self.radius+1]

a=np.multiply(t, template)

newdata[i, j] =a.sum()

#newimage = image.fromarray(newdata)

return newdata[self.radius:-self.radius,self.radius:-self.radius]

二位陣列和指標(參考)

二維陣列和指標 用指標表示二維陣列元素。要用指標處理二維陣列,首先要解決從儲存的角度對二維陣列的認識問題。我們知道,乙個二維陣列在計算機中儲存時,是按照先行後列的順序依次儲存的,當把每一行看作乙個整體,即視為乙個大的陣列元素時,這個儲存的二維陣列也就變成了乙個一維陣列了。而每個大陣列元素對應二維陣列...

二位陣列中的查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。假設陣列 array 如下 128 9249 124710 136811 15public class sol...

java 二位陣列轉化一維陣列 注釋詳解

package shuzu public class sss 一維陣列 int one system.out.println num.length int len 0 for int i 0 i num.length i 列印出二位陣列的長度 system.out.println len 給定義的一...