【干货】计算机视觉实战系列07——用Python做图像处理

【导读】专知成员Hui上一次为大家介绍SciPy库的使用以及图像高斯模糊实战,这一次继续为大家详细讲解SciPy库的使用以及图像导数实战。

【干货】计算机视觉实战系列01——用Python做图像处理(基本的图像操作和处理)

【干货】计算机视觉实战系列02——用Python做图像处理(Matplotlib基本的图像操作和处理)

【干货】计算机视觉实战系列03——用Python做图像处理(Numpy基本操作和图像灰度变换)

【干货】计算机视觉实战系列04——用Python做图像处理(图像的缩放、均匀操作和直方图均衡化)

【干货】计算机视觉实战系列05——用Python做图像处理(主成分分析)

【干货】计算机视觉实战系列06——用Python做图像处理(图像高斯模糊分析)

SciPy库的应用——图像导数实战

SciPy

SciPy是建立在NumPy基础上,用于数值运算的开源工具包。SciPy提供很多高效的操作,可以实现数值积分、优化、统计、信号处理,以及对我们来说最重要的图像处理功能。接下来,本节会介绍SciPy中大量有用的模块。SciPy是一个开源工具包,可以从http://scipy.org/Download下载。

图像导数

在整个图像处理的学习过程中可以看到,在很多应用中图像强度的变化情况是非常重要的信息。强度的变化可以用灰度图像I(对于彩色图像,通常对每个颜色通道分别计算导数)的x和y的方向导数I_{x}I_{y } 进行描述。

图像的梯度向量为:

梯度有两个重要的属性,一个是梯度的大小:

它描述了图像变化的强弱,一是梯度的角度:

它描述了图像中在每个点(像素)上强度变化最大的方向。NumPy中的arctan2()函数返回弧度表示的有符号角度,角度的变化区间为(-\pi,\pi)

我们可以用离散近似的方式来计算图像的导数。图像的导数大多可以通过卷积简单地实现:

对于D_{x}D_{y} ,通常选择Prewitt滤波器:

Prewitt边缘算子是一种边缘样板算子,利用像素点上下,左右邻点灰度差,在边缘处达到极值检测边缘,对噪声具有平滑作用。由于边缘点像素的灰度值与其领域点像素的灰度值有显著不同,在实际应用中通常采用微分算子和模板配匹方法检测图像的边缘。

或者使用Sobel滤波器,Sobel算法是一种较成熟的微分边缘检测算法,它计算简单,且能产生较好的检测效果,对噪声具有平滑作用,可以提供较为精确的边缘方向信息。

Sobel算子是一阶导数的边缘检测算子,使用两个方向算子(垂直算子和水平算子),对图像进行卷积运算,得到两个矩阵,再求这两个矩阵对应位置的两个数的均方根,得到一个新的矩阵,即为灰度图像矩阵中各个像素点的梯度值。在算法实现过程中,通过3×3模板作为核与图像中的每个像素点做卷积和运算,然后选取合适的阈值以提取边缘。

其实图像的梯度可以用一阶导数和二阶偏导数来求解。但是图像以矩阵的形式存储的,不能像数学理论中对直线或者曲线求导一样,对一幅图像的求导相当于对一个平面、曲面求导。对图像的操作,我们采用模板对原图像进行卷积运算,从而达到我们想要的效果。而获取一幅图像的梯度就转化为:模板(Roberts、Prewitt、Sobel、Lapacian算子)对原图像进行卷积,不过这里的模板并不是随便设计的,而是根据数学中求导理论推导出来的。

这些导数滤波器可以使用scipy.ndimage.filters模块的标准卷积操作来简单地实现。

代码为:

from PIL import Image
from numpy import *
import matplotlib.pyplot as plt
from scipy.ndimage import filters

im = array(Image.open('test.jpg').convert('L'))

imx = zeros(im.shape)
filters.sobel(im, 1, imx)

imy = zeros(im.shape)
filters.sobel(im, 0, imx)

magnitude = sqrt(imx ** 2 + imy ** 2)

fig = plt.figure(figsize=(30, 30))

plt.subplot(2, 2, 1)
plt.axis('off')
plt.imshow(im, plt.cm.gray)

plt.subplot(2, 2, 2)
plt.axis('off')
plt.imshow(imx, plt.cm.gray)

plt.subplot(2, 2, 3)
plt.axis('off')
plt.imshow(imy, plt.cm.gray)

plt.subplot(2, 2, 4)
plt.axis('off')
plt.imshow(magnitude, plt.cm.gray)

plt.show()

输出结果为:

上述输出结果分别是原始灰度图像、x导数图像、y导数图像、梯度大小图像

这种计算图像导数的方法有一些缺陷,在该方法中,滤波器的尺度需要随着图像分辨率的变化而变化。为了在图像噪声方面更稳健,以及在任意尺度上计算导数,我们使用高斯导数滤波器:

其中G_{\sigma x}G_{\sigma y} 表示G_{\sigma} 在x和y方向上的导数,G_{\sigma} 为标准差为σ的高斯函数。

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

from PIL import Image
from numpy import *
import matplotlib.pyplot as plt
from scipy.ndimage import filters

im = array(Image.open('test.jpg').convert('L'))

sigma = 3  # 标准差

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)

fig = plt.figure(figsize=(30, 30))

plt.subplot(1, 3, 1)
plt.axis('off')
plt.imshow(im, plt.cm.gray)

plt.subplot(1, 3, 2)
plt.axis('off')
plt.imshow(imx, plt.cm.gray)

plt.subplot(1, 3, 3)
plt.axis('off')
plt.imshow(imy, plt.cm.gray)

plt.show()

输出结果为:

(a)

(b)

上面输出结果(a)、(b)中图片依次为:原始灰度图像,x导数图像,y导数图像,而(a),(b)的区别为设置不同的标准差之后的高斯滤波处理图像。

参考文献:

python计算机视觉编程:http://yongyuan.name/pcvwithpython/

-END-

原文发布于微信公众号 - 专知(Quan_Zhuanzhi)

原文发表时间:2018-04-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

行人再识别中的迁移学习

最近,在网上搜索关于“行人重识别”及“行人再识别”等关键词,发现几乎都是关于行人检测的内容。对于“行人重(再)识别”技术能找到的资料很少,这可能是因为“行人重(...

4287
来自专栏新智元

【重磅】计算机视觉和 CNN 发展十一座里程碑(附论文下载)

【新智元导读】从AlexNet到ResNet,计算机视觉领域和卷积神经网络(CNN)每一次发展,都伴随着代表性架构取得历史性的成绩。作者回顾计算机视觉和CNN过...

4424
来自专栏人工智能头条

逻辑回归、决策树和支持向量机(I)

1598
来自专栏进击的程序猿

神经网络基础知识

我们可以调整参数/权重W,使得映射的结果和实际类别吻合,而损失函数用来来衡量吻合度。

942
来自专栏华章科技

这份深度学习课程笔记获吴恩达点赞

吴恩达在推特上展示了一份由 TessFerrandez 完成的深度学习专项课程信息图,这套信息图优美地记录了深度学习课程的知识与亮点。因此它不仅仅适合初学者了解...

943
来自专栏新智元

【PointCNN全面刷新测试记录】山东大学提出通用点云卷积框架

来源:arXiv 编辑:克雷格 【新智元导读】山东大学李扬彦、卜瑞、孙铭超、陈宝权研究团队近日研究提出的PointCNN是简单通用的点云特征学习架构,基于这一方...

4597
来自专栏AI科技大本营的专栏

CNN可视化最新研究方法进展(附结构、算法)

【AI科技大本营导读】深度学习一直被看做是一个难以解释的“黑匣子”。一方面在于其缺乏数学上的优雅,缺乏基础理论的支撑,另一方面在工程上缺乏解释性,其潜在的安全隐...

1864
来自专栏大数据挖掘DT机器学习

SIFT特征提取分析(附源码)

SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest poin...

5235
来自专栏机器之心

这是一份优美的信息图,吴恩达点赞的deeplearning.ai课程总结

机器之心整理 参与:思源、刘晓坤 吴恩达在推特上展示了一份由 TessFerrandez 完成的深度学习专项课程信息图,这套信息图优美地记录了深度学习课程的知识...

3756
来自专栏SIGAI学习与实践平台

理解过拟合

在进行有监督的机器学习建模时,一般假设数据独立同分布(i.i.d,independently and identically distributed)。即样本数...

1171

扫码关注云+社区

领取腾讯云代金券