引言
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做图就行啦!效果如下所示