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

一个SciPy图像处理案例的全过程

本文利用SciPy进行图像处理,并记录图像处理的全过程,处理过程包含高斯模糊、腐蚀等操作。

代码

import matplotlib.pyplot as plt
import numpy as np
from scipy import ndimage# 设置图像的大小为 128x128,即 128x128 的逻辑像素
l = 128
# 生成的随机点的数量为 36。
n_pts = 36
# 记录图像处理过程中的图像
images_in_process = []def generate_synthetic_data():"""Synthetic binary data"""# 创建一个随机数生成器 rs,并设置种子为 0,以确保生成的随机数是可重复的。rs = np.random.RandomState(0)# 生成一个从 0 到 l 的二维网格坐标。x, y = np.ogrid[0:l, 0:l]images_in_process.append(x.copy())images_in_process.append(y.copy())# x和y计算时会产生广播机制,因此mask_outer的大小是(l,l)# 创建一个圆形掩码,定义在图像中心的圆形区域内的点为 True,其他点为 False。mask_outer = (x - l / 2.0) ** 2 + (y - l / 2.0) ** 2 < (l / 2.0) ** 2images_in_process.append(mask_outer.copy())# 初始化一个大小为 (l, l) 的全零矩阵,用于存储随机点。mask = np.zeros((l, l))# 生成 n_pts 个随机点,坐标范围在 [0, l) 之间。points = l * rs.rand(2, n_pts)# 将上一步生产的随机点在 mask 中对应的位置设置为 1。mask[(points[0]).astype(int), (points[1]).astype(int)] = 1images_in_process.append(mask.copy())# 对 mask 应用高斯模糊,使得随机点的边缘变得平滑。mask = ndimage.gaussian_filter(mask, sigma=l / n_pts)images_in_process.append(mask.copy())# 生成一个新的掩码 res,其中只有在 mask 大于其平均值且在 mask_outer 圆形区域内的点为 True。res = np.logical_and(mask > mask.mean(), mask_outer)images_in_process.append(res.copy())# 对 res 应用腐蚀操作,使白色前景区域变小。res_erosion = ndimage.binary_erosion(res)images_in_process.append(res.copy())# 异或操作会检测出白色前景区域边缘return np.logical_xor(res, res_erosion)data = generate_synthetic_data()
# 绘制图像
for i in range(len(images_in_process)):plt.figure(figsize=(10, 5))plt.imshow(images_in_process[i], cmap=plt.cm.gray, interpolation="nearest")plt.axis("off")plt.title("original image")plt.savefig(f"original_image_{i}.png")plt.figure(figsize=(10, 5))
plt.imshow(data, cmap=plt.cm.gray, interpolation="nearest")
plt.axis("off")
plt.title("original image")
plt.savefig(f"original_image_{len(images_in_process)}.png")

结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.xdnf.cn/news/3053.html

相关文章:

  • java 加入本地lib jar处理方案
  • 暑假里系统学习新技能(马井堂)
  • AWS创建多块盘并创建RAID0以及后增加空间
  • 【OSG学习笔记】Day 14: 操作器(Manipulator)的深度使用
  • Go语言Context机制深度解析:从原理到实践
  • 【Java核心】一文理解Java面向对象(超级详细!)
  • 测试基础笔记第十六天
  • 【沉浸式求职学习day29】【信科知识面试题第一部分】【新的模块,值得收藏】
  • Opencv中图像深度(Depth)和通道数(Channels)区别
  • 嵌入式复习第一章
  • 基于C++的IOT网关和平台1:github项目ctGateway
  • ppt箭头素材图片大全
  • Python实例题:ebay在线拍卖数据分析
  • OpenAI Embedding 和密集检索(如 BERT/DPR)进行语义相似度搜索有什么区别和联系
  • Transformer-LSTM-SVM回归
  • 扣子流程图批量导入飞书多维表格
  • 如何在Java中去除字符串中的空格?
  • 16、路由守卫:设置魔法结界——React 19 React Router
  • Uniapp:置顶
  • 跟我学C++中级篇——控制死锁
  • 【网络原理】TCP异常处理(二):连接异常
  • 本地知识库工具FASTGPT的安装与搭建
  • 深入解析 Linux 进程池:原理、实现与高并发优化
  • tbb parallel_for 使用
  • 【计算机视觉】目标检测:深度解析YOLOv9:下一代实时目标检测架构的创新与实战
  • 14.外观模式:思考与解读
  • Cesium添加WMS,WMTS,地形图图,3D Tiles数据
  • 单链表详解
  • Suna - 开源通用人工智能助手
  • 算法每日一题 | 入门-顺序结构-A+B Problem