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

无约束滤波器

作者头像
裴来凡
发布2022-05-29 09:35:44
1620
发布2022-05-29 09:35:44
举报
文章被收录于专栏:图像处理与模式识别研究所
代码语言:javascript
复制
import math
import os
import numpy as np
from numpy import fft
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
def motion_process(image_size,motion_angle):
    PSF=np.zeros(image_size)
    center_position=(image_size[0]-1)/2
    slope_tan=math.tan(motion_angle*math.pi/180)
    slope_cot=1/slope_tan
    if slope_tan<=1:
        for i in range(15):
            offset=round(i*slope_tan)
            PSF[int(center_position+offset),int(center_position-offset)]=1
        return PSF/PSF.sum()#对点扩散函数进行归一化亮度
    else:
        for i in range(15):
            offset=round(i*slope_cot)
            PSF[int(center_position-offset),int(center_position+offset)]=1
        return PSF/PSF.sum()
def make_blurred(input,PSF,eps):
    input_fft=fft.fft2(input)#进行二维数组的傅里叶变换
    PSF_fft=fft.fft2(PSF)+eps
    blurred=fft.ifft2(input_fft*PSF_fft)
    blurred=np.abs(fft.fftshift(blurred))
    return blurred
def inverse(input, PSF, eps):
    input_fft = fft.fft2(input)
    PSF_fft = fft.fft2(PSF) + eps  # 噪声功率,这是已知的,考虑epsilon
    result = fft.ifft2(input_fft / PSF_fft)  # 计算F(u,v)的傅里叶反变换
    result = np.abs(fft.fftshift(result))
    return result
def put(path):
    img=cv2.imread(path,1)
    img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    img_h=img.shape[0]
    img_w=img.shape[1]
    #进行运动模糊处理
    PSF=motion_process((img_h,img_w),60)
    blurred=np.abs(make_blurred(img,PSF,1e-3))
    #逆滤波
    res1=inverse(blurred,PSF,1e-3)
    #添加噪声
    blurred_noisy=blurred+0.1*blurred.std()*np.random.standard_normal(blurred.shape)
    #对添加噪声的图像进行逆滤波
    res2=inverse(blurred_noisy,PSF,0.2+1e-3)
    plt.subplot(2,3,1),plt.axis('off'),plt.imshow(blurred,plt.cm.gray),plt.title('运动模糊')
    plt.subplot(2,3,3),plt.axis('off'),plt.imshow(res1,plt.cm.gray),plt.title('逆滤波')
    plt.subplot(2,3,4),plt.axis('off'),plt.imshow(blurred_noisy,plt.cm.gray),plt.title('有噪声且运动模糊')
    plt.subplot(2,3,6),plt.axis('off'),plt.imshow(res2,plt.cm.gray),plt.title('逆滤波')
    plt.savefig('C:/Users/xpp/Desktop/result.png')
    plt.show()
put(r'C:/Users/xpp/Desktop/Lena.png')

算法:无约束滤波器是对退化的图像进行二位傅里叶变换;计算系统点扩散函数的二位傅里叶变换;引入 H(fx,fy)计算并且对结果进行逆傅里叶变换。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档