逆滤波和维纳滤波在图像处理的Python代码

这是一个关于图像处理的课程作业,使用Python编程语言,结合OpenCV库实现了逆滤波和维纳滤波技术。提供的代码经过测试,确保功能正确。
摘要由CSDN通过智能技术生成

课程作业

代码测试过,是没问题的。

import matplotlib.pyplot as plt
import numpy as np
from numpy import fft

import math
import cv2

def make_PSF(kernel_size=15, angle=60):
    PSF = np.diag(np.ones(kernel_size))  # 初始模糊核的方向是-45度
    angle = angle + 45  # 抵消-45度的影响
    M = cv2.getRotationMatrix2D((kernel_size / 2, kernel_size / 2), angle, 1)  # 生成旋转算子
    PSF = cv2.warpAffine(PSF, M, (kernel_size, kernel_size), flags=cv2.INTER_LINEAR)  #实现旋转变换
    PSF = PSF / PSF.sum()                #使模糊核的权重和为1
    return PSF

#此函数扩展PSF0,使之与image0一样大小
def extension_PSF(image0,PSF0
  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
维纳滤波滤波是常用的用于模糊图像复原的方法。以下是Python中实现维纳滤波滤波的示例代码: 1. 维纳滤波: ```python import numpy as np import cv2 def weiner_filter(image, kernel, K): kernel /= np.sum(kernel) kernel_fft = np.fft.fft2(kernel) image_fft = np.fft.fft2(image) H = np.conj(kernel_fft) / (np.abs(kernel_fft) ** 2 + K) result = np.fft.ifft2(H * image_fft) result = np.abs(np.fft.fftshift(result)) return result # 读取图像和模糊核 image = cv2.imread('image.jpg', 0) # 灰度图像 kernel = np.ones((5, 5)) / 25 # 均匀模糊核 # 进行维纳滤波 restored_image = weiner_filter(image, kernel, K=0.01) # 显示原始图像和复原后的图像 cv2.imshow('Original Image', image) cv2.imshow('Restored Image', restored_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 上述代码中,`weiner_filter`函数实现了维纳滤波算法。它首先对输入的模糊核进行归一化处理,然后计算模糊核和输入图像的傅里叶变换。接着,根据维纳滤波器的公式,计算复原图像的傅里叶变换,并进行傅里叶变换得到复原图像。 2. 滤波: ```python import numpy as np import cv2 def inverse_filter(image, kernel): kernel /= np.sum(kernel) kernel_fft = np.fft.fft2(kernel) image_fft = np.fft.fft2(image) result = np.fft.ifft2(image_fft / kernel_fft) result = np.abs(np.fft.fftshift(result)) return result # 读取图像和模糊核 image = cv2.imread('image.jpg', 0) # 灰度图像 kernel = np.ones((5, 5)) / 25 # 均匀模糊核 # 进行滤波 restored_image = inverse_filter(image, kernel) # 显示原始图像和复原后的图像 cv2.imshow('Original Image', image) cv2.imshow('Restored Image', restored_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 滤波代码维纳滤波类似,不同之处在于维纳滤波器中的K项被省略了。滤波会对噪声非常敏感,容易引入伪影,因此在实际应用中往往使用维纳滤波。 需要注意的是,上述代码使用了numpy库和OpenCV库进行图像处理和显示,因此需要先安装这些库。此外,代码中假设图像文件名为'image.jpg',模糊核为一个5x5的均匀模糊核,你可以根据实际情况进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值