SciPy模块应用

摘要:
高斯模糊通常是其他图像处理操作的一部分,例如图像插值、兴趣点计算和许多其他应用。Scipy有一个Scipy.ndiimage。用于过滤操作的过滤器模块。例如:fromPILimportImagefromnumpyimport*fromsicpy.ndimageimportfilterssim=arrayim2=filters。高斯滤波器%第二个参数表示标准偏差σ增加图像模糊的程度。对于Dx和Dy,通常选择Prewitt滤波器或Sobel滤波器:这些导数滤波器可以简单地通过使用scipy.ndimage的标准卷积运算来实现。过滤器模块:fromPILimitImagefromnumpyinport*fromsicpy。ndimageimportfilterssim=array#转换为灰度图像#Sobel导数滤波器imx=零滤波器。sobelimiy=zerofilters Sobelmagnitude=sqrt上面的脚本使用Sobel过滤器来计算x和y的方向导数以及梯度大小。灰色区域表示导数值接近于零。

1.图像模糊

        图像的高斯模糊是非常经典的图像卷积例子。本质上,图像模糊就是将(灰度)图像I 和一个高斯核进行卷积操作:SciPy模块应用第1张,其中SciPy模块应用第2张是标准差为σ的二维高斯核。高斯模糊通常是其他图像处理操作的一部分,比如图像插值操作、兴趣点计算以及很多其他应用。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,5)    %第二个参数表示标准差

         随着σ 的增加,一幅图像被模糊的程度。σ 越大,处理后的图像细节丢失越多。如果打算模糊一幅彩色图像,只需简单地对每一个颜色通道进行高斯模糊:

im = array(Image.open('empire.jpg'))
im2 = zeros(im.shape)
for i in range(3):
   im2[:,:,i] = filters.gaussian_filter(im[:,:,i],5)
im2 = uint8(im2)

                           SciPy模块应用第3张

                                        原始图像                                       使用σ=5的高斯滤波器

 2.图像导数

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

      对于Dx 和Dy,通常选择Prewitt 滤波器:

                          SciPy模块应用第8张

                                   或者Sobel 滤波器:

                          SciPy模块应用第9张

   这些导数滤波器可以使用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,1,imx)
imy = zeros(im.shape)
filters.sobel(im,0,imy)
magnitude = sqrt(imx**2+imy**2)

     上面的脚本使用Sobel 滤波器来计算x 和y 的方向导数,以及梯度大小。sobel() 函数的第二个参数表示选择x 或者y 方向导数,第三个参数保存输出的变量。在两个导数图像中,正导数显示为亮的像素,负导数显示为暗的像素。灰色区域表示导数的值接近于零。

     上述计算图像导数的方法有一些缺陷:在该方法中,滤波器的尺度需要随着图像分辨率的变化而变化。为了在图像噪声方面更稳健,以及在任意尺度上计算导数,可以使用高斯导数滤波器:SciPy模块应用第10张SciPy模块应用第11张

      之前用于模糊的filters.gaussian_filter() 函数可以接受额外的参数,用来计算高斯导数。可以简单地按照下面的方式来处理:   

sigma = 5 # 标准差
imx = zeros(im.shape)
filters.gaussian_filter(im, (sigma,sigma), (0,1), imx)
imy = zeros(im.shape)
filters.gaussian_filter(im, (sigma,sigma), (1,0), imy)

    该函数的第三个参数指定对每个方向计算哪种类型的导数,第二个参数为使用的标准差。

 

免责声明:文章转载自《SciPy模块应用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue v-for中的item改变无法引起视图的更新asp .net 多文件上传(二)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Deep Learning基础--线性解码器、卷积、池化

本文主要是学习下Linear Decoder已经在大图片中经常采用的技术convolution和pooling,分别参考网页http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial中对应的章节部分。   Linear Decoders:   以三层的稀疏编码神经网络而言,在sparse a...

目标检测之faster-RCNN和FPN

今年(2017年第一季度),何凯明大神出了一篇文章,叫做fpn,全称是:feature pyramid network for object Detection,为什么发这篇文章,根据 我现在了解到的是对小目标和大目标识别率都好。为什么?我们来看下面一幅图: 此处来自:http://blog.csdn.net/u014380165/article/deta...

sympy简明用法

系统学习Sympy 什么是Sympy Sympy 是一个可以进行符号运算的第三方科学计算库,数学对象可以被精确的表达,而不是近似值,这也意味着带有未计算的未知量可以以符号的形式留在数学表达式中。 import sympy sympy.sqrt(3) #用Sympy表达无理数 sqrt(3) sympy.init_printing(use_unicod...

数字图像基本处理——空间滤波(spatial filtering)

空间滤波器主要包括平滑滤波器和锐化滤波器,下面从理论和实践两个部分阐述。 理论 空间滤波的公式如下: 空间滤波的过程也就是不断用一个filter(一般为3X3)在图像上与同样大小的局部patch作用,作用结果更新在中心点上,所以需要m,n为奇数。 在2维时域信号上做卷积与此公式稍有不同,如下: 可以看到,空间滤波公式中两个+变成了-,对应于空间滤波中...

[pytorch][模型压缩] 通道裁剪后的模型设计——以MobileNet和ResNet为例

说明 模型裁剪可分为两种,一种是稀疏化裁剪,裁剪的粒度为值级别,一种是结构化裁剪,最常用的是通道裁剪。通道裁剪是减少输出特征图的通道数,对应的权值是卷积核的个数。 问题 通常模型裁剪的三个步骤是:1. 判断网络中不重要的通道 2. 删减掉不重要的通道(一般不会立即删,加mask等到评测时才开始删) 3. 将模型导出,然后进行finetue恢复精度。 步骤1...

超详细介绍 图像处理(卷积)(转)

图像处理(卷积)作者太棒了    原文   http://blog.sina.com.cn/s/blog_4bdb170b01019atv.html 图像处理-线性滤波-1 基础(相关算子、卷积算子、边缘效应) 这里讨论利用输入图像中像素的小邻域来产生输出图像的方法,在信号处理中这种方法称为滤波(filtering)。其中,最常用的是线性滤波:输出...