2 Star 0 Fork 0

上海科技大学管吉松实验室 / 钙处理工具箱

Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Without author's permission, this code is only for learning and cannot be used for other purposes.
Clone or Download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

钙处理工具包,依赖埃博拉酱的MATLAB扩展数据格式规范

快速上手

运行

>> CaProcessing.DemoList

可以打开三个示例脚本,分别执行Oir转Tiff、配准、测量任务。尝试运行和编辑这些脚本以熟悉工作流程。

目录

本包中所有函数均在CaProcessing命名空间下,使用前需import。使用命名空间是一个好习惯,可以有效防止命名冲突,避免编码时不必要的代码提示干扰。

import CaProcessingToolbox.*;

DemoList:列出所有Demo ImageJRoiDiff:从一群ImageJ ROI中减去另一群ImageJ ROI

ImageJRoiSetReadout:将ImageJ的RoiSet文件读入为椭圆ROI的圆心坐标和横纵半径(以左上角为零点)

Oir2OmeTiff:将Olympus OIR图像转码为OME-TIFF图像

TiffBatchMeasure:Tiff批量测量

TiffBatchRegister:Tiff批量配准

ImageJRoiDiff

从一群ImageJ ROI中减去另一群ImageJ ROI,即作差集。仅比较每个ROI的文件名,文件名相同即认为ROI相同。

名称-值对组参数

RoiAPath(1,1)string,被减的ImageJ RoiSet。如不指定,将打开文件选择对话框。

RoiBPath(1,1)string,要减去的ImageJ RoiSet。如不指定,将打开文件选择对话框。

RoiCPath(1,1)string,输出文件路径。这个路径要求不一定能完全实现:

  • 如果集合A被减光了,将不输出任何文件
  • 如果只剩1个,则将在此处指定的目录下放置那个剩下的.roi文件,文件名保留那个原本的文件名
  • 如果剩余多个,则按照此文件名放置一个.zip文件

返回值

RoiCPath(1,1)string,实际输出的文件路径,不一定与输入的该参数相同。如果没有输出任何文件,返回""。

ImageJRoiSetReadout

将ImageJ的RoiSet文件读入为椭圆ROI的圆心坐标和横纵半径(以左上角为零点)

ImageJ的RoiSet可以是单个.roi文件,也可以是多个ROI打包成.zip文件。每个ROI文件的第7个字节记录了ROI形状(目前仅支持2,圆形),第9~16字节是4个Big-endian的uint16,依次记录了该ROI上、左、下、右边界位置。本函数一次性将所有ROI的四个边界位置读出,并转化为椭圆ROI的圆心坐标和横纵半径

输入参数

RoiSetPath(1,1)string,ImageJ的RoiSet文件路径

返回值

Cx(:,1)double,每个ROI的圆心横坐标

Cy(:,1)double,每个ROI的圆心纵坐标

Rx(:,1)double,每个ROI的横半轴长

Ry(:,1)double,每个ROI的纵半轴长

Oir2OmeTiff

将Olympus OIR图像转码为OME-TIFF图像

本工具将Olympus系列显微镜拍摄的OIR格式图像转换成更通用可读的OME-TIFF格式,并能够保留通道颜色、Z层信息。以及输出元数据。虽然Olympus也提供了转码程序,但性能低下,且不能转码超过4㎇的大文件,十分不方便使用。本工具克服了这个问题,提供并行转码支持,性能更高,且无文件大小限制。

本函数主要使用Ome Bioformats库,将Olympus OIR图像转码为OmeTiff图像。虽然库中直接提供了loci.formats.FormatTools.convert函数进行直接转码,但本函数同时支持将不同的通道、Z层拆分到单个文件,这些多个输出文件可以并行执行,还支持将CD通道不转码成文件而是给每个时间周期求一个平均值,作为Tag输出。

OirPaths=MATLAB.UITools.OpenFileDialog("Filter","Olympus OIR file|*.oir","Multiselect",true,"Title","选择Oir头文件,后续文件会自动添加");
[DirPath,OirNames]=fileparts(OirPaths);
DirPath=uigetdir(DirPath(1),"选择要保存到目录位置");
MetaPaths=string(fullfile(DirPath,OirNames+".元数据.mat"));
import CaProcessing.Oir2OmeTiff;
if isscalar(OirPaths)
	[Metadata,~,Tags] = Oir2OmeTiff("Verbose","Parallel",OirPath=OirPaths,OutputDirectory=DirPath);
	save(MetaPaths,"Metadata","Tags");
else
	parfor a=1:numel(OirPaths)
		[Metadata,~,Tags] = Oir2OmeTiff("Verbose",OirPath=OirPaths(a),OutputDirectory=DirPath);
		MATLAB.General.Save(MetaPaths(a),Metadata,Tags,'Version',CaProcessing.Version);
	end
end

重复参数

Flag(1,1)CaProcessing.O2OTFlag,重复,可以设置多个旗帜实现特殊功能。

名称值参数

OirPath(1,1)string,输入Oir头文件的路径。后随文件会自动检测,无需手动添加(不能修改后随文件的路径,请保持默认)

OutputDirectory(1,1)string=fileparts(OirPath),位置参数,输出Tiff的目录,默认和Oir文件同目录输出,文件名相同,仅将扩展名改为.tif

返回值

Metadata(1,1)struct,Oir文件的元数据,包括图像各个维度的尺寸、通道颜色、帧率、拍摄条件、拍摄设备和配置等信息

TiffPaths(:,:)string,输出Tiff文件的路径。根据Flags参数的不同设置:

  • 如果指定了OneChannelOneFile,不同通道的文件路径将排列成列向量。
  • 如果指定了OneZOneFile,不同Z层的文件路径将排列成行向量。
  • 如果两者均指定,将排列成SizeC×SizeZ的矩阵,文件名后缀先C后Z,如Example.RNDD3G.Z2.tif
  • 如果两者均不指定,将输出标量,如Example.tif

Tags(1,1)struct,默认CD通道不输出Tiff,而是给每个时间周期(SizeX×SizeY×SizeC×SizeZ)求平均值得到时间序列,作为Tag输出。返回的结构体,每个通道的设备名称作为一个字段,存储一个按时间轴排列的列向量,每个数值表示该时点所有通道、Z层的全图平均值。如果指定了Cds2Tiff,此项为空结构体。

TiffBatchMeasure

Tiff批量测量

本函数将Tiff批量测量,并支持根据ImageJ RoiSet同时测量多个细胞亚群、多个Z层。

本函数的输出是测量文件(测量.mat),可以为每个Tiff文件输出一个测量文件,也可以将所有测量值输出到同一个文件内,取决于是否设置OneFile旗帜。若输出到多文件,则每个文件内是一个Measurements表格,每行是一个细胞亚群,每列是一个Z层。若输出到单文件,则符合CaDF2.0文件格式

import MATLAB.UITools.OpenFileDialog;
CellGroups="所有细胞";
ZLayers=["Z2" "Z5"];
SizeG=numel(CellGroups);
ImageJRoiPaths=cell(1,SizeG);
for G=1:SizeG
	ImageJRoiPaths{G}=OpenFileDialog(Filter="ImageJ RoiSet|*.roi;*.zip",Multiselect=true,Title=sprintf("选择%s的所有Z层的ROI文件",CellGroups(G)));
end
ImageJRoiPaths=vertcat(ImageJRoiPaths{:})';
TiffPaths=OpenFileDialog("Filter","配准Tiff|*.已配准.tif","Multiselect",true,"Title","选择已配准的Tif文件");
MeanTiff=OpenFileDialog(Filter="平均Tiff|*.平均值.tif",Title="如果需要散射光矫正,选择每个Z层的平均Tiff",Multiselect=false);
ScatterRadius=20;
%%
CaProcessingToolbox.TiffBatchMeasure('Verbose','Parallel',TiffPaths=TiffPaths,ImageJRoiPaths=ImageJRoiPaths,ScatterRadius=ScatterRadius,MeanTiff=MeanTiff,CellGroups=CellGroups,Parallel=false,ZLayers=ZLayers);

重复参数

Flags(1,:)char,可选设置以下旗帜:

  • Verbose,输出进度信息
  • Parallel,启动并行池执行
  • OneFile,将所有测量值保存到一个文件内

名称值参数

TiffPaths(:,1)string,要测量的Tiff文件路径,默认打开文件选择对话框要求用户手动选择

ImageJRoiPaths(:,:)string,必需,ImageJ RoiSet文件路径。第1维排列不同的Z层,第2维排列不同的细胞群体。默认打开文件选择对话框要求用户手动选择

ScatterRadius(1,1)double,散射光半径,半径内的平均像素值将被视为散射光而扣除

MeanTiff(1,1)string,平均值Tiff参照文件路径,仅当指定了ScatterRadius时有效。如果指定该参数,则散射光半径内,平均值Tiff的像素值低于范围内中位数的像素的平均值才会被视为散射光。文件必须按照OmeTiff规范排列所有Z层。

CellGroups(1,:)string,每个细胞群体的名称,必须与ImageJRoiPaths第2维长度一致

ZLayers(:,1)string,每个Z层的名称,必须与ImageJRoiPaths第1维长度一致

GaussianDeback(1,1)single,高斯去背景标准差。如果指定该参数,将在散射光矫正之前先对每帧作高斯模糊作为背景,然后将原图减掉背景

TiffBatchRegister

Tiff批量配准

import MATLAB.UITools.OpenFileDialog;
%先确认当前GPU是否空闲
GpuIsFree=true;
FilesToRegister=OpenFileDialog("Filter","TIFF图像|*.tif","Multiselect",true,"Title","选择要配准的TIFF文件");
FixedImage=OpenFileDialog("Filter","Tiff图像|*.tif","Title","选择基准Tif文件,如果取消则以第1个文件的第1帧为基准");
%%
if GpuIsFree
	MATLAB.Parallel.MmfSemaphore("GPU信号量内存映射文件").Fill(1);
end
CaProcessingToolbox.TiffBatchRegister('Verbose','MeanStd',MovingPaths=FilesToRegister,FixedImage=FixedImage,GpuMmfPath="GPU信号量内存映射文件");

重复参数

Flags(1,1)string,可指定排列以下旗帜:

  • Verbose,输出进度信息
  • Sequential,不启用并行池
  • MeanStd,输出平均值和标准差图
  • DoHisteq,对图像作直方图均衡化,可以用于改善对比度

名称-值对组参数

MovingPaths(:,1)string,所有待配准图像的路径,默认打开文件选择对话框让用户手动选择

Prefix(1,1)string,配准后平均图和标准差图的存放路径前缀(可指定目录位置)。将添加“.平均值”和“.标准差”作为区分。默认与MovingPaths(1)同一文件夹下,前缀“统计”

GpuMmfPath(1,1)string,GPU内存映射文件路径,应在其中预先写入一个字节作为GPU使用上限

MaxTranslationStep(1,1)uint8=10,平移配准最大可能的偏移量

FixedImage,作为参照的固定图,默认MovingPaths(1)的起始IFD。可以输入一张图,也可以是参照图的路径

GaussFilt(1,1)double=0,对图像进行高斯去背景处理的标准差,若为0则不处理

Interp(1,1)string="nearest",插值方法,将作为参数传递给imwarp

Precision(1,1)double=1,若不为1,则将图像缩放那个倍数,配准后再缩回来,可以提高精度

Exponential(1,1)double=1,若不为1,则将每个像素值计算那个指数幂然后得到配准矩阵和位移场,可以增加对比度

AccumulatedFieldSmoothing(1,1)double=0,非刚性变换的平滑参数,若为0则不进行非刚性变换。较大的值倾向于整体扭曲,较小的值倾向于局部扭曲。

返回值

RegisteredPaths(:,1)string,配准后每张图的路径,是配准前路径加“.Registered”后缀

MeanPath(1,1)string,平均图的路径,是Prefix加“.平均值”后缀。仅当指定Flags包含"MeanStd"时才返回此值。

StdPath(1,1)string,标准差图的路径,是Prefix加“.标准差”后缀。仅当指定Flags包含"MeanStd"时才返回此值。

Repository Comments ( 0 )

Sign in for post a comment

About

No description expand collapse
MATLAB and 2 more languages
Cancel

Releases (5)

All

Contributors

All

Activities

Load More
can not load any more
1
https://gitee.com/ShanghaiTech-GuanLab/Ca-Processing-Toolbox.git
git@gitee.com:ShanghaiTech-GuanLab/Ca-Processing-Toolbox.git
ShanghaiTech-GuanLab
Ca-Processing-Toolbox
钙处理工具箱
master

Search

141041 ab9339c7 1850385 141043 25c028d5 1850385