基于频谱信息的图像去噪与恢复——使用约束最小二乘方滤波法

      大家好,我是带我去滑雪!

      随着科学技术的不断发展,信息的交流和获取已不再受到时空的限制,已经成为人们日常生活中不可或缺的一部分。图像作为人类信息交流中的重要载体,起着不可替代的作用。频谱图像去噪复原方法是一种基于频域的图像处理技术,通过对图像的频谱进行分析和修复来实现去噪和复原。其基本原理是利用图像的频谱特性对噪声进行滤波或修复,然后通过逆变换将处理后的频谱转换回空域得到修复后的图像。在频域中,可以分析图像的频谱特性。频谱表示了图像中不同频率成分的能量分布情况。通过观察频谱,可以了解图像中的噪声和信号特征,从而有针对性地进行修复。根据噪声的特征,在频域中对图像的频谱进行滤波,可以设计相应的滤波器来减弱或去除噪声成分。常用的频域滤波方法包括低通滤波、高通滤波、带通滤波等,它们可以根据噪声频率范围选择适当的滤波器。

       本期使用约束最小二乘方滤波法对图像进行去噪还原,该方法基于最小二乘方准则,可以有效克服逆波算法的不稳定性,并在应用滤波过程中加入一些额外的约束条件,以改善噪声去除效果。下面开始python实战!

(1)导入相关模块

import cv2

import numpy as np

from PIL import Image

import matplotlib.pyplot as plt

(二)自定义约束最小二乘方滤波函数

def getMotionDsf(shape, angle, dist):

        xCenter = (shape[0] - 1) / 2

        yCenter = (shape[1] - 1) / 2

        sinVal = np.sin(angle * np.pi / 180)

        cosVal = np.cos(angle * np.pi / 180)

        PSF = np.zeros(shape)

        for i in range(dist):

            xOffset = round(sinVal * i)

            yOffset = round(cosVal * i)

            PSF[int(xCenter - xOffset), int(yCenter + yOffset)] = 1

        return PSF / PSF.sum()

    def makeBlurred(image, PSF, eps):

        fftImg = np.fft.fft2(image)

        fftPSF = np.fft.fft2(PSF) + eps

        fftBlur = np.fft.ifft2(fftImg * fftPSF)

        fftBlur = np.abs(np.fft.fftshift(fftBlur))

        return fftBlur

    def wienerFilter(input, PSF, eps, K=0.01):

        fftImg = np.fft.fft2(input)

        fftPSF = np.fft.fft2(PSF) + eps

        fftWiener = np.conj(fftPSF) / (np.abs(fftPSF)**2 + K)

        imgWienerFilter = np.fft.ifft2(fftImg * fftWiener)

        imgWienerFilter = np.abs(np.fft.fftshift(imgWienerFilter))

        return imgWienerFilter

    def getPuv(image):

        h, w = image.shape[:2]

        hPad, wPad = h - 3, w - 3

        pxy = np.array([[0, -1, 0], [-1, 4, -1], [0, -1, 0]])

        pxyPad = np.pad(pxy, ((hPad//2, hPad - hPad//2), (wPad//2, wPad - wPad//2)), mode='constant')

        fftPuv = np.fft.fft2(pxyPad)

        return fftPuv

    def leastSquareFilter(image, PSF, eps, gamma=0.01):

        fftImg = np.fft.fft2(image)

        fftPSF = np.fft.fft2(PSF)

        conj = fftPSF.conj()

        fftPuv = getPuv(image)

        # absConj = np.abs(fftPSF) ** 2

        Huv = conj / (np.abs(fftPSF)**2 + gamma * (np.abs(fftPuv)**2))

        ifftImg = np.fft.ifft2(fftImg * Huv)

        ifftShift = np.abs(np.fft.fftshift(ifftImg))

        imgLSFilter = np.uint8(cv2.normalize(np.abs(ifftShift), None, 0, 255, cv2.NORM_MINMAX))

        return imgLSFilter

(3)导入需要去噪的图片和设置相应参数

    img = cv2.imread('Fig0526a.png',0)

    hImg, wImg = img.shape[:2]

    PSF = getMotionDsf((hImg, wImg), 45, 100) 

    imgBlurred = np.abs(makeBlurred(img, PSF, 1e-6)) 

    scale = 0.01 

    noisy = imgBlurred.std() * np.random.normal(loc=0.0, scale=scale, size=imgBlurred.shape)

    imgBlurNoisy = imgBlurred + noisy 

    imgWienerFilter = wienerFilter(imgBlurNoisy, PSF, scale, K=0.01) 

    imgLSFilter = leastSquareFilter(imgBlurNoisy, PSF, scale, gamma=0.01)

    plt.figure(figsize=(9, 7))

    plt.subplot(231), plt.title("blurred image (dev=0.01)"), plt.axis('off'), plt.imshow(imgBlurNoisy, 'gray')

    plt.subplot(232), plt.title("Wiener filter"), plt.axis('off'), plt.imshow(imgWienerFilter, 'gray')

    plt.subplot(233), plt.title("least square filter"), plt.axis('off'), plt.imshow(imgLSFilter, 'gray')

    scale = 0.1

    noisy = imgBlurred.std() * np.random.normal(loc=0.0, scale=scale, size=imgBlurred.shape) 

    imgBlurNoisy = imgBlurred + noisy

    imgWienerFilter = wienerFilter(imgBlurNoisy, PSF, scale, K=0.01)

    imgLSFilter = leastSquareFilter(imgBlurNoisy, PSF, scale, gamma=0.1)

    plt.subplot(234), plt.title("blurred image (dev=0.1)"), plt.axis('off'), plt.imshow(imgBlurNoisy, 'gray')

(4)保存图片

   plt.subplot(235), plt.title("Wiener filter"), plt.axis('off'), plt.imshow(imgWienerFilter, 'gray')

    plt.subplot(236), plt.title("least square filter"), plt.axis('off'), plt.imshow(imgLSFilter, 'gray')

    plt.tight_layout()

    plt.savefig("squares2.png",

            bbox_inches ="tight",

            pad_inches = 1,

            transparent = True,

            facecolor ="w",

            edgecolor ='w',

            dpi=300,

            orientation ='landscape')

输出结果:


更多优质内容持续发布中,请移步主页查看。

   点赞+关注,下次不迷路!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/134166.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四:内核空间内存分配

目录 内核空间内存分配 伙伴系统 slab分配器 slab分配内存 主要结构体 vmalloc 内核空间内存分配 首先从内核空间开始,讲解内存管理模式。 主要分为三种方式: 伙伴系统 解决了外部碎片问题,针对大块内存分配设计 Linux中的内存管理…

水一下文章

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

selenium元素定位---ElementClickInterceptedException(元素点击交互异常)解决方法

1、异常原因 在编写ui自动化时&#xff0c;执行报错元素无法点击&#xff1a;ElementClickInterceptedException 具体报错&#xff1a;selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <span class"el-c…

Linux系统:OpenSSH7.4p升级到9.0p(服务器漏洞)

清华大学开源软件镜像站下载地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz 一、升级 0、安装Telnet &#xff08;1&#xff09;为防止安装失败&#xff0c;无法用ssh做远程连接&#xff0c;因此先安装telnet yum…

#循循渐进学51单片机#定时器与数码管#not.4

1、熟练掌握单片机定时器的原理和应用方法。 1&#xff09;时钟周期&#xff1a;单片机时序中的最小单位&#xff0c;具体计算的方法就是时钟源分之一。 2&#xff09;机器周期&#xff1a;我们的单片机完成一个操作的最短时间。 3)定时器&#xff1a;打开定时器“储存寄存器…

机器学习 day34(机器学习项目的完整周期、精确度和召回率、F1)

机器学习项目的完整周期 第一步&#xff0c;决定项目是什么。第二步&#xff0c;收集数据。第三步&#xff0c;训练模型&#xff0c;进行错误分析并改进模型&#xff0c;可能会回到第二步。第四步&#xff0c;当模型足够好后&#xff0c;部署在生产环境中&#xff0c;继续监控…

Arcgis提取点数据经纬度

Arcgis提取点数据经纬度 现已打开tiff影像和采样点的shape文件。目标是提取采样点的经纬度信息然后导出。 打开数据管理工具-要素-添加XY坐标 在点的图层上右击打开属性表时&#xff0c;经纬度信息已经添加到属性表中。 在属性表的左上角中点击导出&#xff0c;导出为文本文…

C# 模拟button按钮批量锁住与打开

项目需求&#xff1a; 当winform界面上存在多个按钮时&#xff08;大于2个&#xff09;&#xff0c;用户需求为当点击其中一个按钮后&#xff0c;其它按钮全部为禁用&#xff0c;当被点击的按钮后台逻辑执行完成后&#xff0c;再释放所有按钮。用户可再次点击其它按钮。 此案…

js实现websocket服务端和客户端

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

idea移除许可证

目录 一、介绍 二、操作步骤 一、介绍 当自己的idea日期要到了&#xff0c;又想续上&#xff0c;但是覆盖不了之前的日期&#xff0c;新的没办法生效。那么就要把原先的许可证先移除&#xff0c;再重新续上新的。 二、操作步骤 1.点击idea的右上角的这个展开 2.选择帮助…

【简单教程】利用Net2FTP构建免费个人网盘,实现便捷的文件管理

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一&#xff0c;特别是智能设备的大面积使用&#xff0c;无论是个人…

tuxera ntfs 2023 破解安装包最新百度网盘下载地址

tuxera ntfs 2023 破解安装包是一个mac读写ntfs磁盘工具允许您访问&#xff0c;它允许您访问 NFTS 驱动器上的文件。该应用程序提供访问访问 Mac 设备中 NFTS 格式文件的驱动力&#xff0c;因此您有权基于格式文件进行无困难的访问 Windows 数据。在发生电力灾难或断电时使用防…

算法训练 第二周

二、反转链表 本题给我们了一个单链表的头节点head&#xff0c;要求我们把这个单链表的连接顺序进行逆置&#xff0c;并返回逆置后的链表头节点。 1.头插法 我们需要先创建一个新的头节点ph&#xff0c;然后遍历给出的单链表&#xff0c;把遍历到的每一个节点用头插法接到ph的…

3D数字孪生:从3D数据采集到3D内容分析

数字孪生&#xff08;Digital Twin&#xff09;是物理对象、流程或系统的虚拟复制品&#xff0c;用于监控、分析和优化现实世界的对应物。 这些数字孪生在制造、工程和城市规划等领域变得越来越重要&#xff0c;因为它们使我们能够在现实世界中实施改变之前模拟和测试不同的场景…

算法宝典2——Java版本(此系列持续更新,这篇文章目前3道)(有题目的跳转链接)(此份宝典包含了二叉树的算法题)

注&#xff1a;由于字数的限制&#xff0c;我打算把算法宝典做成一个系列&#xff0c;一篇文章就20题&#xff01;&#xff01;&#xff01; 目录 一、二叉树的算法题&#xff08;目前3道&#xff09; 1. 平衡二叉树&#xff08;力扣&#xff09; 2. 对称二叉树&#xff0…

MySQL最新版8.1.0安装配置教程

目录 目录 前言 安装流程图 1&#xff0c;MySQL数据库是什么? 2&#xff0c;下载zip压缩包 3&#xff0c;解压到要安装的目录 4,添加环境变量 4.1,找到环境变量 4.2,进行环境变量的添加 5.新建mysql 配置文件 6、安装mysql服务 7、初始化数据文件 8、启动mysql …

Java面向对象编程

下列关于线性链表的叙述中&#xff0c;正确的是&#xff08; &#xff09; A. 各数据结点的存储空间可以不连续&#xff0c;但它们的存储顺序与逻辑顺序必须一致 B. 各数据结点的存储顺序与逻辑顺序可以不一致&#xff0c;但它们的存储空间必须连续 C. 进行插入与删除时&#x…

gitlab操作

1. 配置ssh 点击访问 2. 创建新分支与切换新分支 git branch 新分支名 // 创建 git checkout 新分支名 // 切换到新分支3. 查看当前分支 git branch*所指的就是当前所在分支 4. 本地删除文件后与远程git同步 git add -A git commit -m "del" git push

如何根据性能需求进行场景设计?

场景设计一 探索 测试环境 客户端: win10 这里可以用linux,但没用,因为想直观查看结果。 被测环境:linux X86 4核CPU16G内存 被测接口:登录接口,没有做数据驱动。 在测试执行前,先使用influxSQL把influxdb的数据清理一下,以防影响结果查看。 有这么一个需求,要求系…

cs224w_colab3_2023 And cs224w_colab4_2023学习笔记

class GNNStack(torch.nn.Module):def __init__(self, input_dim, hidden_dim, output_dim, args, embFalse):super(GNNStack, self).__init__() #这里的继承表示参见 https://blog.csdn.net/wanzew/article/details/106993425 # 继承时运行继承类别的函数 总之 __mro__的目的…