前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >组合滤波器

组合滤波器

作者头像
裴来凡
发布2022-05-29 09:36:32
3770
发布2022-05-29 09:36:32
举报
文章被收录于专栏:图像处理与模式识别研究所
代码语言:javascript
复制
import os
import cv2
import numpy as np
from math import sqrt
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
def ButterworthLowPassFilter(image,d,n,s1):
    f=np.fft.fft2(image)
    fshift=np.fft.fftshift(f)
    def make_transform_matrix(d):
        transform_matrix=np.zeros(image.shape)
        center_point=tuple(map(lambda x:(x-1)/2,s1.shape))
        for i in range(transform_matrix.shape[0]):
            for j in range(transform_matrix.shape[1]):
                def cal_distance(pa, pb):
                    dis=sqrt((pa[0]-pb[0])**2+(pa[1]-pb[1])**2)
                    return dis
                dis=cal_distance(center_point,(i,j))
                transform_matrix[i,j]=1/(1+(dis/d)**(2*n))
        return transform_matrix
    d_matrix=make_transform_matrix(d)
    new_img=np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*d_matrix)))
    return new_img
def homomorphic_filter(src,d0=10,r1=0.5,rh=2,c=4,h=2.0,l=0.5):
    gray=src.copy()
    if len(src.shape)>2:
        gray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)
    gray=np.float64(gray)
    rows,cols=gray.shape
    gray_fft=np.fft.fft2(gray)
    gray_fftshift=np.fft.fftshift(gray_fft)
    dst_fftshift=np.zeros_like(gray_fftshift)
    M,N=np.meshgrid(np.arange(-cols//2,cols//2),np.arange(-rows//2,rows//2))
    D=np.sqrt(M**2+N**2)
    Z=(rh-r1)*(1-np.exp(-c*(D**2/d0**2)))+r1
    dst_fftshift=Z*gray_fftshift
    dst_fftshift=(h-l)*dst_fftshift+l
    dst_ifftshift=np.fft.ifftshift(dst_fftshift)
    dst_ifft=np.fft.ifft2(dst_ifftshift)
    dst=np.real(dst_ifft)
    dst=np.uint8(np.clip(dst,0,255))
    return dst
def salt_pepper(image,salt,pepper):
    height=image.shape[0]
    width=image.shape[1]
    pertotal=salt+pepper#总噪声占比
    noise_image=image.copy()
    noise_num=int(pertotal*height*width)
    for i in range(noise_num):
        rows=np.random.randint(0,height-1)
        cols=np.random.randint(0,width-1)
        if(np.random.randint(0,100)<salt*100):
            noise_image[rows][cols]=255
        else:
            noise_image[rows][cols]=0
    return noise_image
def put(path):
    img=cv2.imread(path,1)
    img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    #傅里叶变换
    f=np.fft.fft2(img)
    fshift=np.fft.fftshift(f)
    #取绝对值后将复数变化为实数
    s1=np.log(np.abs(fshift))
    #添加椒盐噪声
    noise=salt_pepper(img,0.05,0.05)
    #中值滤波器消除噪声
    res=cv2.medianBlur(noise,5)
    #图像经过巴特沃斯低通滤波器处理
    #设置D=100,N=1
    res = ButterworthLowPassFilter(res,100,1,s1)
    #处理过的图像再经过同态滤波处理
    res=homomorphic_filter(res,100,1)
    res=ButterworthLowPassFilter(res,100,1,s1)
    f=np.fft.fft2(noise)
    fshift=np.fft.fftshift(f)
    w,h=img.shape
    flt=np.zeros(noise.shape)
    rx1=w/4
    ry1=h/2
    rx2=w*3/4
    ry2=h/2;
    r=min(w,h)/6  # 半径
    for i in range(1,w):
        for j in range(1,h):
            if ((i-rx1)**2+(j-ry1)**2>=r**2)and((i-rx2)**2+(j-ry2)**2>=r**2):
                flt[i,j]=1
    #选择滤波
    new_img=np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*flt)))
    plt.subplot(231)
    plt.axis('off')
    plt.title('原始图像')
    plt.imshow(img,cmap='gray')
    plt.subplot(232)
    plt.axis('off')
    plt.title('噪声图像')
    plt.imshow(noise,cmap='gray')
    plt.subplot(233)
    plt.axis('off')
    plt.title('混合滤波器')
    plt.imshow(res,cmap='gray')
    plt.subplot(234),plt.axis('off'),plt.imshow(s1,'gray'),plt.title('中心频率域')
    plt.subplot(235), plt.axis('off'),plt.imshow(flt,'gray'),plt.title('陷波滤波器')
    plt.subplot(236),plt.axis('off'),plt.imshow(new_img,'gray'),plt.title('选择性滤波器')
    plt.savefig('C:/Users/xpp/Desktop/result.png')
    plt.show()
put(r'C:/Users/xpp/Desktop/Lena.png')

算法:组合滤波器是先对图片添加椒盐噪声,先采用中值滤波器进行去噪处理,然后采用巴特沃斯低通滤波和同态滤波混合滤波器进行图像处理。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档