zoukankan      html  css  js  c++  java
  • 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]

     

  • 相关阅读:
    环境是如何建立的 启动文件有什么
    环境中存储的是什么
    串行 并行 异步 同步
    TPC-H is a Decision Support Benchmark
    进程通信类型 管道是Linux支持的最初Unix IPC形式之一 命名管道 匿名管道
    删除环境变量
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
  • 原文地址:https://www.cnblogs.com/skycandy/p/8990566.html
Copyright © 2011-2022 走看看