SciPy模块应用
1.图像模糊
图像的高斯模糊是非常经典的图像卷积例子。本质上,图像模糊就是将(灰度)图像I 和一个高斯核进行卷积操作:
,其中
是标准差为σ的二维高斯核。高斯模糊通常是其他图像处理操作的一部分,比如图像插值操作、兴趣点计算以及很多其他应用。SciPy 有用来做滤波操作的scipy.ndimage.filters 模块。该模块使用快速一维分离的方式来计算卷积。eg:
from PIL import Image
from numpy import *
from scipy.ndimage import filters
im = array(Image.open('empire.jpg').convert('L'))
im2 = filters.gaussian_filter(im,) %第二个参数表示标准差
随着σ 的增加,一幅图像被模糊的程度。σ 越大,处理后的图像细节丢失越多。如果打算模糊一幅彩色图像,只需简单地对每一个颜色通道进行高斯模糊:
im = array(Image.open('empire.jpg'))
im2 = zeros(im.shape)
for i in range():
im2[:,:,i] = filters.gaussian_filter(im[:,:,i],)
im2 = uint8(im2)

原始图像 使用σ=5的高斯滤波器
2.图像导数
在很多应用中图像强度的变化情况是非常重要的信息。强度的变化可以用灰度图像I(对于彩色图像,通常对每个颜色通道分别计算导数)的x和y 方向导数Ix 和Iy 进行描述。图像的梯度向量为
。梯度有两个重要的属性,一是梯度的大小:
,它描述了图像强度变化的强弱,一是梯度的角度:
,描述了图像中在每个点(像素)上强度变化最大的方向。NumPy 中的arctan2() 函数返回弧度表示的有符号角度,角度的变化区间为-π...π。可以用离散近似的方式来计算图像的导数。图像导数大多数可以通过卷积简单地实现:
。
对于Dx 和Dy,通常选择Prewitt 滤波器:

或者Sobel 滤波器:

这些导数滤波器可以使用scipy.ndimage.filters 模块的标准卷积操作来简单地实现:
from PIL import Image
from numpy import *
from scipy.ndimage import filters
im = array(Image.open('empire.jpg').convert('L')) #转化为灰度图像
# Sobel 导数滤波器
imx = zeros(im.shape)
filters.sobel(im,,imx)
imy = zeros(im.shape)
filters.sobel(im,,imy)
magnitude = sqrt(imx**+imy**)
上面的脚本使用Sobel 滤波器来计算x 和y 的方向导数,以及梯度大小。sobel() 函数的第二个参数表示选择x 或者y 方向导数,第三个参数保存输出的变量。在两个导数图像中,正导数显示为亮的像素,负导数显示为暗的像素。灰色区域表示导数的值接近于零。
上述计算图像导数的方法有一些缺陷:在该方法中,滤波器的尺度需要随着图像分辨率的变化而变化。为了在图像噪声方面更稳健,以及在任意尺度上计算导数,可以使用高斯导数滤波器:
。
之前用于模糊的filters.gaussian_filter() 函数可以接受额外的参数,用来计算高斯导数。可以简单地按照下面的方式来处理:
sigma = # 标准差
imx = zeros(im.shape)
filters.gaussian_filter(im, (sigma,sigma), (,), imx)
imy = zeros(im.shape)
filters.gaussian_filter(im, (sigma,sigma), (,), imy)
该函数的第三个参数指定对每个方向计算哪种类型的导数,第二个参数为使用的标准差。
SciPy模块应用的更多相关文章
- windows下python安装Numpy和Scipy模块
安装 numpy: 去 http://sourceforge.net/projects/numpy/files/latest/download?source=files 下载相应的exe安装文件. 安 ...
- scipy模块
- python Scipy积分运算大全(integrate模块——一重、二重及三重积分)
python中Scipy模块求取积分的方法: SciPy下实现求函数的积分的函数的基本使用,积分,高等数学里有大量的讲述,基本意思就是求曲线下面积之和. 其中rn可认为是偏差,一般可以忽略不计,wi可 ...
- python安装numpy、scipy和matplotlib等whl包的方法
最近装了python和PyCharm开发环境,但是在安装numpy和matplotlib等包时出现了问题,现总结一下在windows平台下的安装方法. 由于现在找不到了工具包新版本的exe文件,所以采 ...
- Python 科学计算涉及模块
模块1.数据基础 numpy 模块2.数值运算 scipy 模块3.符号运算 sympy 模块4.图形绘制 matplotlib
- 【层次聚类】python scipy实现
层次聚类 原理 有一个讲得很清楚的博客:博客地址 主要用于:没有groundtruth,且不知道要分几类的情况 用scipy模块实现聚类 参考函数说明: pdist squareform linkag ...
- 【Scipy】初步认识
Scipy扩展包括多种多样的工具箱,这些工具致力于解决科学计算中的常见问题.不同的子模块对应不同的应用,比如插值, 整合, 优化, 图像处理, 统计, 特殊功能等等. scipy可以和其他的标准科学计 ...
- python---scipy模块
一 简单介绍 SciPy是基于NumPy开发的高级模块,它提供了许多数学算法和函数的实现,用于解决科学计算中的一些标准问题.例如数值积分和微分方程求解,扩展的矩阵计算,最优化,概率分布和统计函数,甚 ...
- Python数据分析----scipy稀疏矩阵
一.sparse模块: python中scipy模块中,有一个模块叫sparse模块,就是专门为了解决稀疏矩阵而生.本文的大部分内容,其实就是基于sparse模块而来的 导入模块:from scipy ...
随机推荐
- 自学Linux Shell13.2-选项处理(主要getopt、getopts命令)
点击返回 自学Linux命令行与Shell脚本之路 Bash shell提供了一些不同的方法来从用户处获得数据,包括以下3中方法: 命令行参数(添加在名利后面的数据) 命令行选项(可修改命令行为的单个 ...
- activity中访问内部fragment的函数
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCod ...
- ubuntu 13.04 开发环境搭建
install ubuntu1, mysql serversudo apt-get install mysql-server2, ssh sudo apt-get install openssh-se ...
- vlc sdl 播放视频可随窗口改变大小
#include <stdio.h> #include <stdint.h> #include <math.h> #include <stdlib.h> ...
- I/O多路复用详解
要想完全理解I/O多路复用,需先要了解I/O模型: 一.五种I/O模型 1.阻塞I/O模型 最流行的I/O模型是阻塞I/O模型,缺省情形下,所有套接口都是阻塞的.我们以数据报套接口为例来讲解此模型(我 ...
- HDU 1029 Ignatius and the Princess IV / HYSBZ(BZOJ) 2456 mode(思维题,~~排序?~~)
HDU 1029 Ignatius and the Princess IV (思维题,排序?) Description "OK, you are not too bad, em... But ...
- Asp:函数是用传值还是传址
传址会把变量的内存地址传递到sub里,在sub里对变量所做的修改就是对原来的变量进行修改,而传值只是把变量的值传递到sub里,此时在sub里修改变量的值不会影响原来的变量. 在vb中调用函数默认是传址 ...
- pascal与其它语言代码书写的不同和pascal的快捷键
1.把很多简单语句括起来 begin end; 2.开始,结束 begin end. 3.判断if if (布尔表达式) then begin 语句 end //没有‘:’ else if () b ...
- Deformable ConvNets
Deformable ConvNets 论文 Deformable Convolutional Networks(arXiv:1703.06211) CNN受限于空间结构,具有较差的旋转不变性,较弱的 ...
- 多线程Java Socket编程
采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求. 1.服务端 package localSocket; import java.i ...