Opencv医学图片分割-以血管、胼胝体MR等分割为例

news2024/9/21 2:46:08

  用到环境
1、pycharm community edition 2022.3.2
2、Python 3.10

后面应该会传代码到资源,比较需要的可以私信我。

总体设计

在这里插入图片描述

图1 扩展实验二“医学图像分割”流程图
## 具体步骤 1. 导入OpenCV和NumPy库 2. 定义阈值分割方法`threshold_segmentation`,接收图像和阈值作为参数,将图像转为灰度图后进行阈值分割,返回二值化图像。 3. 定义区域生长方法`region_growing`,接收图像、种子点和生长阈值作为参数,将图像转为灰度图后创建一个掩膜用于记录已经生长的区域,将种子点加入到生长队列中,然后进行区域生长。在生长过程中,取出队首像素点,如果当前像素点未被访问过且符合生长条件,则加入到生长区域中,并将当前像素点的相邻像素加入到生长队列中。最终返回生长后的掩膜。 4. 加载测试图像。 5. 进行阈值分割方法实验,设置阈值为80,调用`threshold_segmentation`方法得到二值化图像,并显示处理结果。 6. 进行区域生长方法实验,设置种子点坐标为[100, 100],生长阈值为30,调用`region_growing`方法得到掩膜,并显示处理结果。 7. 等待用户按下任意键后关闭所有窗口。

结果展示

血管

在这里插入图片描述

图2 血管原图

在这里插入图片描述

图3 阈值分割(左)与区域生长法(右)对比

  分析:都可以有效实现分割,但是左边的阈值分割去噪能力更强,右边的区域生长法分割的更全面。

在这里插入图片描述

图4 区域生长法阈值选取对比

  分析:左边为阈值选取不合理,右边为阈值选取合理,可以看出阈值选取得当对区域生长法很重要。

在这里插入图片描述

图5 区域生长法种子点坐标选取对比

  分析:左边为区域生长法种子点坐标选取不得当,右边为区域生长法种子点坐标选取得当,可以看出区域生长法种子点坐标选取对结果有致命的影响。

胼胝体MR图像

在这里插入图片描述

图6 胼胝体MR原图

在这里插入图片描述

图7 MR阈值分割(左)与区域生长法(右)对比
  分析:都可以有效实现分割,但是左边的阈值分割去噪能力更强,右边的区域生长法分割的更全面。

在这里插入图片描述

图8 MR区域生长法种子点坐标选取对比
  分析:左边为区域生长法种子点坐标选取不得当,右边为区域生长法种子点坐标选取得当,可以看出区域生长法种子点坐标选取对结果有致命的影响。

代码:

import cv2
import numpy as np

# 阈值分割方法
def threshold_segmentation(image, threshold):
    # 将图像转为灰度图
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 进行阈值分割
    ret, binary = cv2.threshold(gray, threshold, 255, cv2.THRESH_BINARY)
    return binary

# 区域生长方法
def region_growing(image, seed_point, threshold):
    # 将图像转为灰度图
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 创建一个和图像大小相同的掩膜,用于记录已经生长的区域
    mask = np.zeros_like(gray)
    # 将种子点加入到生长队列中
    queue = []
    queue.append(seed_point)
    # 进行区域生长
    while len(queue) > 0:
        # 取出队首像素点
        current_point = queue.pop(0)
        # 如果当前像素点未被访问过,且符合生长条件,则加入到生长区域中
        if mask[current_point[1], current_point[0]] == 0 and abs(gray[current_point[1], current_point[0]] - gray[seed_point[1], seed_point[0]]) < threshold:
            mask[current_point[1], current_point[0]] = 255
            # 将当前像素点的相邻像素加入到生长队列中
            if current_point[1] > 0:
                queue.append([current_point[0], current_point[1] - 1])
            if current_point[1] < image.shape[0] - 1:
                queue.append([current_point[0], current_point[1] + 1])
            if current_point[0] > 0:
                queue.append([current_point[0] - 1, current_point[1]])
            if current_point[0] < image.shape[1] - 1:
                queue.append([current_point[0] + 1, current_point[1]])
    return mask
30
# 加载测试图像
image = cv2.imread('1.png')

# 阈值分割方法实验
threshold = 80
binary = threshold_segmentation(image, threshold)
cv2.imshow('Threshold Segmentation', binary)

# 区域生长方法实验
seed_point = [100, 100] # 种子点坐标
threshold =30  # 生长阈值
mask = region_growing(image, seed_point, threshold)
cv2.imshow('Region Growing', mask)

cv2.waitKey(0)
cv2.destroyAllWindows()


编写不易,求个点赞!!!!!!!
“你是谁?”

“一个看帖子的人。”

“看帖子不点赞啊?”

“你点赞吗?”

“当然点了。”

“我也会点。”

“谁会把经验写在帖子里。”

“写在帖子里的那能叫经验贴?”

“上流!”
cheer!!!

在这里插入图片描述

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

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

相关文章

spring框架-概述(spring特性、生命周期)(一)

文章目录 什么是springspring重要特性spring生命周期知识扩展 什么是spring Spring框架是一个开放源代码的J2EE应用程序框架&#xff0c;由Rod Johnson发起&#xff0c;是针对bean的生命周期进行管理的轻量级容器 ,是为了解决企业级编程开发中的复杂性&#xff0c;实现敏捷开发…

[进阶]网络通信:TCP通信-支持与多个客户端同时通信

目前我们开发的服务端程序&#xff0c;是否可以支持与多个客户端同时通信&#xff1f; &#xfeff;不可以的。&#xfeff;因为服务端现在只有一个主线程&#xff0c;只能处理一个客户端的消息。 代码演示如下&#xff1a; 客户端&#xff1a; public class Client {public…

SpringBoot 异常处理的最佳实践

SpringBoot 异常处理的最佳实践 在 Web 开发中&#xff0c;异常处理是非常重要的一环。在 SpringBoot 框架中&#xff0c;异常处理方式有很多种&#xff0c;但是如何选择最佳实践呢&#xff1f;本文将介绍 SpringBoot 异常处理的最佳实践&#xff0c;并附带代码示例。 异常处理…

flutter - 编写 阿里云-金融级实名认证插件

项目中有实名认证的需求&#xff0c;用户上传身份证反正面&#xff0c;进行人脸核验&#xff0c;后台集成的是阿里云的金融级实名认证SDK&#xff0c;巧合的是阿里云没有packages 需要自己造轮子。 废话不多少&#xff0c;直接上代码&#xff1a; 新建项目 ProjectType Plugin…

网站图片优化技巧及最佳实践

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言使用适当的图片格式…

0017-TIPS-pawnyable : eBPF

原文 BPFの導入 検証器とJITコンパイラ eBPFのバグの悪用 题目下载 BPF介绍 BPF 在介绍eBPF之前&#xff0c;先介绍其前身BPF。 随着时代的发展&#xff0c;BPF的用途越来越广泛&#xff0c;扩展也越来越多。在重大更改后的BPF有时被称为eBPF&#xff08;扩展BPF&#xff09…

路漫漫其修远兮,吾将上下而求索

路漫漫其修远兮&#xff0c;吾将上下而求索 一、坚定信念二、持之以恒地努力三、谦虚和学习的态度四、上下而求索也要遵循道德底线和原则五、建立合适的人际关系和互助机制六、坚定自己的信仰和信念七、个人经验与体会 路漫漫其修远兮&#xff0c;吾将上下而求索——这句话不仅…

python期末上机题:

1、编写Python程序&#xff0c;创建类Temperature&#xff0c;其包含成员变量degree&#xff08;表示温度&#xff09;以及实例方法ToHuaShiDu()和ToSheShiDu&#xff0c;并编写测试代码。 程序运行示例&#xff1a; 请输入摄氏温度&#xff1a;30 摄氏温度 30.0&#xff0…

栈和队列(一)

文章目录 顺序表&#xff0c;链表的有点和缺点链表顺序表 栈和队列栈的实现栈的应用&#xff08;括号匹配问题&#xff09; 顺序表&#xff0c;链表的有点和缺点 链表 优点&#xff1a; 1、任意位置插入删除&#xff0c;时间复杂度位O(1) 2、按需申请释放空间 缺点&#xff1a…

Prompt Engineering 面面观

作者&#xff1a;紫气东来 项目地址&#xff1a;https://zhuanlan.zhihu.com/p/632369186 一、概述 提示工程&#xff08;Prompt Engineering&#xff09;&#xff0c;也称为 In-Context Prompting&#xff0c;是指在不更新模型权重的情况下如何与 LLM 交互以引导其行为以获得…

Latex长表格

示例一&#xff1a; 输出一个长表格的示例。 代码&#xff1a; \documentclass[jou,apacite]{apa6} \usepackage{multirow} \usepackage{array} \newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}} \usepackage{longtable}%\usepackage{showframe} % to visualize…

极致呈现系列之:Echarts漏斗图的流光溢彩

目录 什么是漏斗图漏斗图的特点及应用场景漏斗图的特点漏斗图常见的的应用场景&#xff1a; Echarts中漏斗的常用属性Vue3中创建漏斗图美化漏斗图样式 在数据分析和可视化中&#xff0c;我们经常需要比较不同阶段的数据比例或流程的渐进筛选过程。漏斗图作为一种专门用于展示这…

Qt使用技巧--定义Private类

如果查看Qt的源码&#xff0c;会发现很多类都会有一个***Private类。这是Qt用于封装私有操作的一种设计模式。 给出一个继承自QObject的Private类具体的实现&#xff1a; MyClass.h #include "QObject"class MyClassPrivate; class MyClass: public QObject{ Q_OB…

LangChain让LLM连接更多能力

随着LLM&#xff08;Large language models &#xff09;的发展&#xff0c;不仅仅出现了很多新的应用&#xff0c;一些开发框架也发展很快&#xff0c;典型的就是本文介绍的项目——LangChain&#xff0c;目前LangChain几乎一天一个版本&#xff0c;几个月时间Star数目已经49k…

<C++> C++11 Lambda表达式

C11 Lambda表达式 1.C98中的一个例子 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法。 #include <algorithm> #include <functional> int main() {int array[] {4, 1, 8, 5, 3, 7, 0, 9, 2, 6};// 默认按照小于…

软考:软件工程:面向对象技术与UML,时序图,用例图,类对象,封装,继承,多态

软考&#xff1a;软件工程: 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &#xff08;1&#…

iOS 集成Jenkins pipeline 完整流程

文章目录 一 创建一个Jenkins pipeline 项目配置分支参数在工程中添加 ExportOptions.plist 文件创建放置打包文件的文件夹在工程里面添加shell脚本文件配置pipeline sript构建 一 创建一个Jenkins pipeline 项目 配置分支参数 选择参数化构建构成&#xff0c;如上图所示&#…

网络层实验报告

计算机网络综合实训 实训报告二 所在院系 计算机与信息工程学院 学科专业名称 计算机科学与技术 导师及职称 柯宗武 教授 提交时间 2022.3.29 网络层实验报告 &#xff08;湖北师范大学计算机与信息工程学院 中国 黄石 435002&#xff09; 1 IP分析 1.1背景知识 1.1.1 什么是…

SpringMVC系列-2 HTTP请求调用链

背景 本文作为 SpringMVC系列 第二篇&#xff0c;介绍HTTP请求的调用链&#xff1a;从请求进入Tomcat到数据流返回客户端的完整过程。为了尽可能把流程表达清楚&#xff0c;进行了很多减支处理&#xff0c;只关注主线逻辑。 本文也作为SpringMVC系列后续文章的基础&#xff0…

软考A计划-系统集成项目管理工程师--一般常识-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…