首页 > 其他分享 >数字图像处理之二维傅里叶变换

数字图像处理之二维傅里叶变换

时间:2024-06-20 10:58:46浏览次数:10  
标签:plt img 数字图像处理 cv2 back 二维 magnitude np 傅里叶

二维连续傅里叶变换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二维离散傅里叶变换

在这里插入图片描述

二维离散傅里叶变换的性质

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


from builtins import print, int

import cv2
import numpy as np
from matplotlib import pyplot as plt


# shape: 600 * 600
img = cv2.imread('../pic/Fig0438(a)(bld_600by600).tif', 0)
# 返回的是复数 dtype.complex128
fft = np.fft.fft2(img)
print("fft is: ", fft)
# 平移
fftshift = np.fft.fftshift(fft)
print("fftshift is: ", fftshift)
# 频谱 dtype.float64 magnitude_spectrum[180,180] = 329.2611
magnitude_spectrum = 20 * np.log(np.abs(fftshift))
print(magnitude_spectrum[300, 300])

# 如果想要用cv2.imshow()显示
# magnitude_spectrum_uint8 = np.uint8(255 * (magnitude_spectrum / np.max(magnitude_spectrum)))
# cv2.imshow("origin", img)
# cv2.imshow("magnitude_spectrum_uint8", magnitude_spectrum_uint8)
# cv2.waitKey(0)
rows, cols = img.shape
crow, ccol = rows / 2, cols / 2
# 频率中心区域添加60x60的蒙板, 相当于过滤了低频部分
fftshift[int(crow - 30):int(crow+30), int(ccol-30):int(crow+30)] = 0
magnitude_spectrum_filter = 20 * np.log(np.abs(fftshift)+0.0000001)
# 中心平移回到左上角
f_ishift = np.fft.ifftshift(fftshift)
# 使用FFT逆变换, 结果是复数
img_back = np.fft.ifft2(f_ishift)
img_back = np.abs(img_back)
# img_back_uint8 = np.uint8(255 * (img_back / np.max(img_back)))
# cv2.imshow("img_back_uint8", img_back_uint8)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
plt.subplot(221)
plt.imshow(img, cmap='gray')
plt.title('origin image')
# 省略x, y坐标
plt.xticks([]), plt.yticks([])
plt.subplot(222), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('magnitude_spectrum'), plt.xticks([]), plt.yticks([])
plt.subplot(223), plt.imshow(magnitude_spectrum_filter, cmap='gray')
plt.title('High Pass Filter'), plt.xticks([]), plt.yticks([])
plt.subplot(224), plt.imshow(img_back, cmap='gray')
plt.title("High Pass Result"), plt.xticks([]), plt.yticks([])
plt.show()



"""
Created by HenryMa on 2020/8/27
"""

__author__ = 'HenryMa'

from builtins import print, int

import cv2
import numpy as np


img = cv2.imread('../pic/Fig0438(a)(bld_600by600).tif', 0)
dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)
# 平移还是要靠numpy
dft_shift = np.fft.fftshift(dft)
magnitude_spectrum = 20 * np.log(cv2.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))
# float32
print(dft.dtype)

rows, cols = img.shape
crow, ccol = int(rows / 2), int(cols / 2)

# 创建蒙板
mask = np.ones((rows, cols, 2), np.uint8)
msize = 70
mask[crow-int(msize/2): crow+int(msize/2), ccol-int(msize/2): ccol+int(msize/2)] = 0
fshift = dft_shift * mask
f_ishift = np.fft.ifftshift(fshift)

# 此时img_back为复数
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1])

cv2.imshow('origin', img)
cv2.imshow('img_back', img_back)
cv2.waitKey(0)
cv2.destroyAllWindows()

标签:plt,img,数字图像处理,cv2,back,二维,magnitude,np,傅里叶
From: https://blog.csdn.net/mohen_777/article/details/139685810

相关文章

  • 【二维差分】2132. 用邮票贴满网格图
    本文涉及知识点二维差分LeetCode2132.用邮票贴满网格图给你一个mxn的二进制矩阵grid,每个格子要么为0(空)要么为1(被占据)。给你邮票的尺寸为stampHeightxstampWidth。我们想将邮票贴进二进制矩阵中,且满足以下限制和要求:覆盖所有空格子。不覆盖任何......
  • 二维码分班查询系统你还不会用?
    分班查询系统,已经成为许多学校管理分班流程的得力助手。当新学期伊始,学校需要进行分班,而传统的手工分班方式不仅耗时,还容易出错。这时,一个智能的分班查询系统就显得尤为重要。作为老师,您可能已经意识到,分班不仅仅是简单的名单分配,而它关系到学生的学习环境和未来发展。易......
  • 二维码的容量大小
    突然想看看二维码最多能存储多少数据,正好有个二维码生成插件测试了下中文是426个(无回车换行符)英文是1270个但是这么多字符的情况识别就比较困难了,对清晰度要求高,最好是无压缩网上查的是500多个汉字,参考下......
  • 【二维码】
    二维码(QuickResponseCode,简称QRCode)是一种能够存储大量信息的编码方式,广泛应用于各种场合,如移动支付、信息传递等。在程序编写中,生成二维码通常需要使用专门的库或框架。以下是使用Python语言和qrcode库生成二维码的一个简单示例:首先,确保你的Python环境已经安装了qrcod......
  • 轻松便捷,文件分享新选择,易易二维码
    在数字化快速发展的今天,文件分享与传输已经成为我们日常生活和工作中不可或缺的一部分。然而,随着文件体积的增大和数量的增多,如何高效、安全、便捷地分享文件成为了许多人头疼的问题。今天,我要向大家推荐一款革命性的在线工具——易易二维码,它将彻底改变你的文件分享体验。一、易......
  • 请编写一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维函数组,求出
    请编写一个函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中。二维数组中的数已在主函数中赋予。#include<stdio.h>#defineM3#defineN4voidfun(inttt[M][N],intpp[N]){for(int......
  • 下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数 fun(int a[][N]),该
    下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N]),该函数的功能是:使数组左下半三角元素中的值全部置成0。#include<stdio.h>#defineN3voidfun(inta[][N]){for(inti=1;i<N;i++){for(intj=0;j<i;j++){......
  • jQuery生成微信二维码名片扫码添加联系人代码
    jQuery生成微信二维码名片扫码添加联系人代码,可以设置联系人姓名,公司,职务,地址,手机,邮箱,网址,备注信息生成二维码。 js代码 <scriptsrc="js/jquery.min.js"></script><scriptsrc="js/qrcode.js"></script><script>varname,company,title,address,mobile,e......
  • android生成二维码实例
     android生成二维码实例生成二维码工具类packagecom.catanddog.utils;importandroid.graphics.Bitmap;importandroid.graphics.Color;importandroid.text.TextUtils;importandroidx.annotation.ColorInt;importandroidx.annotation.Nullable;importcom.goog......
  • excel中加水印以及二维码
    1.如何给excel添加二维码其实二维码就是一张图片,把生成的二维码作为图片返回给excel对应的栏位就可以达到目的,代码如下:点击查看代码publicBitmapGetBitmap(stringcode,ExcelPackagepackage){varsheet=package.Workbook.Worksheets[0];//创建QR码生成器......