實驗八 基于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.pswp.cn/news/905913.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905913.shtml
英文地址,請注明出處:http://en.pswp.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 文本編輯器…