# coding:utf-8
from glob import glob
import os
import SimpleITK as sitk
from pathlib import Path
import numpy as np
import imageio
import pandas as pd

def rle_encode(mask, bg = 0) -> dict:
vec = mask.flatten()
nb = len(vec)
where = np.flatnonzero
starts = np.r_[0, where(~np.isclose(vec[1:], vec[:-1], equal_nan=True)) + 2]
lengths = np.diff(np.r_[starts, nb])
values = vec[starts]
assert len(starts) == len(lengths) == len(values)
rle = {}
for start, length, val in zip(starts, lengths, values):
if val == bg:
continue
rle[val] = rle.get(val, []) + [str(start), length]
# post-processing
rle = {lb: " ".join(map(str, id_lens)) for lb, id_lens in rle.items()}
return rle def generate_rel(LABELS, path):
preds = [] for i in range(len(path)):
file = path[i]
file_name = file.split("\\")[-1].split("_seg")[0]
case = file_name.split("_")[0]
print("case:{}, file_name:{}".format(case, file_name))
seg = sitk.ReadImage(file)
seg = sitk.GetArrayFromImage(seg)
for j in range(seg.shape[0]):
if j>=0 and j<9:
number = str(0)+str(0)+str(0)+str(j+1)
elif j>=9 and j<99:
number = str(0)+str(0) + str(j+1)
else:
number = str(0) + str(j+1)
name = file_name+"_slice_"+number
output = seg[j, ...]
Snapshot_img = np.zeros(shape=(seg.shape[1],seg.shape[2],3), dtype=np.uint8) # png设置为3通道
Snapshot_img[:, :, 0][np.where(output == 1)] = 1 #我们也有3个标签,其中值分别为1,2,3,所以我们需要给每个标签都赋予不同的通道
Snapshot_img[:, :, 1][np.where(output == 2)] = 1
Snapshot_img[:, :, 2][np.where(output == 3)] = 1
rle_lb = rle_encode(Snapshot_img[:, :, 0]) if np.sum(Snapshot_img[:, :, 0]) > 1 else {}
rle_sb = rle_encode(Snapshot_img[:, :, 1]) if np.sum(Snapshot_img[:, :, 1]) > 1 else {}
rle_sto = rle_encode(Snapshot_img[:, :, 2]) if np.sum(Snapshot_img[:, :, 2]) > 1 else {}
index = (0,1,2)
rel = [rle_lb, rle_sb, rle_sto]
preds += [{"id": name, "class": lb, "predicted": rle.get(1, "")} for i, rle, lb in zip(index, rel, LABELS)]
df_pred = pd.DataFrame(preds)
df_pred.to_csv("submission.csv", index=False) if __name__ == "__main__":
pred_file = glob(r"D:\compation\kaggle\3D_preprocess\a\*") # 获取到该文件夹下所有的标签(3D nii文件)
LABELS = ("large_bowel", "small_bowel", "stomach")
generate_rel(LABELS, pred_file)

结果:

利用3D标签,生成RLE标签编码,并保存到csv文件的更多相关文章

  1. 【Java/JDBC】利用ResultSetMetaData从数据库的某表中获取字段信息并存到csv文件

    代码下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-2.rar 这篇还不够完善,请看更完善的续篇 ...

  2. 根据导出的查询结果拼接字符串,生成sql语句并保存到txt文件中

    import os os.chdir("C:/") path = os.getcwd() print(path) f = open("sql.csv") # p ...

  3. SQL SERVER利用BCP命令在命令行下导出数据到csv文件中

    bcp "select * from (DBNAME).dbo.qt_trace where User_1 is not null" queryout c:\%date:~6,4% ...

  4. 利用PHPExcel实现数据保存到excel文件

    include(dirname(__FILE__) .'/phpexcel-1.7.7/Classes/PHPExcel.php'); include(dirname(__FILE__) .'/php ...

  5. struts2标签库----控制标签详解

         前面几篇文章我们介绍了有关struts2的基本内容,简单理解了整个框架的运作流程.从本篇开始我们逐渐了解和使用struts2为我们提供的标签库技术,使用这些标签可以大大降低我们表现层的开发难 ...

  6. 利用a标签导出csv文件

    原文 简书原文:https://www.jianshu.com/p/a8687610cda3 大纲 1.需求分析 2.通过a标签实现文件导出 3.实现方式 1.需求分析 导出文件,使用最多的方式还是服 ...

  7. 在QMainWindow中利用多个QDockWidget构成标签页tab(原创)

    功能描述: 在QMainWindow下,使用多个QDockWidget构成可切换,可拖动,可关闭的标签页:标签页的切换由相关联的QAction触发. 实现效果: 代码如下: QDockWidget * ...

  8. 原生js怎么为动态生成的标签添加各种事件

    这几天用zepto.js写了不少事件,突然想到一个问题,那就是原生的js如何给动态生成的标签添加事件?因为这些标签都是后来通过ajax或者运行其他点击事件生成的,那么如果之前给他们写事件他们这个dom ...

  9. javascript生成新标签的三种方法

    javascript生成新标签的三种方法:http://www.cnblogs.com/online-link/p/6062423.html

  10. 【待补充】[Spark Core] Spark 实现标签生成

    0. 说明 在 IDEA 中编写 Spark 代码实现将 JSON 数据转换成标签,分别用 Scala & Java 两种代码实现. 1. 准备 1.1 pom.xml  <depend ...

随机推荐

  1. 写写java中的optional

    当我们写代码的时候经常会碰见nullpointer,所以在很多情况下我们需要做各种非空的判断.JDK8中引入了optional,他是一个包装好的类,我们可以把对象传入optional对象中,接下来就可 ...

  2. UML各类基础知识总结

    1.UML关系 泛化(也就是我们传统意义上的继承关系) 子类继承父类,关系用extend关键字标识: 关联 可以说是一种属于关系,图中即说的是PhoneNumber类属于Master类,同时,除了一对 ...

  3. 支付宝退款和结果查询接口简单实现(.Net 7.0)

    〇.前言 支付宝对 .Net 的支持还是比较充分的,在每个接口文档中都有关于 C# 语言的示例,这样就大大降低了对接的难度,很容易上手. 官方接口文档地址:退款-alipay.trade.refund ...

  4. docker dockerfile基础指令

    dockerfile是用来构建docker镜像文件!命令参数脚本 构建步骤 1.编写一个dockerfile文件 2.dockerbuild构建成为一个镜像 3.docker run运行镜像 4.do ...

  5. Jmeter函数助手19-machineName

    machineName函数用于获取当前计算机的用户名. 存储结果的变量名(可选)

  6. 如何将AI模型与CAE(计算机辅助工程)结合 —— AI大模型能否用于CAE有限元分析和数值模拟仿真的工业软件领域?

    引自: https://www.zhihu.com/question/611863569/answer/3271029434?utm_id=0 有限元分析中的三个要素,几何模型,本构模型和边界条件. ...

  7. ZPL Viewer工具网站

    新上线的ZPL Viewer工具网站 大家好! 在工作中,我们经常需要设计和预览ZPL(Zebra Programming Language)文件.以前,我一直使用ZPL Design这类工具,但后来 ...

  8. 【粉丝问答19】Linux内核中为啥变量没初始化就用了?你确定了解宏定义?

    @ 目录 一.问题 二.分析 三.宏定义的注意点 1. 只占用编译时间 2. 宏替换发生时机 3. 预处理包括哪些工作 四.如何快速展开复杂的宏定义? 第一步 第二步 五.练习 六.15个经典宏定义小 ...

  9. OpenPCDet为KITTI数据集生成数据信息出现错误TypeError: load() missing 1 required positional argument: ‘Loader‘的解决方案

    OpenPCDet为KITTI数据集生成数据信息出现错误 TypeError: load() missing 1 required positional argument: 'Loader' 通过查阅 ...

  10. vs2022不安装docker desktop可以打包镜像吗

    vs2022开发的项目可以直接打包镜像到 linux主机. idea 可以使用docker插件直接打包镜像到linux,我想vs2022也可以,于是开始摸索 官网只说支持docker desktop ...