您的当前位置:首页正文

python一维和二位数据的高斯模糊滤波

2020-04-28 来源:客趣旅游网
python⼀维和⼆位数据的⾼斯模糊滤波

⾼斯分布(正态分布)函数:⾼斯函数⼆阶函数:

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

滤波⽅法

#滤波函数

def filter(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]

因篇幅问题不能全部显示,请点此查看更多更全内容