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

发布于:2025-05-17 ⋅ 阅读:(23) ⋅ 点赞:(0)

一、实验目的

 培养利用图像处理技术解决实际问题的能力。
 培养利用图像处理技术综合设计实现的能力。
 掌握在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 + dj
        if 0 <= ni < h and 0 <= nj < w and a[ni, nj] == 0:
            # 使用正确的变量名threshold
            if abs(int(srclmg[ni, nj]) - int(srclmg[i, j])) <= threshold:
                a[ni, nj] = 255
                queue.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()

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

在这里插入图片描述

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

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


网站公告

今日签到

点亮在社区的每一天
去签到