opencv-python——图像增强(二维傅里叶变换+带阻滤波)

问题:如何去除下面图中规律变化的噪声?

二维图像傅里叶变换(2D FFT)是一种将图像从空间域(时域)转换到频域的方法,其原理是在两个方向上(水平和垂直)分别对图像执行一维傅里叶变换。

 

二维傅里叶变换的输出是大小为M×N 的幅度谱和相位谱(F(u,v) 的模和辐角)。其中,幅度谱表示了输入信号中频率成分的强度,而相位谱表示了输入信号中每个频率成分的位置信息。

傅里叶变换用于将信号(包括图像信号)转换到频域,其中高频成分代表着信号中的细节和噪声。因此,滤波去除傅里叶变换后频率较高的成分(即高频噪声)可以消除图像中的规律性噪声。使用下图的部分频段滤波:

import cv2
import numpy as np


# 滤波
def Filter(image, d0):
   f = np.fft.fft2(image)
   fshift = np.fft.fftshift(f)
   s1 = np.log(np.abs(fshift))
   H = np.empty_like(s1, float)
   M, N = image.shape
   for x in range(0, M):
       for y in range(0, N):
           d1 = np.sqrt((x - 331) ** 2 + (y - 293) ** 2)
           d2 = np.sqrt((x - 331) ** 2 + (y - 341) ** 2)
           if d1 <= d0 or d2 <= d0:
               H[x, y] = 0
           else:
               H[x, y] = 1

   new_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift * H)))
   new_img = cv2.normalize(new_img, None, 0, 255, cv2.NORM_MINMAX)
   new_img = new_img.astype(np.uint8)
   return new_img


if __name__ == "__main__":
   img1 = cv2.imread('1-2.png', 0)
   img2 = Filter(img1, 8)
   cv2.imshow('original1', img1)
   cv2.imshow('Processed3', img2)
   cv2.imwrite('Processed3.png', img2)
   cv2.waitKey(0)
   cv2.destroyAllWindows()

 结果图:

可以看到,通过对傅里叶变换后幅度谱进行部分滤波,可以消除图像中竖直的规律性噪声,效果不错。相对于单纯的去掉某几个噪点,边缘的黑影也能够很好的去除掉,可以说针对这个问题使用该局部滤波方法效果良好。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

F0reverBound

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值