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

实验八 基于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()

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

在这里插入图片描述

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

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

相关文章:

  • JDBC实现模糊、动态与分页查询的详解
  • 论文解读:ICLR2025 | D-FINE
  • LangGraph(四)——加入人机交互控制
  • 开源项目实战学习之YOLO11:12.3 ultralytics-models-sam-encoders.py源码分析
  • DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
  • Vue3——父子组件通信
  • Android7 Input(七)App与input系统服务建立连接
  • 灵光一现的问题和常见错误1
  • 搭建基于Windows平台的http文件服务(miniserve+filebrowser+nssm)
  • Datawhale PyPOTS时间序列5月第3次笔记
  • 湖北理元理律师事务所:债务优化中的双维支持实践解析
  • 一分钟用 MCP 上线一个 贪吃蛇 小游戏(CodeBuddy版)
  • java中的运算符
  • 多线程(4)——线程安全,锁
  • 数学复习笔记 16
  • 在 Linux 上安装 MATLAB:完整指南与疑难解决方案
  • 交流学习 | 江西同为科技有限公司赴海尔总部考察交流
  • Spring源码之解决循环依赖 三级缓存
  • Python二进制运算:高效操作与实用技巧
  • OpenHarmony外设驱动使用 (二),Camera
  • 广西隆林突发山洪,致3人遇难1人失联
  • 光速晋级!2025年多哈世乒赛孙颖莎4比0战胜对手
  • 【社论】城市更新,始终以人为核心
  • 上海老字号卖黄金,与动漫IP联名两周销售额近亿元
  • 新城悦服务:独董许新民辞任,新任独董与另两人组成调查委员会将调查与关联方资金往来
  • 侵害孩子者,必严惩不贷!3名性侵害未成年人罪犯今日执行死刑