当前位置: 首页 > news >正文

SciPy科学计算与应用:SciPy图像处理入门-掌握scipy.ndimage模块

SciPy图像处理实战:从基础到应用

学习目标

通过本课程,学员将掌握使用SciPy库中的scipy.ndimage模块进行图像处理的基本方法,包括图像滤波、形态学操作和几何变换。实验将通过理论讲解与实践操作相结合的方式,帮助学员深入理解图像处理的核心概念和技术。

相关知识点

  • SciPy图像处理实战

学习内容

1 SciPy图像处理实战

1.1 图像滤波

图像滤波是图像处理中的一项基本技术,用于去除图像中的噪声或增强图像的某些特征。在scipy.ndimage模块中,提供了多种滤波器,如高斯滤波、中值滤波等,这些滤波器可以帮助改善图像质量或提取图像特征。

1.1.1高斯滤波

高斯滤波是一种常用的平滑滤波器,它通过一个高斯核来对图像进行卷积操作,从而达到平滑图像的效果。高斯滤波可以有效地减少图像中的高频噪声,同时保留图像的主要特征。

%pip install scikit-image
import numpy as np
import matplotlib.pyplot as plt
from scipy import ndimage
from skimage import data# 加载示例图像
image = data.camera()# 应用高斯滤波
filtered_image = ndimage.gaussian_filter(image, sigma=1)# 显示原始图像和滤波后的图像
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].imshow(image, cmap='gray')
ax[0].set_title('Original Image')
ax[1].imshow(filtered_image, cmap='gray')
ax[1].set_title('Gaussian Filtered Image')
plt.show()

在这里插入图片描述

也可以使用本地图片:

import numpy as np
import matplotlib.pyplot as plt
from scipy import ndimage
# 移除了不需要的skimage.data导入# 读取本地图片
image = plt.imread('testIMG.jpg')# 如果图片是彩色的,转换为灰度图
if len(image.shape) == 3:image = np.mean(image, axis=2).astype(np.uint8)# 应用高斯滤波
filtered_image = ndimage.gaussian_filter(image, sigma=1)# 显示原始图像和滤波后的图像
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].imshow(image, cmap='gray')
ax[0].set_title('Original Image')
ax[1].imshow(filtered_image, cmap='gray')
ax[1].set_title('Gaussian Filtered Image')
plt.show()

在这里插入图片描述

1.1.2 中值滤波

中值滤波是一种非线性滤波器,它通过将每个像素点的值替换为其邻域内的中值来减少噪声。中值滤波对于去除椒盐噪声特别有效。

# 应用中值滤波
median_filtered_image = ndimage.median_filter(image, size=3)# 显示原始图像和滤波后的图像
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].imshow(image, cmap='gray')
ax[0].set_title('Original Image')
ax[1].imshow(median_filtered_image, cmap='gray')
ax[1].set_title('Median Filtered Image')
plt.show()

在这里插入图片描述
本地图片:
在这里插入图片描述

1.2 形态学操作

形态学操作是基于图像形状的处理方法,主要用于提取图像的结构信息。常见的形态学操作包括膨胀、腐蚀、开运算和闭运算。这些操作通常用于二值图像,但也可以应用于灰度图像。

1.2.1 腐蚀

腐蚀操作通过移除对象边界上的像素来减小对象的大小。腐蚀可以用于去除小的噪声点或断开连接的物体。

# 创建一个二值图像
binary_image = image > 128# 应用腐蚀操作
eroded_image = ndimage.binary_erosion(binary_image, structure=np.ones((3, 3)))# 显示原始图像和腐蚀后的图像
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].imshow(binary_image, cmap='gray')
ax[0].set_title('Binary Image')
ax[1].imshow(eroded_image, cmap='gray')
ax[1].set_title('Eroded Image')
plt.show()

在这里插入图片描述
本地照片:
在这里插入图片描述

1.2.2 膨胀

膨胀操作通过在对象边界上添加像素来增大对象的大小。膨胀可以用于填补对象中的小孔或连接断开的物体。

# 应用膨胀操作
dilated_image = ndimage.binary_dilation(binary_image, structure=np.ones((3, 3)))# 显示原始图像和膨胀后的图像
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].imshow(binary_image, cmap='gray')
ax[0].set_title('Binary Image')
ax[1].imshow(dilated_image, cmap='gray')
ax[1].set_title('Dilated Image')
plt.show()

在这里插入图片描述
本地图片:
在这里插入图片描述

1.3 几何变换

几何变换用于改变图像的几何属性,如平移、旋转、缩放等。这些变换在图像对齐、图像配准和图像增强中非常有用。

1.3.1 旋转

旋转操作可以将图像绕着某个点旋转一定的角度。旋转操作通常需要指定旋转中心和旋转角度。

# 应用旋转操作
rotated_image = ndimage.rotate(image, angle=45, reshape=False)# 显示原始图像和旋转后的图像
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].imshow(image, cmap='gray')
ax[0].set_title('Original Image')
ax[1].imshow(rotated_image, cmap='gray')
ax[1].set_title('Rotated Image')
plt.show()

在这里插入图片描述
本地图片:
在这里插入图片描述

1.3.2 缩放

缩放操作可以改变图像的大小。缩放操作通常需要指定缩放因子,可以是放大或缩小。

# 应用缩放操作
scaled_image = ndimage.zoom(image, zoom=0.5)# 显示原始图像和缩放后的图像
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].imshow(image, cmap='gray')
ax[0].set_title('Original Image')
ax[1].imshow(scaled_image, cmap='gray')
ax[1].set_title('Scaled Image')
plt.show()

在这里插入图片描述
本地图片:
在这里插入图片描述
通过本课程的学习,学员将能够熟练使用scipy.ndimage模块进行图像处理,掌握图像滤波、形态学操作和几何变换的基本方法。

http://www.dtcms.com/a/353008.html

相关文章:

  • 1 vs 10000:如何用AI智能体与自动化系统,重构传统销售客户管理上限?
  • 从高层 PyTorch 到中层 CUDA Kernel 到底层硬件 Tensor Core
  • fortran notes[2]
  • More Effective C++ 条款11:禁止异常流出析构函数之外
  • 自学嵌入式第二十九天:Linux系统编程-线程
  • 零后端、零配置:用 AI 编程工具「Cursor」15 分钟上线「Vue3 留言墙」
  • 从“找不到”到“秒上手”:金仓文档系统重构记
  • 深度学习-----详解MNIST手写数字数据集的神经网络实现过程
  • Linux系统使用ADB同时连接多个Android设备
  • 一、Mac(M1)本地通过docker安装Dify
  • 【Day 35】Linux-主从复制的维护
  • C语言中的static vs C++中的static:相同关键字,不同境界
  • golang13 单元测试
  • KingBase数据库迁移利器:KDTS工具 MySQL数据迁移到KingbaseES实战
  • uniapp中 ios端 scroll-view 组件内部子元素z-index失效问题
  • 大数据毕业设计选题推荐-基于大数据的城市空气污染数据分析系统-Spark-Hadoop-Bigdata
  • Elasticsearch三大属性详解:enabled、index与store
  • 【问题思考】为什么SVM中的w和超平面是垂直的?【SVM】【gemini生成】
  • Web转uni-app
  • 支持向量机(SVM)学习总结
  • 本地搭建 Redis/MySQL 并配置国内镜像加速(Docker/原生安装 | macOS/Linux/Windows)
  • Python爬虫实战:构建网易云音乐个性化音乐播放列表同步系统
  • 直线拟合方法全景解析:最小二乘、正交回归与 RANSAC
  • 3.【鸿蒙应用开发实战: 从入门到精通】开发入门 Hello World
  • Linux程序管理
  • SyntaxError: Failed to execute ‘open‘ on ‘XMLHttpRequest‘: Invalid URL
  • Mybatis总结
  • 织梦会员中心模板调用某个栏目名和栏目下文档的办法
  • 神经网络学习笔记11——高效卷积神经网络架构SqueezeNet
  • SCANeR Studio 仿真数据获取和车辆座舱数据输入-手自动驾驶切换(二)