【数据分析与可视化】Scipy中的图像处理信号处理讲解与实战(附源码 超详细)

需要源码和图片集请点赞关注收藏后评论区留言私信~~~

一、Scipy的图像处理

简单的介绍一下SciPy在图像处理方面的应用,如果专业做图像处理当然还是建议使用OpenCV

1 图像平滑

图像平滑是指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度,改善图像质量的图像处理方法

图像平滑的方法包括:插值方法,线性平滑方法,卷积法等

ndimage.median_filter实现中值滤波

import numpy as np
from scipy import ndimage
from scipy import misc
import matplotlib.pyplot as plt
%matplotlib inline
image = misc.ascent()
aa = plt.subplot(1,3,1)
plt.title("title")
plt.imshow(image)
plt.axis('off')
plt.subplot(1,3,2)
plt.title("medi_filter")
filter = ndimage.median_filter(image,size=10)
#使用SciPy的中值滤波处理图片
plt.imshow(filter)
plt.axis('off')
plt.subplot(1,3,3)
plt.title("gausfilter")
blurred_face = ndimage.gaussian_filter(image, sigma = 7)#高斯滤波
plt.imshow(blurred_face)
plt.axis('off') 

 2 图像旋转和锐化

图像旋转是指图像以某一点为中心旋转一定的角度,形成一幅新的图像的过程

图像锐化就是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰。图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变的清晰

经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变的清晰。从频域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰

图像的旋转和锐化

image = misc.ascent() #显示全部图片
plt.subplot(131)
plt.title("title")
plt.imshow(image)
plt.axis('off')
plt.subplot(132)
rotate = ndimage.rotate(image,60)
plt.title("rotate")
plt.imshow(rotate)
plt.axis('off') #边缘检测
plt.subplot(133)
prewitt = ndimage.prewitt(image)
plt.title("prewitt")
plt.imshow(prewitt)
plt.axis('off')

 二、Scipy的信号处理

信号处理(signal processing)是指对信号进行提取、变换、分析、综合等处理,以便抽取出有用信息的过程。信号处理基本的内容有变换、滤波、调制、解调、检测以及谱分析和估计等

Python中的scipy.signal模块专门用于信号处理

1 数据重采样

重采样指将数据序列从一个频率转化为另一个频率进行处理的过程。将高频率数据转化为低频率数据为降采样,低频率转化为高频率为升采样。SciPy中的signal.resample()函数可以将信号重采样成n个点

信息采样

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
t = np.linspace(0, 5, 100)
x = np.sin(t)
x_resampled = signal.resample(x, 20)
plt.plot(t, x)
plt.plot(t[::5], x_resampled, 'k*')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

2 信号的卷积

卷积是两个变量在某范围内相乘后求和的结果。一维卷积常用于序列模型,如自然语言处理领域。二维卷积常用于计算机视觉、图像处理领域

import numpy as np
import matplotlib.pyplot as plt
digital=np.concatenate((np.zeros(20),np.ones(20),np.zeros(20)))
print(digital)
norm_h=np.hamming(80)/np.sum(np.hamming(80))
print(norm_h)
res=np.convolve(digital,norm_h)
plt.plot(digital,color='k',label='digital')
plt.plot(norm_h,color='b',label='normal_hamming')
plt.plot(res,color='g',label='convolve_result')
plt.legend()
plt.show()

 3 信号的时频分析

信号的表示是信息分析与处理的核心问题之一。在信号分析中,最基本的变量是时间和频率。信号一般用时间作为自变量表示,通过时频变换,信号也可以使用频率作为自变量表示。常用的变换方法有傅里叶变换、小波变换等

 SciPy中利用fft方法将信号从时域变换到频率,用ifft方法将频域信号逆变换回时域

 信号的傅里叶变换

import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fft,ifft
np.random.seed(971)
x=np.arange(200)
res=fft(data)
data_new=ifft(res)
data=np.random.randn(200)+np.sin(x)
plt.figure(figsize=(12,5))

plt.subplot(1,3,1)
plt.plot(data,linewidth=1,color='k',alpha=0.8)
plt.xlabel('orignal signal')
plt.subplot(1,3,2)
plt.plot(res,linewidth=1,color='k',alpha=0.8)
plt.xlabel('FFT signal')
plt.subplot(1,3,3)
plt.plot(data_new,linewidth=1,color='k',alpha=0.8)
plt.xlabel('construct signal')
plt.show()

 创作不易 觉得有帮助请点赞关注收藏~~~

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

showswoller

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值