码迷,mamicode.com
首页 > 其他好文 > 详细

数字图像处理-频域滤波

时间:2018-03-17 22:07:39      阅读:370      评论:0      收藏:0      [点我收藏+]

标签:bsp   otl   图片   scale   axis   频谱   atp   img   click   

频域滤波

频域滤波是在频率域对图像做处理的一种方法。步骤如下:

技术分享图片

1.理想的高/低通滤波器

 顾名思义,高通滤波器为:让高频信息通过,过滤低频信息;低通滤波相反。滤波器大小和频谱大小相同,

理想的低通滤波器模板为:

 技术分享图片

其中,D0表示通带半径,D(u,v)是到频谱中心的距离(欧式距离),计算公式如下:

 技术分享图片

M和N表示频谱图像的大小,(M/2,N/2)即为频谱中心

理想的高通滤波器与此相反,1减去低通滤波模板即可。

代码如下:(D0=20)

技术分享图片
"""理想的高/低通滤波器"""
import numpy as np
import matplotlib.pyplot as plt
import cv2


# 定义函数,显示滤波器
def showTemplate(template):
    temp = template*255
    cv2.imshow(Template, temp)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    return


# 定义函数,显示滤波函数
def showFunction(template):
    m, n = template.shape
    m = np.uint16(m/2)
    n = np.uint16(n/2)
    y = template[m, n:]
    x = np.arange(len(y))
    plt.plot(x, y, b-, linewidth=2)
    plt.axis([0, len(x), -0.2, 1.2])
    plt.show()


# 定义函数,完成高通低通滤波
def lowAndhigh_pass(src, filter_cdtion, filter_type):
    template = np.zeros(src.shape, dtype=np.float32)   # 构建滤波器
    m, n = src.shape
    for i in range(m):
        for j in range(n):
            distance = np.sqrt((i-m/2)**2+(j-n/2)**2)
            if distance < filter_cdtion:
                template[i, j] = 1
            else:
                template[i, j] = 0

    if filter_type == 1:
        template = 1 - template

    showFunction(template)
    showTemplate(template)

    img_dft = np.fft.fft2(src)   # 傅立叶变换,进行滤波
    img_fshift = np.fft.fftshift(img_dft)  # 中心化
    new_img = img_fshift*template   # 滤波
    img_ifshift = np.fft.ifftshift(new_img)  # 边缘化
    img = np.fft.ifft2(img_ifshift)  # 傅立叶逆变换
    img = np.abs(img)
    img = np.uint8(img + 0.5)
    return img


img_input = cv2.imread(rF:\program_study\Python\data\woman.tif, cv2.IMREAD_GRAYSCALE)
cv2.imshow(orig_img, img_input)
img_out = lowAndhigh_pass(img_input, 20, 0)  # 0代表低通
cv2.imshow(lowPass_img, img_out)
# img_out1 = lowAndhigh_pass(img_input, 20, 1)  # 1代表高通
# cv2.imshow(‘highPass_img‘, img_out1)
cv2.waitKey(0)
cv2.destroyAllWindows()
Low&Highpass

技术分享图片

技术分享图片技术分享图片

技术分享图片

 

数字图像处理-频域滤波

标签:bsp   otl   图片   scale   axis   频谱   atp   img   click   

原文地址:https://www.cnblogs.com/laumians-notes/p/8592968.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!