锵锵锵,大家好,每周一度的马学长课堂又开课啦!今天,是Python图像处理系列的最后一课啦,相信大家通过之前的学习,都对Python图像处理有了系统的了解,并形成了自己的学习方法。下面让我们一起进入今天的课堂吧!
上节为大家介绍了SciPy库的使用以及图像高斯模糊实战,这一次继续为大家详细讲解SciPy库的使用以及图像导数实战。
SciPy
SciPy是建立在NumPy基础上,用于数值运算的开源工具包。SciPy提供很多高效的操作,可以实现数值优化、统计、信号、积分处理,以及最重要的图像处理功能。接下来,本节会介绍SciPy中大量有用的模块。
图像导数
在整个图像处理的学习过程中可以看到,在很多应用中图像强度的变化情况是非常重要的信息。强度的变化可以用灰度图像I(对于彩色图像,通常对每个颜色通道分别计算导数)的Ix和Iy的方向导数和进行描述。
图像的梯度向量:
梯度有两个重要的属性,一个是梯度的大小:
它描述了图像变化的强弱,一是梯度的角度:
角度的变化区间为
卷积简单实现
Prewitt滤波器:
Prewitt边缘算子是一种边缘样板算子,对噪声具有平滑作用。由于边缘点像素的灰度值与其领域点像素的灰度值有显著不同,在实际应用中通常采用微分算子和模板配匹方法检测图像的边缘。
这里使用 ROF(Rudin-Osher-Fatemi)去噪模型。Sobel滤波器,Sobel算法是一种较成熟的微分边缘检测算法,它计算简单,且能产生较好的检测效果,对噪声具有平滑作用,可以提供较为精确的边缘方向信息。
其实图像的梯度可以用一阶导数和二阶偏导数来求解。但是图像以矩阵的形式存储的,不能像数学理论中对直线或者曲线求导一样,对一幅图像的求导相当于对一个平面、曲面求导。对图像的操作,我们采用模板对原图像进行卷积运算,从而达到我们想要的效果。
而获取一幅图像的梯度就转化为:模板(Roberts、Prewitt、Sobel、Lapacian算子)对原图像进行卷积,不过这里的模板并不是随便设计的,而是根据数学中求导理论推导出来的。
导数滤波器可以使用scipy.ndimage.filters模块的标准卷积操作来简单地实现。
代码为:
原始灰度图像、x导数图像、y导数图像、梯度大小图像
本次有关Python图像处理的分享到这里就结束了。希望大家能多加练习,争取早日成为技术大牛哦!