实验八 基于Python的数字图像问题处理

一、实验目的

 培养利用图像处理技术解决实际问题的能力。
 培养利用图像处理技术综合设计实现的能力。
 掌握在Python环境下解决实际问题的能力。
 熟练掌握使用cv2库对图像进行处理
 熟练掌握使用区域生长法提取图片中感兴趣的区域

二、实验内容

本次实验内容为:综合应用-区域生长算法提取感兴趣区域
通过手动设置初始种子点,利用区域生长算法得到脑部区域,这在医学领域可以辅助医生进行医疗诊断。
案例描述:
区域生长算法常用于提取图像中的感兴趣目标区域,为后续图像分析做准备。
本案例采用区域生长算法提取医学图像中的人的脑部区域。
案例数据:数据为1张人脑图片brain.jpg。
 案例步骤参考:
(1)导入包;
(2)读入图片srclmg(单通道灰度图);
(3)构造一个跟原图等大小的零值标记矩阵a;
(4)手动选取初始种子和生长阈值;
(5)运行区域生长算法,得到前景目标标记矩阵a;
(6)由前景目标标记矩阵a跟原图点乘得到感兴趣区域并显示结果。

三、完整实验程序、结果与分析

代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
from collections import deque# 读取图像为灰度图
srclmg = cv2.imread("D:/tuxiang/brain.jpg", cv2.IMREAD_GRAYSCALE)
if srclmg is None:print("Error: Image not found.")exit()# 显示图像并选择种子点(使用阻塞模式)
plt.imshow(srclmg, cmap='gray')
plt.title('Click on the seed point and close window to continue')
seed_points = plt.ginput(1, timeout=0)  # 必须点击1次
plt.close()# 验证是否获取到有效种子点
if len(seed_points) < 1:print("Error: No seed point selected!")exit()# 转换坐标并初始化参数
x_seed = int(round(seed_points[0][0]))
y_seed = int(round(seed_points[0][1]))
seed = (y_seed, x_seed)  # OpenCV坐标格式 (行, 列)
threshold = 10  # 明确定义阈值参数 <-- 修正关键点# 创建标记矩阵
h, w = srclmg.shape
a = np.zeros_like(srclmg, dtype=np.uint8)# 初始化队列并添加种子点
queue = deque([seed])
a[seed] = 255# 定义8邻域偏移量
neighbors = [(-1, -1), (-1, 0), (-1, 1),(0, -1), (0, 1),(1, -1), (1, 0), (1, 1)]# 区域生长算法
while queue:i, j = queue.popleft()for di, dj in neighbors:ni, nj = i + di, j + djif 0 <= ni < h and 0 <= nj < w and a[ni, nj] == 0:# 使用正确的变量名thresholdif abs(int(srclmg[ni, nj]) - int(srclmg[i, j])) <= threshold:a[ni, nj] = 255queue.append((ni, nj))# 提取感兴趣区域并显示结果
result = cv2.bitwise_and(srclmg, srclmg, mask=a)plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(srclmg, cmap='gray')
plt.title('Original Image')plt.subplot(1, 2, 2)
plt.imshow(result, cmap='gray')
plt.title('Segmented Brain Region')
plt.show()

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

在这里插入图片描述

四、本次作业中出现的问题及心得

通过本次实验,我深刻认识到算法实现中细节把控与参数调优的重要性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F10xx 参考手册

6. 什么是寄存器 本章参考资料&#xff1a;《STM32F10xx 参考手册》、《STM32F10xx数据手册》、 学习本章时&#xff0c;配合《STM32F10xx 参考手册》“存储器和总线架构”及“通用I/O(GPIO)”章节一起阅读&#xff0c;效果会更佳&#xff0c;特别是涉及到寄存器说明的部分。…

TCVectorDB 向量数据库简介

简介 尽管目前大多数开源向量数据库来自海外&#xff0c;配置简单且性能优异&#xff0c;但由于网络原因&#xff0c;如果向量数据库部署在海外&#xff0c;而产品面向国内市场&#xff0c;网络延迟将是必须考虑的问题。因此&#xff0c;选择国内服务提供商的云向量数据库往往是…

力扣-比特位计数(统计一个数二进制下1的个数)

下面是题面 1.用c的内置函数__builtin_popcount&#xff08;&#xff09; 语法&#xff1a;__builtin_popcount&#xff08;int x&#xff09;&#xff0c;函数会返回一个二进制下x所含的1的个数 2.直接数位枚举 这是最慢也是暴力做法&#xff0c;写法也很简单 用一个while循环…

青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块

青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块 一、包1. **什么是 Crate&#xff1f;**2. **Crate 的类型**3. **Crate 的结构**4. **使用 Crate**5. **创建和管理 Crate**6. **发布 Crate**7. **Crate 的优势**8. **示例**创建一个 library crate 二、单元…

强化学习入门:马尔科夫奖励过程二

文章目录 前言1、动作2、策略总结 前言 最近想开一个关于强化学习专栏&#xff0c;因为DeepSeek-R1很火&#xff0c;但本人对于LLM连门都没入。因此&#xff0c;只是记录一些类似的读书笔记&#xff0c;内容不深&#xff0c;大多数只是一些概念的东西&#xff0c;数学公式也不会…

【大数据知识】今天聊聊Clickhouse部署方案

ClickHouse部署 一、ClickHouse部署一、单节点部署1. 安装准备2. 目录规划3. 核心配置4. 启动服务 二、集群部署方案1. 集群拓扑设计2. 分布式配置3. 表引擎选择 三、安全加固1. 认证配置2. SSL加密 四、性能优化1. 核心参数调优2. 资源隔离 五、监控与维护1. Prometheus 集成2…

打卡Day28

题目1&#xff1a;定义圆&#xff08;Circle&#xff09;类 要求&#xff1a; 1.包含属性&#xff1a;半径 radius。 2.包含方法&#xff1a; ●calculate_area()&#xff1a;计算圆的面积&#xff08;公式&#xff1a;πr&#xff09;。 ●calculate_circumference()&#xff…

BERT 进阶:Albert 模型详解与实战

目录 BERT 进阶&#xff1a;Albert 模型详解与实战 一、ALBERT 的优化策略 &#xff08;一&#xff09;Embedding 参数因式分解 &#xff08;二&#xff09;跨层参数共享 &#xff08;三&#xff09;巨剑连贯性损失 二、ALBERT 模型架构 &#xff08;一&#xff09;Tran…

使用 163 邮箱实现 Spring Boot 邮箱验证码登录

使用 163 邮箱实现 Spring Boot 邮箱验证码登录 本文将详细介绍如何使用网易 163 邮箱作为 SMTP 邮件服务器&#xff0c;实现 Spring Boot 项目中的邮件验证码发送功能&#xff0c;并解决常见配置报错问题。 一、为什么需要邮箱授权码&#xff1f; 出于安全考虑&#xff0c;大…

深入解析Spring Boot与Spring Security的集成实践

深入解析Spring Boot与Spring Security的集成实践 引言 在现代Web应用开发中&#xff0c;安全性是一个不可忽视的重要方面。Spring Security作为Spring生态中的安全框架&#xff0c;提供了强大的认证和授权功能。本文将结合Spring Boot&#xff0c;详细介绍如何集成Spring Se…

C#将1GB大图裁剪为8张图片

C#处理超大图片&#xff08;1GB&#xff09;需要特别注意内存管理和性能优化。以下是几种高效裁剪方案&#xff1a; 方法1&#xff1a;使用System.Drawing分块处理&#xff08;内存优化版&#xff09; using System; using System.Drawing; using System.Drawing.Imaging; us…

Linux系统启动相关:vmlinux、vmlinuz、zImage,和initrd 、 initramfs,以及SystemV 和 SystemD

目录 一、vmlinux、vmlinuz、zImage、bzImage、uImage 二、initrd 和 initramfs 1、initrd&#xff08;Initial RAM Disk&#xff09; 2、initramfs&#xff08;Initial RAM Filesystem&#xff09; 3、initrd vs. initramfs 对比 4. 如何查看和生成 initramfs 三、Syste…

AIStarter Windows 版本迎来重磅更新!模型插件工作流上线,支持 Ollama / ComfyUI 等多平台本地部署模型统一管理

如果你正在使用 AIStarter 工具进行本地 AI 模型部署 &#xff0c;那么这条消息对你来说非常重要&#xff01; 在最新推出的 AIStarter Windows 正式版更新中 &#xff0c;官方对整个平台进行了功能重构和性能优化&#xff0c;尤其是新增了「模型插件工作流 」功能&#xff0c…

深入理解桥接模式:解耦抽象与实现的设计艺术

一、为什么需要桥接模式&#xff1f;从“类爆炸”问题说起 你是否遇到过这样的开发困境&#xff1f; 当需要为系统扩展新功能时&#xff0c;继承体系像滚雪球一样越变越臃肿&#xff1a;新增一种遥控器类型&#xff0c;需要为电视、音响各写一个子类&#xff1b;新增一种设备类…

Java 中的泛型原理与实践案例

引言&#xff1a;为什么需要泛型 在Java 5之前&#xff0c;集合类只能存储Object类型的对象&#xff0c;这带来了两个主要问题&#xff1a; 类型不安全&#xff1a;可以向集合中添加任何类型的对象&#xff0c;容易出错繁琐的类型转换&#xff1a;从集合中取出元素时需要手动…

springboot3+vue3融合项目实战-大事件文章管理系统-获取文章分类详情

GetMapping("/detail")public Result<Category> detail(Integer id){Category c categoryService.findById(id);return Result.success(c);}在CategoryService接口增加 Category findById(Integer id); 在CategoryServiceImpl增加 Overridepublic Category f…

从零开始创建一个 Next.js 项目并实现一个 TodoList 示例

Next.js 是一个基于 React 的服务端渲染框架&#xff0c;它提供了很多开箱即用的功能&#xff0c;如自动路由、API 路由、静态生成、增量静态再生等。本文将带你一步步创建一个 Next.js 项目&#xff0c;并实现一个简单的 TodoList 功能。 效果地址 &#x1f9f1; 安装 Next.j…

分布式锁: Redisson红锁(RedLock)原理与实现细节

分布式锁是分布式系统的核心基础设施&#xff0c;但 单节点 Redis 锁在高可用场景下存在致命缺陷&#xff1a;当 Redis 主节点宕机时&#xff0c;从节点可能因异步复制未完成而丢失锁信息&#xff0c;导致多个客户端同时持有锁。为此&#xff0c;Redis 作者 Antirez 提出了 Red…

c++多态面试题之(析构函数与虚函数)

有以下问题展开 析构函数要不要定义成虚函数&#xff1f;基类的析构函数要不要定义成虚函数&#xff1f;如果不定义会有什么问题&#xff0c;定义了在什么场景下起作用。 1. 基类析构函数何时必须定义为虚函数&#xff1f; 当且仅当通过基类指针&#xff08;或引用&#xff09;…

Python高级进阶:Vim与Vi使用指南

李升伟 整理 在 Python 高级进阶中&#xff0c;使用 Vim 或 Vi 作为代码编辑器可以显著提升开发效率&#xff0c;尤其是在远程服务器开发或快速脚本编辑时。以下是关于它们在 Python 开发中的高级应用详解&#xff1a; 1. Vim/Vi 简介 Vi&#xff1a;经典的 Unix 文本编辑器…