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]

 

 

 

 

转载于:https://www.cnblogs.com/skycandy/p/8990566.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中进行二维傅里叶变换和高斯滤波可以使用NumPy和OpenCV库。 下面是一个简单的例子: ```python import cv2 import numpy as np from matplotlib import pyplot as plt # 读取图像 img = cv2.imread('image.png', 0) # 进行二维傅里叶变换 f = np.fft.fft2(img) fshift = np.fft.fftshift(f) # 频域可视化 magnitude_spectrum = 20*np.log(np.abs(fshift)) plt.subplot(121),plt.imshow(img, cmap = 'gray') plt.title('Input Image'), plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(magnitude_spectrum, cmap = 'gray') plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([]) plt.show() # 高斯滤波 rows, cols = img.shape crow, ccol = rows//2 , cols//2 # 创建高斯滤波器 mask = np.zeros((rows,cols), np.uint8) mask[crow-30:crow+30, ccol-30:ccol+30] = 1 # apply mask and inverse DFT fshift = fshift*mask f_ishift = np.fft.ifftshift(fshift) img_back = np.fft.ifft2(f_ishift) img_back = np.real(img_back) # 显示结果 plt.subplot(131),plt.imshow(img, cmap = 'gray') plt.title('Input Image'), plt.xticks([]), plt.yticks([]) plt.subplot(132),plt.imshow(np.abs(img_back), cmap = 'gray') plt.title('Image after HPF'), plt.xticks([]), plt.yticks([]) plt.subplot(133),plt.imshow(mask*255, cmap = 'gray') plt.title('Mask'), plt.xticks([]), plt.yticks([]) plt.show() ``` 上述代码中,首先读取了一张灰度图像。然后进行二维傅里叶变换,计算频谱,将低频信号移动到中心位置。 接下来,创建一个高斯滤波器,将其应用于频域图像,并通过反傅里叶变换将结果转换回空间域。 最后,使用Matplotlib库显示结果。第一个子图是原始图像,第二个子图是应用高斯滤波器后的图像,第三个子图是使用的高斯滤波器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值