用opencv进行图像处理-利用傅里叶变换进行图像的高通滤波和锐化

1 利用傅里叶变换高通滤波

import numpy as np
import cv2
from matplotlib import pyplot as plt
from skimage.draw import disk

def fft_in_np(img):
    img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    f = np.fft.fft2(img) #灰度图像进行傅里叶变换
    fshift  = np.fft.fftshift(f) #把0频信息放到中心
    magnitude_spectrum = 20 * np.log(np.abs(fshift)) #制作频谱

    rows, cols = img.shape
    row_half, col_half = rows // 2, cols // 2
    mask = np.ones((rows, cols), dtype=np.uint8) #创建一个mask
    rr, cc = disk((row_half, col_half), 10)
    mask[rr, cc] = 0 #把mask中心半径为10的圆盘值成0

    fshift = fshift * mask #把频域信息的低频mask为0
    f_ishift = np.fft.ifftshift(fshift) #把0频信息恢复位置
    img_back = np.fft.ifft2(f_ishift) #反傅里叶变换
    img_back = np.abs(img_back)

    plt.subplot(131),plt.imshow(img, cmap = 'gray')
    plt.title('Input Image'), plt.xticks([]), plt.yticks([])
    plt.subplot(132),plt.imshow(magnitude_spectrum, cmap = 'gray')
    plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
    plt.subplot(133),plt.imshow(img_back, cmap = 'gray')
    plt.title('img_back'), plt.xticks([]), plt.yticks([])
    plt.show()

img = cv2.imread('dqiocaoxfwu31.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
fft_in_np(img)

效果如下: 

2 利用傅里叶变换锐化增强图像

import numpy as np
import cv2
from matplotlib import pyplot as plt
from skimage.draw import disk

def fft_in_np(img):
    img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    f = np.fft.fft2(img)
    fshift  = np.fft.fftshift(f)
    magnitude_spectrum = 20 * np.log(np.abs(fshift))

    rows, cols = img.shape
    row_half, col_half = rows // 2, cols // 2
    mask = np.ones((rows, cols))
    mask = mask * 1.5
    rr, cc = disk((row_half, col_half), 10)
    mask[rr, cc] = 1
    fshift = fshift * mask
    f_ishift = np.fft.ifftshift(fshift)
    img_back = np.fft.ifft2(f_ishift)
    img_back = np.abs(img_back)

    plt.subplot(131),plt.imshow(img, cmap = 'gray')
    plt.title('Input Image'), plt.xticks([]), plt.yticks([])
    plt.subplot(132),plt.imshow(magnitude_spectrum, cmap = 'gray')
    plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
    plt.subplot(133),plt.imshow(img_back, cmap = 'gray')
    plt.title('img_back'), plt.xticks([]), plt.yticks([])
    plt.show()

img = cv2.imread('dqiocaoxfwu31.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
fft_in_np(img)

效果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子燕若水

吹个大气球

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值