ImageJ-Macro Language

引言

ImageJ的用户界面是挺丑的

连个自动跳广告的功能都没有。。。

但它对开发者(Developer)的友好程度却非常高

所以你如果懂一点儿编程

用起来就会非常开心

当然了,真的只需要懂一点点就行

这一点点就是ImageJ自带的Macro Language (宏语言)



宏语言的一般学习方法

学编程嘛,不管是啥语言

官方文档【链接在此】要多读

但只能当做工具书一样查阅

当然了Macro首先要知道

有哪些数据类型(数字、字符、数组、image、stacks……)

如何创造数据

如何操作和计算数据(for循环、if、while等等)

如何导出保存数据

如果你已经有一些编程基础

那么以上内容一个小时就可以掌握

接下来,你可能想自定义function,但在此之前

有哪些内置函数(built-in functions)

这些内置函数不仅功能强大

而且也是你自己写函数很好的样板

不过了,以上都是最一般的学习方法

如果你有一个“好导师”或者“好老板”

你自然而言就会拥有

最快也有可能是最好的学习方法


Tips:Recorder里面记录下来的命令

可以直接在Macro编辑器里面使用哦

Macro编辑器,Ctrl+Shift+N即可打开


一个简单的例子

要求:将下面胶图中两个泳道都转化成曲线


即计算信号强度(灰度)并对竖直方向(y)距离作曲线图

这是典型的“降维”操作,所以要压缩水平方向(x)的像素,其实就是取均值咯

虽然ImageJ有Gels方面的插件,但是比较死板

我们希望自己选择一个区域(ROI,region of interest)

获取的output中即包含信号强度数值列表,也包含对应的图像

废话少说,直接上代码:

/*
 * 使用前先用矩形选择工具选择条带
 * 输出结果自行拷贝到excel中进行作图
 */

dir = getDirectory("image"); //获取当前图像文件保存路径
run("Duplicate...",'title=lane'); //对当前选区ROI进行复制
run("8-bit"); 
ID = getTitle();
selectWindow(ID);
width = getWidth();
height = getHeight();
lane = newArray(height);
for(y=0;y<height;y++){ //遍历像素点
	lane_value = 0;
	for(x=0;x<width;x++){
		p = getPixel(x,y);
		lane_value = lane_value + p;
	}
	lane_value = lane_value/width;
	lane[y] = lane_value;
}
selectWindow(ID);
saveAs("tiff",dir+"lane.tiff"); //保存选区lane图像
close();
Array.show("output",lane); //打印降维后的数据
运行过程

选中矩形区域之后,直接run,就会弹出output结果来

然后把这Value拷贝到excel做图就行啦!效果如下所示




猜你喜欢

转载自blog.csdn.net/sheldonxxd/article/details/80409437