导读:数量庞大的图像和视频充斥着我们的生活。我们需要对图片进行检索、分类等操作时,利用人工手段显然是不现实的。于是,计算机视觉相关技术便应运而生,并且得到了快速的发展。本文以时下最流行的Python语言为工具,对图像处理技术的具体操作进行详细讲述,旨在让零基础的读者也可以轻松上手!

01 SciPy

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

02 图像导数

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

图像的梯度向量为:

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

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

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

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

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

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

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

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

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

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

代码为:

PIL Image
numpy *
matplotlib.pyplot plt
scipy.ndimage filtersim = array(Image.open().convert())imx = zeros(im.shape)
filters.sobel(imimx)imy = zeros(im.shape)
filters.sobel(imimx)magnitude = sqrt(imx ** + imy ** )fig = plt.figure(=())plt.subplot()
plt.axis()
plt.imshow(implt.cm.gray)plt.subplot()
plt.axis()
plt.imshow(imxplt.cm.gray)plt.subplot()
plt.axis()
plt.imshow(imyplt.cm.gray)plt.subplot()
plt.axis()
plt.imshow(magnitudeplt.cm.gray)plt.show()

输出结果为:

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

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

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

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

PIL Image
numpy *
matplotlib.pyplot plt
scipy.ndimage filtersim = array(Image.open().convert())sigma = imx = zeros(im.shape)
filters.gaussian_filter(im(sigmasigma)()imx)imy = zeros(im.shape)
filters.gaussian_filter(im(sigmasigma)()imy)fig = plt.figure(=())plt.subplot()
plt.axis()
plt.imshow(implt.cm.gray)plt.subplot()
plt.axis()
plt.imshow(imxplt.cm.gray)plt.subplot()
plt.axis()
plt.imshow(imyplt.cm.gray)plt.show()

输出结果为:

(a)

(b)

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

作者:Hui

来源:专知(ID:Quan_Zhuanzhi),关于“用Python做图像处理”的更多图文,可在专知查看

参考文献:

python计算机视觉编程:

http://yongyuan.name/pcvwithpython/

推荐阅读

日本老爷爷坚持17年用Excel作画,我可能用了假的Excel···

看完此文再不懂区块链算我输:手把手教你用Python从零开始创建区块链

为什么要学数学?因为这是一场战略性的投资

180页PPT,讲解人工智能技术与产业发展

Q: 关于图像处理,你有哪些想法和经验?

欢迎留言与大家分享

觉得不错,请把这篇文章分享给你的朋友

转载 / 投稿请联系:baiyu@hzbook.com

更多精彩文章,请在公众号后台点击“历史文章”查看

干货 | 用Python做图像处理:图像导数实战相关推荐

  1. pilt图像处理_干货 | 用Python做图像处理:图像导数实战

    导读:数量庞大的图像和视频充斥着我们的生活.我们需要对图片进行检索.分类等操作时,利用人工手段显然是不现实的.于是,计算机视觉相关技术便应运而生,并且得到了快速的发展.本文以时下最流行的Python语 ...

  2. 用Python做图像处理

    用Python做图像处理        最近在做一件比较 evil 的事情--验证码识别,以此来学习一些新的技能.因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验, ...

  3. python做图像处理快不快_Python 图像读写谁最快?不信就比一比

    图像处理,顾名思义,是对图像进行的各种转换.计算等处理.图像处理必不可少地需要读写图像文件. 图像文件的读取,就是将图像数据从磁盘中的文件内读入内存,之后按照图像解码标准解码,最后把图像各像素的值存储 ...

  4. 教你用Python做图像处理

    质量.速度.廉价,选择其中两个 提到图像处理第一个想到的库就是PIL,全称Python Imaging Library Python,图像处理类库,它提供了大量的图像操作,比如图像缩放,裁剪,贴图,模 ...

  5. 【Python】手把手教你用Python做一个图像融合demo,小白可上手!

    创作背景 说到融合,一下子会让我们这些95后想起来童年的动漫游戏王了! 发动魔法卡--融合! 哈哈,今天说得当然不是游戏王里的魔法了,但是我们使用的是Python魔法,今天我们将使用Python编程语 ...

  6. python 变成float32_【Python】手把手教你用Python做一个图像融合demo,小白可上手!...

    创作背景 说到融合,一下子会让我们这些95后想起来童年的动漫游戏王了! 发动魔法卡--融合! 哈哈,今天说得当然不是游戏王里的魔法了,但是我们使用的是Python魔法,今天我们将使用Python编程语 ...

  7. 如何查看python源代码_查看“使用python做图像处理”的源代码

    因存在冲突的中间编辑,本编辑不能撤销. 因为以下原因,您没有权限编辑本页: 您所请求的操作仅限于该用户组的用户使用:用户 您可以查看和复制此页面的源代码.==安装python程序包mahotas== ...

  8. python做小程序-【实战案例】利用Python做出趣味版防沉迷小程序

    今天带领大家利用Python做出趣味版防沉迷小程序 查询电脑的所有进程 用Python循环检测电脑软件的运行情况,当发现游戏软件时弹出警告窗口,并截图保存.学会这项技能,就再也不怕孩子偷偷打游戏了.下 ...

  9. 干货 | 基于 Python 的信用评分模型实战!

    来源 | 知乎  作者 | Carl 文章链接 | https://zhuanlan.zhihu.com/p/35284849 信用评分模型可用"四张卡"来表示,分别是 A卡(Ap ...

最新文章

  1. linux下安装redmine1.2.1全记录
  2. linux 双网卡浮动ip,Linux 双网卡绑定一个IP原理及实现
  3. iOS判断是模拟器还是真机
  4. Ubuntu 16.04/CentOS 6.9安装Apache压力(并发)测试工具ab
  5. Java 最常见 200+ 面试题全解析:面试必备
  6. Tomcat集群实现源码级别剖析
  7. mysql垃圾清理_mysql 垃圾图片清理
  8. linkin大话面向对象--内部类
  9. Android线程和线程Handler基础一览
  10. github中文版_GitHub 上的 Awesome 系列(资源大全系列)
  11. 这些年,我工作上走过的路
  12. 基于hilbert变换的数字信号_hilbert变换
  13. Pandas数据库数据抽取
  14. java 通过身份证判断性别
  15. email英文计算机求职信,求职信范文_计算机英文求职信范文
  16. 根据数据库中提供的坐标(经纬度) 在前端地图上标示坐标点、并显示
  17. dwf怎么合成一个_图纸集批量发布单页dwf的方法——院办质量小组
  18. mysql远程过程调用失败怎么办_远程过程调用失败且未执行是什么意思
  19. MAC 中selenium、webdriver打开Chrome浏览器闪退问题(版本号一致)
  20. ui设计是干啥的: ui设计师主要是做什么的呢

热门文章

  1. Linux学习笔记-增量编译(Makefile进一步使用)
  2. java简单编程_「4」Java简单编程
  3. php输出1到10的和,php通过排列组合实现1到9数字相加都等于20的方法
  4. c#web页面显示弹窗_基于 HTML5 WebGL 的 3D 风机 Web 组态工业互联网应用
  5. 深入理解计算机系统 相关课程,深入理解计算机系统
  6. Appium python adb命令
  7. 框架详解_Qt开发技术:QtCharts(一)QtCharts基本介绍以及图表框架详解
  8. python读取配置文件获取所有键值对_python ConfigParser模块读写配置文件
  9. (王道408考研操作系统)第三章内存管理-第二节2:请求分页管理方式
  10. (计算机组成原理)第一章计算机系统概述-第一节:计算机发展历程