基于OpenCV对胸部CT图像的预处理

news2025/2/25 2:44:30

1 . 传作灵感

胸部CT中所包含的噪声比较多,基于OpenCV简单的做一些处理,降低后续模型训练的难度。

2. 图像的合成

在语义分割任务中有的时候需要将原图(imput)和标注数据(groudtruth)合成一幅图像,观察图像分割的效果,涉及的代码如下:

import matplotlib.pyplot as plt
import os
import pandas as pd
from scipy.ndimage.interpolation import zoom
from PIL import Image
from matplotlib import image
import matplotlib.pyplot as plt

img=Image.open('dataset/train_image/1.3.6.1.4.1.14519.5.2.1.6279.6001.109002525524522225658609808059_66.jpg',)
mask= Image.open('dataset/train_mask/1.3.6.1.4.1.14519.5.2.1.6279.6001.109002525524522225658609808059_66.jpg')

plt.subplot(2, 2, 1)
plt.imshow(img,cmap='bone')
plt.subplot(2, 2, 2)
plt.imshow(mask,cmap='bone')
# 图像融合显示
plt.subplot(2, 2, 3)
#原图以0.6的比例加入,mask以0.4的比例加入
plt.imshow(img, alpha=0.6,cmap='bone')
plt.imshow(mask, alpha=0.4,cmap='gray')
plt.show()

合成的效果如图所示:

还有一种方法使用Image.blend(img, mask, 0.5)函数,具体代码如下:

img=Image.open('dataset/train_image/1.3.6.1.4.1.14519.5.2.1.6279.6001.109002525524522225658609808059_66.jpg',)
mask= Image.open('dataset/train_mask/1.3.6.1.4.1.14519.5.2.1.6279.6001.109002525524522225658609808059_66.jpg')
#
img = img.convert('L')
mask = mask.convert('L')

img.show()
mask.show()

con = Image.blend(img, mask, 0.5)
con.show()

合成的效果如下:

3. 高斯滤波

img =cv.imread('dataset/train_image/1.3.6.1.4.1.14519.5.2.1.6279.6001.109002525524522225658609808059_66.jpg', cv.IMREAD_GRAYSCALE)
mask = cv.imread('dataset/train_mask/1.3.6.1.4.1.14519.5.2.1.6279.6001.109002525524522225658609808059_66.jpg', cv.IMREAD_GRAYSCALE)
cv.imshow("img",img)
# 高斯滤波
img_Gauss=cv.GaussianBlur(img,(7,7),0,0)
dst2 = cv.GaussianBlur(img, (9, 9), 0, 0)
cv.imshow("img_Gauss", img_Gauss)

效果如下:

   

3.中值滤波

img_median = cv.medianBlur(img,5)
cv.imshow("img_median", img_median)

4.适应阈值滤波

#自适应阈值滤波
t2,img_ostu = cv.threshold(img_median, 0,255, cv.THRESH_OTSU)
t2,img_ostu = cv.threshold(img_median, 0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
cv.imshow("img_ostu", img_ostu)

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

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

相关文章

iframe的替代方案有吗?做页面嵌套界面套娃

UIOTOS可以了解下,uiotos.net,通过连线来代替脚本逻辑开发,复杂的交互界面,通过页面嵌套轻松解决,是个很新颖的思路,前端零代码! 蓝图连线尤其是独创的页面嵌套和属性继承技术,好家…

在RK3588开发板使用FFMpeg 结合云服务器加SRS实现摄像头数据推流到云端拱其他设备查看

今天测试了一把在开发板把摄像头数据推流到云端服务器,然后给其他电脑通过val软件拉取显示摄像头画面,浅浅记录一下大概步骤 1.开发板端先下载ffmpeg apt install ffmpeg2.云服务器先安装SRS的库 云服务器我使用ubuntu系统,SRS是个什么东西&…

非模块化 Vue 开发的 bus 总线通信

个人感觉,JavaScript 非模块开发更适合新人上手,不需要安装配置一大堆软件环境,不需要编译,适合于中小项目开发,只需要一个代码编辑器即可开发,例如 vsCode。网页 html 文件通过 script 标签引入 JavaScrip…

【NLP练习】使用seq2seq实现文本翻译

使用seq2seq实现文本翻译 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 from __future__ import unicode_literals, print_function, division from io import open import unicodedata import string impo…

[附源码]石器时代_恐龙宝贝内购版_三网H5手游_带GM工具

石器时代之恐龙宝贝内购版_三网H5经典怀旧Q萌全网通手游_Linux服务端源码_视频架设教程_GM多功能授权后台_CDK授权后台 本教程仅限学习使用,禁止商用,一切后果与本人无关,此声明具有法律效应!!!&#xff0…

【spring】Bean的生命周期回调函数和Bean的循环依赖

目录 1、Bean的生命周期 2、Bean的生命周期回调函数 2.1、初始化的生命周期回调 2.2、销毁的生命周期回调 3、Bean的循环依赖 1、Bean的生命周期 spring的bean的生命周期主要是创建bean的过程,一个bean的生命周期主要是4个步骤:实例化,…

【属性系统概述】

属性系统概述 🌟 静态属性与动态属性🌟 官方文档中的定义🌟《Qt 5.9 C开发指南》中的定义🌟 Qt中属性的使用 🌟 静态属性与动态属性 ✨ 静态属性 :在创建QObject类时通过宏Q_PROPERTY定义的属性&#xff0c…

让GPT们成为我们的小助手:使用ChatGPT来生成测试用数据

让GPT们成为我们的小助手 任务:帮忙生成测试数据 今天本来想做一个测试,所以需要一些测试数据。为了让测试显得更真实,所以希望测试数据看上去就是一份真实的数据,所以我就希望ChatGPT(这里是代指,我有使…

vue3对象数组格式的动态表单校验

如你有一个表单&#xff0c;表单内容是对象&#xff0c;但是对象内还有可动态循环的数组进行动态表单校验。 效果如图&#xff1a;查看源码 页面内容&#xff1a; <div class"arrForm-Box"><el-form :model"state.formData" :rules"rule…

基于springboot+vue+Mysql的体质测试数据分析及可视化设计

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Oracle count的优化-避免全表扫描

Oracle count的优化-避免全表扫描 select count(*) from t1; 这句话比较简单&#xff0c;但很有玄机&#xff01;对这句话运行的理解&#xff0c;反映了你对数据库的理解深度&#xff01; 建立实验的大表他t1 SQL> conn scott/tiger 已连接。 SQL> drop table t1 purge…

OpenAI 正在开发一种可以防止版权诉讼的工具

OpenAI 正在开发一种名为 Media Manager 的工具&#xff0c;该工具将使内容创建者和所有者能够确定他们是否愿意将自己的内容用于 ML 研究和 AI 模型训练。 Media Manager 将做什么&#xff1f; 明年推出的 Media Manager 将使内容创作者和所有者能够更好地控制他们的工作是否…

Java学习第05天-编程思维与编程能力

文章目录 综合应用案例&#xff1a;找素数数组元素的复制数字加密模拟双色球 综合应用 涉及的知识点&#xff1a; 变量、数组运算符&#xff1a;基本运算符、关系运算符、逻辑运算符流程控制&#xff1a;if、switch、for、while、死循环、循环嵌套跳转关键字&#xff1a;break、…

day5Qt作业

服务器端 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//准备组件&#xff0c;初始化组件状态this->setFixedSize(800,600);chatwidget new QListWidge…

Box86源码解读记录

1. 背景说明 Github地址&#xff1a;https://github.com/ptitSeb/box86 官方推荐的视频教程&#xff1a;Box86/Box64视频教程网盘 2. 程序执行主体图 Box86版本: Box86 with Dynarec v0.3.4 主函数会执行一大堆的初始化工作&#xff0c;包括但不限于&#xff1a;BOX上下文 …

三层交换机静态路由连通实验

静态路由是一种手动配置路由表的方式&#xff0c;网络管理员需要手动指定网络中的每一个路由器下一跳路由器的地址&#xff0c;以及到达目的网络的最短路径。静态路由的路由表不会自动更新&#xff0c;如果网络拓扑发生了变化&#xff0c;管理员需要手动更改路由表。 实验拓扑图…

信息系统架构模型_1.单机应用模式和客户机/服务器模式

1.单机应用模式&#xff08;Standalone&#xff09; 单机应用系统是最简单的软件结构&#xff0c;是指运行在一台物理机器上的独立应用程序。这些软件系统&#xff0c;从今天的软件架构上来讲&#xff0c;是很简单&#xff0c;是标准的单机系统。当然至今&#xff0c;这种复杂的…

面向对象 03:类与对象的创建、初始化和使用,通过 new 关键字调用构造方法,以及创建对象过程的内存分析

一、前言 记录时间 [2024-05-10] 系列文章简摘&#xff1a; Java 笔记 01&#xff1a;Java 概述&#xff0c;MarkDown 常用语法整理 Java 笔记 11&#xff1a;Java 方法相关内容&#xff0c;方法的设计原则&#xff0c;以及方法的定义和调用 面向对象 01&#xff1a;Java 面向对…

数学:人工智能领域的基石与灵魂

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到了我们生活的方方面面&#xff0c;从智能家居、智能医疗到自动驾驶、智能客服&#xff0c;AI无处不在。然而&#xff0c;当我们赞叹于AI的神奇时&#xff0c;却往往忽视了其背后的推动力——数学…

Leetcode—2105. 给植物浇水 II【中等】

2024每日刷题&#xff08;131&#xff09; Leetcode—2105. 给植物浇水 II 实现代码 class Solution { public:int minimumRefill(vector<int>& plants, int capacityA, int capacityB) {int size plants.size();int i 0;int j size - 1;int capA capacityA;in…