python图像音频处理-通过图像傅里叶变换判断相位和幅度的重要性

python图像音频处理-判断相位和幅度的重要性

这一步骤思想很简单。分别将两个图像或两个音频做FFT,再选取图像1/音频1的幅度,结合上图像2/音频2的相位,再做IFFT。看返回的图像或音频更接近图像1/音频1,还是图像2/音频2。

若是前者,则说明幅度的信息量更重要;若是后者,则说明相位的信息量更重要。


1.图像处理

头文件:

import cv2
import numpy as np
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt
from matplotlib.pylab import mpl
import IPython.display as ipd

第一步:两张图片做FFT

img = cv2.imread('D:/classofmathpicture/sample_pic.tiff',1)
plt.figure(figsize=(30, 20)); 
plt.subplot(231),plt.imshow(img),plt.title('picture')
 
 #根据公式转成灰度图
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#显示灰度图
plt.subplot(232),plt.imshow(img,'gray'),plt.title('original')
 
 #进行傅立叶变换,并显示结果
fft2 = np.fft.fft2(img)
plt.subplot(233),plt.imshow(np.abs(fft2),'gray'),plt.title('fft2')
 
 #将图像变换的原点移动到频域矩形的中心,并显示效果
shift2center = np.fft.fftshift(fft2)
plt.subplot(234),plt.imshow(np.abs(shift2center),'gray'),plt.title('shift2center')
 
 #对傅立叶变换的结果进行对数变换,并显示效果
log_fft2 = np.log(1 + np.abs(fft2))
plt.subplot(235),plt.imshow(log_fft2,'gray'),plt.title('log_fft2')
 
 #对中心化后的结果进行对数变换,并显示结果
log_shift2center = np.log(1 + np.abs(shift2center))
plt.subplot(236),plt.imshow(log_shift2center,'gray'),plt.title('log_shift2center')
plt.show()

img1:
在这里插入图片描述
img2
程序和上述一样。唯一不同的是这里需要将img2尺寸改成和img1一样,所以需要在做完灰度化要加上该语句:

img2=cv2.resize(img2,(img.shape[1],img.shape[0]))   #把尺寸换成上个图像一样当,方便后面幅度和相位当错位相乘

在这里插入图片描述

第二步:比较幅度和相位信息量的重要性

P1=np.abs(shift22center)*np.exp2(np.angle(shift2center)*1j)
P2=np.abs(shift2center)*np.exp2(np.angle(shift22center)*1j)
ifft_1=np.fft.ifft2(fft2)
ifft_2=np.fft.ifft2(fft22)
p1=np.fft.ifft2(P1)
p2=np.fft.ifft2(P2)
plt.figure(figsize=(30, 20))
plt.subplot(221)
plt.imshow(np.abs(ifft_1),cmap='gray'),plt.title('img1')
plt.subplot(222)
plt.imshow(np.abs(ifft_2),cmap='gray'),plt.title('img2')
plt.subplot(223)
p1=np.log(1 + np.abs(p1))
plt.imshow(np.abs(p1),cmap='gray'),plt.title('img1_angle+img2_abs')
plt.subplot(224)
p2=np.log(1 + np.abs(p2))
plt.imshow(np.abs(p2),cmap='gray'),plt.title('img1_abs+img2_angle');

在这里插入图片描述

结论: 可以从这张图看出,合成图与选取相位的图像更接近,说明相位信息更重要

2.音频处理

第一步:读取音频

import librosa
import librosa.display
# 读取音频文件
filepath = 'D:\\CloudMusic\\'
filename = filepath + 'summertime.mp3'
x, sr = librosa.load(filename, sr=None)  # x--音频时间序列(一维数组) ; sr--音频的采样率

filename1 = filepath + 'test2.mp3'
y, sr = librosa.load(filename1, sr=None,duration=len(x)/sr)  # x--音频时间序列(一维数组) ; sr--音频的采样率
plt.subplot(211),plt.title('music1 and music2')
plt.plot(x)
plt.subplot(212)
plt.plot(y)
print('总时长为:',len(y)/sr)

在这里插入图片描述

第二步:比较幅度和相位信息量的重要性

fft_x=np.fft.fft(x)
abs_x=np.abs(fft_x)                # 取复数的绝对值,即复数的模(双边频谱)
angle_x=np.angle(fft_x)              #取复数的角度

fft_y=np.fft.fft(y)
abs_y=np.abs(fft_y)                # 取复数的绝对值,即复数的模(双边频谱)
angle_y=np.angle(fft_y)              #取复数的角度

zz1=np.fft.ifft(np.exp2(angle_x*1j)*abs_y)
zz2=np.fft.ifft(abs_x*np.exp2(angle_y*1j))

for i in range(int(len(zz1)/50)):     #为了消去两边当尖峰,通过一个较为宽当窗,在不影响数据量当情况下使数据变平滑
    zz1[i]=0
    zz1[len(zz1)-i-1]=0
    zz2[i]=0
    zz2[len(zz1)-i-1]=0    
plt.figure(figsize=(10, 5))
plt.subplot(221)
plt.plot(zz1) 
plt.title('z1_abs+z2_angle')
 
plt.subplot(222)
plt.plot(zz2)   
plt.title('z1_angle+z2_abs')

plt.subplot(223)
plt.plot(x)
plt.title('z1')
plt.subplot(224)
plt.plot(y)
plt.title('z2');

在这里插入图片描述

通过图像,不是很能分辨合成音频更接近哪一种情况。所以下面输出合成音频进行试听

第三步:在Jupyter notebook上试听合成音频

在这里插入图片描述
CSDN不能上传音频,所以直接上传了资源

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值