字符串是一种文本的数据类型。在Macro语言当中,主要是指英文的双引号""中包括的字符。
字符串可以理解为字符的串联。在存储上,可以认为是一个字符数组,每一位的元素按照先后顺序都是可以提取的。
当我们需要利用Macro,提取其中某个元素,例如“Hello”这个单词,可以利用substring()这个函数,官网说明如下:
string = "Hello World!"
print(substring(string, 0, 5))
Macro语言中,字符串的索引值是从 0 开始的,这里substring(string, 0, 5)正好选择了“Hello”这个词。
如果substring只定义一个参数,例如substring(string, 6),则会从6开始,提取6以后所有的字符:
Macro语言中有各种字符串操作的函数:
图像的名称就属于字符串,在处理图像时往往需要根据图像名称的不同,对图像进行分类,进行不同的处理和测量。
这时候就需要提取字符串中的元素,并加以判断,从而进行不同的操作。
举一个例子,对不同的sample分别拍摄了细胞核(DAPI)和绿色荧光(GFP)两个通道的图片,最终一个sample包含三张图片:
怎样批量对细胞核图片进行自动细胞计数,对绿色荧光图片进行平均荧光强度的测量?
观察图片的命名可以发现,细胞核图片命名的结尾是"_ch00.tif",绿色荧光图片的命名是"_ch01.tif",通过判断图片名称的这一个标志,就可以区分这两类图片。
先上代码:
最后分别得到细胞数以及平均荧光强度:
这里的代码用到循环、条件语句与函数封装,可以复习:
Treasure琛:ImageJ开发教程——条件结构与像素遍历zhuanlan.zhihu.com代码解析
代码可以分为三大部分:
一、获得所有图像名称(2-3行)
path
选择路径后,利用getFileList()函数得到该文件夹中所有图片的名称,保存为list这个数组。
二、获得图像特征命名,加以判断后调用对于函数(4-19行)
for
利用for循环遍历整个list,首先利用substring()函数,得到每个图像名称从9开始的所有字符,并保存到label这个字符串变量当中,其中包含了命名的特征。
然后对字符串进行判断:
如果字符串为"_ch00.tif",则该图片属于细胞核,调用Count_Num()这个自定义函数。
或者如果字符串为"_ch01.tif",则该图片属于绿色荧光,调用Measure_Fluo()这个自定义函数。
三、自定义函数(20-38行)
function
与这篇文章的原理相同:
Treasure琛:ImageJ开发教程——函数封装zhuanlan.zhihu.com这里定义了两个函数,计算荧光强度(Measure_Fluo),以及自动细胞计数(Count_Num),调用时需要输入参数为title。
但这里需要注意增加了去除自带比例尺这一步骤:
run("Set Scale...","distance=0 known=0 pixel=1 unit=pixel");// Remove the scale
这一步主要是为了结果都以pixel为单位,好同类比较。
这篇文章的代码可以在GitHub下载到:
GitHub-ImageJ Tutorialgithub.com如果对于ImageJ使用有什么问题可以私信我,或者给我发邮件:zhaoyc9@163.com
更多教程可以关注我的专栏:
ImageJ实用教程zhuanlan.zhihu.com希望对大家有帮助~