欢迎来到专业的宏发范文网平台! 心得体会 党建材料 工作总结 工作计划 思想汇报 事迹材料 发言讲话 述职报告
当前位置:首页 > 范文大全 > 公文范文 > 正文

ImageJ的数字图像处理研讨论文

时间:2021-12-20 15:20:49 浏览量:

    ImageJ是一个代码开放的java图像处理程序,充分利用了java语言的特性,为数字图像领域的研究注入了新的活力。本文介绍了ImageJ强大的插件功能和自身的macro语言,并展示了在ImageJ下常用数字图像处理方法的操作。

关键词  ImageJ;macro;插件 

作者简介:陈家树,男,重庆永川市人,西南大学计算机信息与科学学院2005级硕士研究生,研究方向:图形图像处理。

引言

现在,关于图像处理和分析的软件或者函数库,很多采用的都是c和c++语言,对很多常见的图像处理函数都有现成的代码和成熟的工具。然而,针对java这一面向对象程序设计语言,却没有能很好地利用起来,在这上面开展的工作也较少,相关的工具也很少。ImageJ的出现在一定程度上改变了这一局面。ImageJ是目前世界上最快的纯java图像处理程序。它能在0.1秒内对一张2048x2048的图片进行过滤。

ImageJ不同的版本可以在Windows, Mac OS, Mac OS X 和 Linux系统上运行。它能读入许多种图片格式,包括TIFF, GIF, JPEG, BMP, DICOM 和 FITS。它支持“栈”,也就是一系列的图片共用一个窗口。它还是多线程的,所以像在处理读入图片这种费时的操作时,还可以并行进行其他的操作。它提供一些标准的图像处理函数,比如锐化、平滑、边缘检测和中值滤波等,能对图片进行缩放、旋转和反转等。更重要的是,ImageJ采用了一种开放式的结构,通过加入java语言的插件来完成它的扩展。这样,使用ImageJ的内置编辑器和java编译器就能得到各种插件。这样的机制就使开发人员自己编写的插件能解决他所需要解决的任何图像处理和分析的问题。与之配合使用的macro语言,也为ImageJ带来了更多的方便。

ImageJmacro语言

一个macro就是能自动产生一系列ImageJ命令的程序。有两种方法可以创建macro程序。最简单的一种就是使用ImageJ的Plugins/Macros/Record命令,这样当你使用ImageJ菜单中的命令时,就会自动在一个Recorder中记录下来,生成macro语句,得到macro程序。还有一种创建方法,打开Plugins/New,在弹出的对话框中输入创建的macro程序的名字,选定“type”为“macro”,接下来就可以在弹出的编辑框中编写自己的macro程序了,它以后缀名“.txt”保存。macro程序提供了把多个ImageJ命令组合起来用的途径,研究人员也可以根据自己的需要定制。ImageJ可以把macro程序添加到“工具栏”上,也可以添加进“plugins”菜单中,所以它的使用让开发研究变得更加简便。

2.1  macro语言的变量

macro语言是一种“无类型”定义的语言。也就是变量的使用不需要先进行声明,也不用显式给出变量的数据类型。当它们被使用在赋值语句中时,会被自动初始化为相对应的类型。所以一个变量就可以用来存放各种数据类型,包括数字、字符串或者数组等。甚至在同一个macro程序中,同一个变量能存放任何的数据类型。看下面这段程序:

    v = 1.23;
    print(v);
    v = "a string";
    print(v);
    v = newArray(10, 20, 50);
    for (i=0; i<v.length; i++) print(v[i]);

可以看到变量“v”的使用是非常灵活的。需要注意的是,变量名是区分大小写的,“Name”和“name”就分别表示不同的变量。

2.2  macro语言的操作符

    macro语言几乎支持java中所有的操作符,所以这里就不再赘述了,有兴趣的读者可以去参看Bruce Eckel的《Thinking in java》第三版。

2.3  macro语言的if/elsewhile循环语句

在macro语言中,条件语句和循环语句的用法与在java中的用法也是一样的,有兴趣的读者可以去参看Bruce Eckel的《Thinking in java》第三版。

ImageJ良好的易扩展性——插件的应用

    ImageJ的插件就是用java语言编写的,被编译为“.class”的java类文件。它的安装非常简单:把需要用的插件,也就是java的类文件放到ImageJ的“plugins”目录下,然后重新启动ImageJ,这时你就会在“Plugins”的下拉菜单中发现这个插件已经安装了。这里需要注意的是,java类文件的文件名如果使用了下划线“_”

,在“Plugins”中会被空格替代。

根据实现功能的不同,插件被大致分为以下几类:图像的I/O处理,图像的基本特征分析,各种滤波器,图形操作,还有特别针对“图像栈(Stack)”的处理插件,这是ImageJ的一个非常重要的应用。下面对它做进一步的介绍。

3.1  Stack的基本概念

Stack就是把一系列相关的图片以“栈”的形式显示在同一窗口内,通过一条命令就可以处理整个“栈”的所有图片。

3.2  Stack的应用

下面通过一个目标跟踪的例子来看对它的使用:                  

          

图1是一个由50张图片组成的图片栈的第一帧,我们能看到两只白蚁在托盘上的运动。我们需要对这两只白蚁进行跟踪,包括托盘上白蚁的数量、各自位置的标定和两只白蚁间位置的测量。

第一步,使用Image/Duplicate复制raw-stack的第一帧,命名为background。

第二步,需要把这两只白蚁从background中分开出来。在background里圈定一个矩形框,按下“c”复制,移动这个矩形框直到覆盖掉白蚁,最后按下“v”粘贴上。对每一只白蚁都重复这样的操作,最后得到图2 background。这就是把白蚁分离开后的背景图。

第三步,从该图片栈中所有的图片中减去这个背景图background。使用Process/Image Calculator,在弹出的对话框中,“Image1”就是这个图片栈,这里的“Operator”用“Subtract”,这里的“Image2”就是背景图background。

第四步,使用Image/Adjust Threshold来设定最低和最高阀值。这样,白蚁就是红色,背景就是黑色。调整的标准就是浏览整个图片栈,让所有的红色都始终连在一块。最后点对话框中的“Apply”按钮,就把图片栈里所有50张图片都全部转换为黑/白的二值图片了。如图3 binary-stack所示。

最后,运行“Tracker”插件,得到图4的结果。选中那一栏的意义如下:在该图片栈的第5帧图片上,发现2只白蚁,第一只白蚁所在位置坐标是(46.4,65.1),第二只所在位置坐标是(76.3,89.4),它们之间的距离是38.49个像素。

同时弹出的还有一个表示每一帧对应的白蚁之间距离的二维坐标关系图,

限于篇幅关系,这里就不再给出了。

 

图4  白蚁跟踪结果

 

除了这种目标跟踪插件外,还有其他的跟踪插件,比如像MultiTracker,

Manual_Tracking,SpotTracker, MTrack2,ParticleTracker和MTrackJ等。它们的具体使用可以查看相关的手册。

关于Stack的插件还有很多,可以根据研究人员的需要有选择的学习使用。相关资料可以在站点:http://rsb.info.nih.gov/ij/plugins/ 中找到。

结束语

      ImageJ作为Java语言开发的图像处理和分析平台,具备多种图像处理和分析功能,特别是在医学影像学诊断领域的应用非常广泛。该软件支持插件技术,互联网上有大量针对某些特殊应用领域的免费插件可供下载使用。希望本文能对读者提供一定的帮助。

 

参考文献

[1]  Rasband, W.S., ImageJ, U. S. National Institutes of Health, Bethesda,
Maryland, USA, http://rsb.info.nih.gov/ij/,1997-2006.

[2]  Abramoff, M.D., Magelhaes, P.J., Ram, S.J. "Image Processing with ImageJ".Biophotonics International, volume 11, issue 7,pp. 36-42, (2004).

[3]   Bruce Eckel,‘Thinking in java’Third Edition.

推荐访问:图像处理 研讨 数字 论文 ImageJ

猜你喜欢