pilt图像处理_干货 | 用Python做图像处理:图像导数实战
导读:数量庞大的图像和视频充斥着我们的生活。我们需要对图片进行检索、分类等操作时,利用人工手段显然是不现实的。于是,计算机视觉相关技术便应运而生,并且得到了快速的发展。本文以时下最流行的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 Imagenumpy *matplotlib.pyplot pltscipy.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 Imagenumpy *matplotlib.pyplot pltscipy.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
pilt图像处理_干货 | 用Python做图像处理:图像导数实战相关推荐
- 干货 | 用Python做图像处理:图像导数实战
导读:数量庞大的图像和视频充斥着我们的生活.我们需要对图片进行检索.分类等操作时,利用人工手段显然是不现实的.于是,计算机视觉相关技术便应运而生,并且得到了快速的发展.本文以时下最流行的Python语 ...
- 如何查看python源代码_查看“使用python做图像处理”的源代码
因存在冲突的中间编辑,本编辑不能撤销. 因为以下原因,您没有权限编辑本页: 您所请求的操作仅限于该用户组的用户使用:用户 您可以查看和复制此页面的源代码.==安装python程序包mahotas== ...
- 用Python做图像处理
用Python做图像处理 最近在做一件比较 evil 的事情--验证码识别,以此来学习一些新的技能.因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验, ...
- 教你用Python做图像处理
质量.速度.廉价,选择其中两个 提到图像处理第一个想到的库就是PIL,全称Python Imaging Library Python,图像处理类库,它提供了大量的图像操作,比如图像缩放,裁剪,贴图,模 ...
- python做图像处理快不快_Python 图像读写谁最快?不信就比一比
图像处理,顾名思义,是对图像进行的各种转换.计算等处理.图像处理必不可少地需要读写图像文件. 图像文件的读取,就是将图像数据从磁盘中的文件内读入内存,之后按照图像解码标准解码,最后把图像各像素的值存储 ...
- python 抓取解析接口数据_[干货]用python抓取摩拜单车API数据并做可视化分析(源码)...
原标题:[干货]用python抓取摩拜单车API数据并做可视化分析(源码) 在APP中能看到很多单车,但走到那里的时候,才发现车并不在那里.有些车不知道藏到了哪里:有些车或许是在高楼的后面,由于有GP ...
- python做交易软件_我用Python做了个量化交易工具!
量化交易是指借助现代统计学和数学的方法,利用计算机技术进行投资交易的方式. 对于从未接触过量化的人来说,想要了解量化到底是做什么的,关键掌握四部份的内容:Python基础知识.金融知识.技术指标.量化 ...
- 名片管理系统python详解_详解Python做一个名片管理系统
详解Python做一个名片管理系统 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 详解Python做一个名片管理系统.txt ] (友情提示:右键点上行txt文 ...
- python标签使用教程_怎样用Python做标签云
怎样用Python做标签云 标签云是比较直观的频率分布表现方式,很多网站和APP在年度盘点和总结时会使用.Python生成标签云有一个比较易用的库 pytagcloud. Python做标签云的具体方 ...
最新文章
- wchar用wcout输出正常cout是?
- 某华为程序员爆料:主动离职,公司竟也给n+1,到手15万,华为真良心!
- 通过timer控件和窗体的opacity属性,轻松实现窗体的淡入淡出
- WINCE屏蔽NK的串口输出信息
- OS / 进程中某个线程崩溃,是否会对其他线程造成影响?
- Unity C# 设计模式(一)单例模式
- 浅谈电商网站开发中用户会话管理机制的设计和实现原理
- A+B问题(信息学奥赛一本通-T1006)
- 1inch将升级至1.1版本并开启新的流动性挖矿计划
- 文本分类——怎么将二分类模型应用到多分类问题?
- PS滤镜-Topaz Photoshop Plugins Bundle
- 内网渗透测试:隐藏通讯隧道技术
- 新一代大数据技术架构
- java计算机毕业设计高校学生党建管理系统源码+mysql数据库+系统+lw文档+部署
- 论文:Ref-NMS: Breaking Proposal Bottlenecks in Two-Stage Referring Expression Grounding
- python条形图y轴_python 中条形图绘制
- java学习(二)——类与对象
- 解决pycharm中画图工具报错无法显示问题
- css3之transform-origin属性详解图文笔记
- DC综合基础知识学习