Python与matlab关于二进制图片文件读取

本文给出一种自己用python和matlab处理小批量深度学习医学图像的步骤与思路;

首先本文用DenseNet+UNet的模型做脑组织分割,主要分割对象包括脑脊液、脑白质、脑灰质和背景,一共四类,训练完成进行测试,生成.bin二进制文件;

然后要对这个二进制文件进行处理:

import nibabel as nib
import matplotlib as ptl
import os
import numpy as np
import struct

if __name__=='__main__':
	img="E:/BrainSegData/IBSR18/IBSR_01/IBSR_01_label.nii.gz"
	nii = nib.load(img)
	nii1 = nii.get_fdata()#我的数据是float64类型
	nii2 = np.squeeze(nii1)#删除多余的维度
	#上述代码目的是为了在IPython console查看原图像的尺寸,这里是256*128*256
	#下述代码进行二进制文件的处理
    RESpath='C:/Users/ending/Desktop/DL/result_image.bin'
	RESbinfile = open(RESpath, 'rb')
	
	RESpic = np.zeros((((256,128,256,4))))
	#十分耗时的矩阵划分
	for classes in range(4):
    	for z in range(256):
        	for y in range(128):
            	for x in range(256):
               		data = RESbinfile.read(4)
               		elem= struct.unpack("f",data)[0]
               		RESpic[x][y][z][classes]=elem
	RESimg=np.split(RESpic,4,axis=3)#对这个4维数组在第四维划分出4个矩阵
	REStest=RESimg[0]#项目信息在该通道上,建议结合自己的需求再决定要哪个通道的信息
	REStest1=np.squeeze(REStest) #矩阵由(256,128,256,1)变化到->(256,128,256)
	#nii的Header复制
	affine = nii.affine.copy()
	hdr = nii.header.copy()
	#输出nii
	newnii=nib.Nifti1Image(REStest1,affine,hdr)
	nib.save(newnii,'C:/Users/ending/Desktop/DL/REStest1.nii.gz')

分割结果如下图所示,白质灰质都出来,但是脑脊液并不如原图像的明显:
在这里插入图片描述
原图像显示结果:
在这里插入图片描述

分析:有可能处理方式不正确,导致脑脊液信息丢掉,但是查看矩阵里的元素时发现是存在1的,那就有可能是显示方式不对,后续再试试调整到0~3的归一化范围再查看一下。
时发现是存在1的,那就有可能是显示方式不对,后续再试试调整到0~3的归一化范围再查看一下。(updated:2019/11/4)
在这里插入图片描述

Matlab读取.bin文件要简单很多,这里给出代码与思路:
fip=fopen(‘xxx.bin’);
[data,count]=fread(fip,‘float’);%结合需求决定数据类型,不同的数据类型结果也不同
%此时所有数据都存在了data里
img=reshape(data,256,128,256);%按照需求划分矩阵形状
%取某一张切片:
img142=img(:,:,142);
%以pcolor函数绘制三维显示:
xx=linspace(1:1:256);
yy=linspace(1:1:128);
[xt yt] = meshgrid(xx,yy);
xt=xt’;
yt=yt’;
h=pcolor(xt,yt,img142);
在这里插入图片描述
很可惜,从右边标注的范围看出,确实图片的值只有0 1 2而没有3;通过length(find(img==3))的查询矩阵结果看,与原图像相比,训练结果只有9个值是隶属于3的类别,而原图像结果有354k个,暂时未能好好解决这个训练结果有偏差的问题(updated:2019/11/7)
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值