python裁剪函数 用python对图像进行裁剪

python PIL如何才能把图片修改成正方形或者任意尺寸而不产生挤压改变图像尺寸有两类方法:
一是缩放(resize),即重采样 。这时,如果图像纵横比发生变化就会导致“挤压” 。
二是裁剪(crop) 。当然图只能越裁越?。徊还梢耘浜纤醴牛?先放大再裁剪 。
既然题主要求不能“挤压” , 那就只能裁剪了 。函数名我给出来了,具体用法题主自己研究 。
Python 简单的扩音,音频去噪,静音剪切数字信号是通过对连续的模拟信号采样得到的离散的函数 。它可以简单看作一个以时间为下标的数组 。比如,x[n],n为整数 。比如下图是一个正弦信号(n=0,1, ..., 9):
对于任何的音频文件,实际上都是用这种存储方式,比如,下面是对应英文单词“skip”的一段信号(只不过由于点太多,笔者把点用直线连接了起来):
衡量数字信号的 能量(强度),只要简单的求振幅平方和即可:
我们知道,声音可以看作是不同频率的正弦信号叠加 。那么给定一个声音信号(如上图),怎么能够知道这个信号在不同频率区段上的强度呢?答案是使用离散傅里叶变换 。对信号x[n], n=0, ..., N-1,通常记它的离散傅里叶变换为X[n],它是一个复值函数 。
比如,对上述英文单词“skip”对应的信号做离散傅里叶变换,得到它在频域中的图像是:
可以看到能量主要集中在中低音部分(约16000Hz以下) 。
在频域上,也可以计算信号的强度,因为根据Plancherel定理,有:
对于一般的语音信号,长度都至少在1秒以上 , 有时候我们需要把其中比如25毫秒的一小部分单独拿出来研究 。将一个信号依次取小段的操作,就称作分帧 。技术上,音频分帧是通过给信号加一系列的 窗函数 实现的 。
我们把一种特殊的函数w[n],称作窗函数,如果对所有的n,有0=w[n]=1,且只有有限个n使得w[n]0 。比如去噪要用到的汉宁窗,三角窗 。
汉宁窗
三角窗
我们将平移的窗函数与原始信号相乘,便得到信号的“一帧”:
w[n+d]*x[n]
比如用长22.6毫秒的汉宁窗加到“skip”信号大约中间部位上 , 得到一帧的信号:
可见除一有限区间之外,加窗后的信号其他部分都是0 。
对一帧信号可以施加离散傅里叶变换(也叫短时离散傅里叶变换),来获取信号在这一帧内(通常是很短时间内) , 有关频率-能量的分布信息 。
如果我们把信号按照上述方法分成一帧一帧,又将每一帧用离散傅里叶变换转换到频域中去,最后将各帧在频域的图像拼接起来,用横坐标代表时间,纵坐标代表频率 , 颜色代表能量强度(比如红色代表高能,蓝色代表低能) , 那么我们就构造出所谓 频谱图。比如上述“skip”发音对应的信号的频谱图是:
(使用5.8毫秒的汉宁窗)
从若干帧信号中,我们又可以恢复出原始信号 。只要我们适当选取窗口大小,以及窗口之间的平移距离L,得到 ..., w[n+2L], w[n+L], w[n], w[n-L], w[n-2L], ...,使得对k求和有:
从而简单的叠加各帧信号便可以恢复出原始信号:
最后,注意窗函数也可以在频域作用到信号上,从而可以起到取出信号的某一频段的作用 。
下面简单介绍一下3种音效 。
1. 扩音
要扩大信号的强度,只要简单的增大信号的“振幅” 。比如给定一个信号x[n],用a1去乘,便得到声音更大的增强信号:
同理,用系数0a1去乘,便得到声音变小的减弱信号 。
2. 去噪(降噪)
对于白噪音 , 我们可以简单的用“移动平均滤波器”来去除 , 虽然这也会一定程度降低声音的强度,但效果的确不错 。但是,对于成分较为复杂,特别是频段能量分布不均匀的噪声,则需要使用下面的 噪声门 技术 , 它可以看作是一种“多带通滤波器” 。

推荐阅读