使用 Scipy 在 Python 中进行多维图像处理2025年3月17日 | 阅读 12 分钟 引言在本文中,我们将讨论在 Python 中使用 Scipy 进行多维图像处理。SciPy 是一个用于科学和技术计算的 Python 库。它建立在 NumPy 之上,NumPy 是一个用于非专业数值计算的库。它提供了许多用于处理数组、数值优化、信号处理和科学计算中其他常见任务的函数。图像处理和分析通常被视为对二维值数组的操作。有几个领域需要分析更高维度的图像。这些示例包括科学成像和生物成像。NumPy 由于其固有的多维性质,非常适合这种类型的程序。scipy.ndimage 程序提供了一些标准图像处理和分析功能,这些功能旨在处理任意维度的数组。这些程序目前包括用于线性滤波和非线性滤波、二值形态学、B 样条插值和对象测量的功能。 图像处理是计算机科学领域,处理图像的操纵、分析和解释。在图像处理中,多维图像是具有额外维度的图像。这可以包括具有多个颜色通道(例如,彩色图像中的红色、绿色和蓝色通道)的图像、具有多个时间点(例如,视频)的图像以及具有多个空间维度(例如,3D 医学成像检查)的图像。 SciPy 提供了几个用于处理多维图像的功能,包括用于读取和写入图像、图像过滤、图像变形和图像分割的功能。“scipy.ndimage”是 SciPy 库中的一个模块,提供多维图像处理功能。它建立在 NumPy 之上,NumPy 是一个用于高效数值计算的库,并提供了许多用于处理数组的功能,包括图像处理功能。由于可以进行大量操作,因此该文章涵盖了一些基本操作。
scipy.ndimage 模块提供了几种用于平滑、抛光和边缘检测任务的集体过滤功能。以下是 scipy.ndimage 提供的一些过滤功能的示例
过滤函数的语法和参数1. 拉普拉斯过滤器语法 拉普拉斯过滤器的语法如下 - 参数 拉普拉斯过滤器的参数为 - 您可以使用 size 参数指定过滤器的大小。这可以是一个标量或一个整数元组。例如,size 3 应用 3×3 拉普拉斯过滤器,size (3, 5) 应用 3×5 拉普拉斯过滤器。 2. Prewitt 过滤器语法 参数 Prewitt 过滤器的参数为 - 如果 axis 设置为 0 水平,1 垂直,您可以选择过滤器的方向。order 参数具有 0 用于平滑、1 用于一阶导数和 2 用于二阶导数的选项,可以帮助您选择导数的阶数。Mode 参数具有 reflecting、Wrap 和 regular 等选项,描述了图像边缘的处理方式。 3. 中值过滤器语法 中值过滤器的语法如下 - 参数 size 参数指定过滤器的大小。这可以是一个标量或一个整数元组。例如,长度 3 应用 3×3 中值过滤器,长度 (3, 5) 应用 3×5 中值过滤器。footprint 参数允许您指定过滤器的布局。这可以是一个布尔数组或一系列索引。Mode 参数指定如何处理照片边缘以及使用 reflect、Wrap 和 regular 等替代方案。 4. 高斯过滤器语法 高斯过滤器的语法如下 - 参数 sigma 参数指定高斯函数的标准差,它决定了在图像中应用的平滑量。order 参数允许您指定要应用的导数阶数,选项包括 0 用于平滑、1 用于一阶导数以及多个用于二阶导数。 5. Sobel 过滤器语法 Sobel 过滤器的语法如下 - 参数 Sobel 过滤器的参数为 - 您可以使用 axis 参数指定过滤器的方向。0 是水平,1 是垂直。 所有功能共享的属性所有函数共享一些不常见的属性。值得注意的是,所有函数都允许使用 output 参数指定输出数组。使用此参数,您可以指定一个数组,该数组可以就地修改为操作的结果。在这种情况下,结果不会减少。通常,使用 output 参数效率更高,因为使用现有数组来保存结果。返回的数组依赖于操作的形状,但其距离通常与输入的形状相同。如果使用 output 参数,则结果的类型与指定 output 参数的类型相同。如果没有给出 output 参数,即使可以指定输出结果,它也远非如此。这是通过将所需的 numpy 类型对象分配给 output 参数来完成的。例如 程序代码 这里我们给出一个 Python 代码示例。代码如下 - 结果 现在我们编译并运行上面的代码。然后结果如下 - array([ 0, 10, 26, 41, 57, 72, 88, 103, 119, 134, 150, 165, 181,196, 212, 227, 243, 258, 274, 289]) 程序代码 这里我们给出一个示例片段,展示了所有过滤器在 Python 代码中的实现。代码如下 - 结果 现在我们编译并运行上面的代码。然后输出如下 - ![]() 使用 SciPy 进行图像插值图像插值根据周围像素的值估算图像中像素的值。图像插值通常用于图像大小调整和图像失真校正。有几种可用于图像处理的插值技术,包括最近邻插值、双线性插值和双三次插值。插值技术的选择会影响结果图像的质量和平滑度,以及插值过程的计算复杂性。 以下是 scipy.ndimage 提供的不同类型的插值变换。
一些插值函数的参数和语法1. 移位语法 移位函数的语法如下 参数 移位函数的参数如下 shift 参数指定移位量,作为浮点数元组。第一个元素指定 x 方向上的移位,第二个元素指定 y 方向上的移位。 2. 旋转语法 旋转函数的语法如下 参数 旋转函数的参数如下 Reshape 是旋转函数的参数。此参数指定是否调整输出图像大小以适应完整的旋转图像。默认情况下,输出图像与输入图像大小相同。 3. 仿射变换语法 仿射变换函数的语法如下 - 参数 仿射变换函数的参数如下 output_shape、output_center 和 mode - 这是仿射变换函数的三个参数。 output_shape:此参数允许您指定输出图像的大小和形状。必须是整数元组。 output_center:此参数允许您设置输出图像的中心。必须是浮点数元组。 mode:此参数指定如何处理图像的边缘。选项包括复制、环绕和常量。 4. 缩放语法 缩放函数的语法如下 - 参数 缩放函数的参数如下 zoom 参数指定一个缩放因子,它可以是一个标量或一个浮点数元组。例如,缩放因子为 2 会使图像大小加倍,缩放因子为 (2, 1) 会使宽度加倍,而高度保持不变。 5. 样条过滤器语法 样条函数的语法如下 参数 样条函数的参数如下 order 是样条函数的参数。此参数允许您指定要应用的插值方法。选项包括 0 用于最近邻插值,1 用于双线性插值,3 用于双三次插值,依此类推。 程序代码这里我们给出一个示例片段,显示了所有插值技术在 Python 代码中的实现。代码如下 - 输出 现在我们编译并运行上面的代码。然后结果如下 - ![]() 使用 SciPy 进行图像分割图像分割是根据特定标准将图像划分为不同区域或段的过程。它是一种常用于图像处理和计算机视觉应用程序的方法,用于识别和提取图像中的对象或感兴趣区域。 scipy 库的 scipy.ndimage.measurements 模块提供了许多可用于图像分割的功能。这里有一些例子 scipy.ndimage.measurements.variance:此功能允许您计算图像或数组值的方差。 scipy.ndimage.measurements.standard_deviation:此功能允许您计算图像或数组值的标准差。 scipy.ndimage.measurements.mean:此选择允许您计算图像或数组值的平均值。 scipy.ndimage.measurements.label:此功能允许您标记图像中相关的成分。它通常用作分割图像中对象的预处理步骤。 scipy.ndimage.measurements.center_of_mass:此功能允许您计算图像或图像区域的质心。它可用于识别图像中对象的位置。 程序代码 这里我们给出一个示例片段,显示了 Python 代码中标签大小功能的实现。代码如下 - 输出 现在我们编译并运行上面的代码。然后结果如下 - ![]() 程序代码 这里我们给出一个示例,展示了 ndimage 库在 Python 代码中提供的其他几种测量功能的实现。代码如下 - 输出 现在我们编译并运行上面的代码。然后结果如下 - The Minimum pixel value of the image is 0.3333333333333333 on the location (567, 258) The Maximum pixel value of the image is 254.0 on the location (245, 568) Mean: 110.16274388631183 Center of Mass: (356.6752247435916, 469.240201083681) Standard Deviation: 54.975712030326186 Variance: 3022.3289132413515 |
我们请求您订阅我们的新闻通讯以获取最新更新。