根据标签最大层面ROI提取原始图像区域

今天要实现的任务是提取肿瘤的感兴趣区域。

有两个文件,一个是nii的原始图像文件,一个是nii的标签文件。

我们要实现的是:在标签文件上选出最大层面,然后把最大层面的ROI映射到原始图像区域,在原始图像上提裁剪出ROI区域,然后根据这个ROI,在其上面一层和下面一层,共裁剪出三张原始图像。

将原始图像和标签图像的像素值提取出来

# 读取原始NII文件
image_origin = sitk.ReadImage(r"C:\Users\Administrator\Desktop\Breast\AN_HAI_YING_DCE.nii")# 读取标签NII文件
image_label = sitk.ReadImage(r"C:\Users\Administrator\Desktop\Breast\AN_HAI_YING_label.nii")# 转换为NumPy数组
origin_array = sitk.GetArrayFromImage(image_origin)
label_array = sitk.GetArrayFromImage(image_label)#提取像素值
origin_array = np.array([origin_array[i] for i in range(origin_array.shape[0])])
label_array = np.array([label_array[i] for i in range(label_array.shape[0])])
print(origin_array.shape)
print(label_array.shape)
(36, 480, 480)
(36, 480, 480)

 筛选出标签图像中不为0的像素值最多的那张图像,就是层面最大的图像。

import numpy as np# 假设 tumor_array 是你的数据数组
# tumor_array 的形状为(36, 480, 480)# 遍历每张图片
max_nonzero_pixels = 0
max_nonzero_index = Nonefor i in range(label_array.shape[0]):# 计算当前图片中非零像素的数量nonzero_pixels = np.count_nonzero(label_array[i])# 如果当前图片的非零像素数量比之前的最大值大,则更新最大值和对应的索引if nonzero_pixels > max_nonzero_pixels:max_nonzero_pixels = nonzero_pixelsmax_nonzero_index = i# 打印结果
print("最多非零像素的图片索引为:", max_nonzero_index)
print("对应的非零像素数量为:", max_nonzero_pixels)
最多非零像素的图片索引为: 23
对应的非零像素数量为: 574

 说明第23张图像是ROI层面最大的图像,(准确应该是第24张,因为从0开始)

 根据最大层面的ROI,映射到对应的原始图像中,以及上一层和下一层。

roi_array =np.array([label_array[max_nonzero_index]*origin_array[max_nonzero_index - 1],label_array[max_nonzero_index]*origin_array[max_nonzero_index],label_array[max_nonzero_index]*origin_array[max_nonzero_index + 1]])
roi_array.shape
(3, 480, 480)
plt.imshow(roi_array[1],cmap='gray')

 然后再剔除周围的0像素

参考去除图像周围的0像素,调整大小-CSDN博客

def trim_image(image):# 转换为numpy数组image_array = np.array(image)# 找到非零像素的边界non_zero_indices = np.nonzero(image_array)min_row = np.min(non_zero_indices[0])max_row = np.max(non_zero_indices[0])min_col = np.min(non_zero_indices[1])max_col = np.max(non_zero_indices[1])min_depth = np.min(non_zero_indices[2])max_depth = np.max(non_zero_indices[2])# 裁剪图像cropped_image_array = image_array[min_row:max_row + 1, min_col:max_col + 1, min_depth:max_depth + 1]return cropped_image_array

查看裁剪后的代码

trim_image(roi_array).shape
(3, 31, 26)

 对第三张图像进行可视化

plt.imshow(trim_image(roi_array)[2],cmap='gray')

 这样就裁剪好了

然后使用双向线性插值调整图像的大小

参考 最邻近插值和线性插值-CSDN博客

from PIL import Image
import torch
import torch.nn.functional as F
import numpy as np
import matplotlib.pyplot as pltimage_tensor = torch.tensor(finish_array, dtype=torch.float32).unsqueeze(0)# 目标图像大小
target_height, target_width =224,224# 使用双线性插值角对齐对图像进行缩放
output_bilinear_corners_True = F.interpolate(image_tensor, size=(target_height, target_width), mode='bilinear', align_corners=True)
# 将张量转换回 numpy 数组
output_bilinear_corners_True_array = output_bilinear_corners_True.squeeze().numpy().astype(np.uint8)

 对第二张进行可视化

plt.imshow(output_bilinear_corners_True_array[2],cmap='gray')

 然后就可以将处理好的图像保存

import h5py# 假设 output_bilinear_corners_True_array 是你处理好的数组
# 另外假设你的数组的形状为 (channel, height, width)# 创建一个 HDF5 文件
with h5py.File(r"C:\Users\Administrator\Desktop\Breast\output_bilinear_corners_True.h5", "w") as hf:# 将数组写入 HDF5 文件中hf.create_dataset("output_array", data=output_bilinear_corners_True_array)

 保存到一个h5文件中

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssm082基于java斗车交易系统设计与实现+vue

斗车交易系统 摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理&…

2024年深圳杯东三省数学建模联赛A题论文首发+问题一代码分享

深圳杯A题论文代码分享资料链接:链接:https://pan.baidu.com/s/1L2NVgoefSW-yuqZjEB3wcw 提取码:sxjm 基于优化模型的多个火箭残骸的准确定位 摘要 在现代航天技术中,火箭是实现空间探索的关键工具。由于火箭发射过程中的高成…

web自动化系列-selenium的下拉框定位(十三)

在功能操作过程中 ,遇到下拉列表是很正常的事 ,比如像一些查询条件就都是使用的是下来列表 。所以 ,selenium也需要支持对下拉框的操作 。 1.下拉列表 在selenium中,也提供了一个下拉列表操作的类 :Select . 以下为该…

前缀和 || 一维、二维前缀和

一维数组的前缀和 【模板】前缀和_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/acead2f4c28c401889915da98ecdc6bf?tpId230&tqId2021480&ru/exam/oj&qru/ta/dynamic-programming/question-ranking&sourceUrl%2Fexam%2Foj%3Fpage%3D1%2…

【算法基础实验】图论-构建加权无向图

构建加权无向图 理论基础 在图论中,加权无向图是一种每条边都分配了一个权重或成本的图形结构。这种类型的图在许多实际应用中都非常有用,如路由算法、网络流量设计、最小生成树和最短路径问题等。 加权无向图的基本特征 顶点和边: 顶点&…

jdk下载官网

https://www.oracle.com/cn/java/technologies/downloads/ jdk8下载:

修改后门ctime | Linux 后门系列

0x00 前情提要 在 alias 后门 | Linux 后门系列一文中,我们为了让后门完美一些,修改了后门文件的 atime、mtime,但是 ctime 一直没有办法修改,今天我们来把这一块补齐,让后门更加完美 atime -> access t…

乘数而上,创邻科技入选2024数商典型应用场景“乘数榜”

4月18日,由浙江省科学技术协会指导的2024未来数商大会在杭州成功举办。本次大会以“场景突破 乘数而上”为主题,国际国内数商共聚未来科技城学术交流中心,聚焦数据要素市场的制度创新、数据治理、场景应用与生态构建等话题展开研讨。 大会现…

上位机图像处理和嵌入式模块部署(树莓派4b之wifi切换)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前期我们在烧录镜像的时候,一般会配置一个默认的镜像。这主要是为了通过局域网扫描,或者输入arp -a的方式,获得…

macOS 一些系统图标的存放位置 icns

macOS 一些系统图标的存放位置 icns macOS 中有很多好看的图标,有时候就想用一下它,我来告诉你他们的具体位置。 系统图标位置,像各种通用文件类型的图标都在这里面,里面好多高清的系统图标 /System/Library/CoreServices/Core…

22年全国职业技能大赛——Web Proxy配置(web 代理)

前言:原文在我的博客网站中,持续更新数通、系统方面的知识,欢迎来访! 系统服务(22年国赛)—— web Proxy服务(web代理)https://myweb.myskillstree.cn/114.html 目录 RouterSrv …

【redis】Redis数据类型(一)——String类型(包含redis通用命令)

目录 Redis通用命令String类型常用的操作命令一些特殊命令详解setnx示例使用 setrange示例 mset示例 msetnx示例 append示例 getset示例 incr示例使用1.计数器2.限速器 bitcount示例使用:使用 bitmap 实现用户上线次数统计性能 String类型String类型简介String类型的…