如何使用imageJ输出每个点的强度?

时间:2015-09-14 13:54:40

标签: java python imagej imagej-macro

我想要一张照片的每个点的强度,我应该调用哪个函数?让我说我的图片的像素是125 x 125,我想要强度为(0,0)到(125,125),是否有一个函数让我给出一个坐标,它会给我一个像这样的强度

function(0,123) --> intensity?

2 个答案:

答案 0 :(得分:0)

ImageJ macro language

result = getPixel(0,123);
print(result);

从其他scripting languages,您可以使用ImageJ Java API,例如ImageProcessor#getPixel(int x, int y)方法(ImageJ1)或net.imglib2.Positionable#setPosition(int[] position)net.imglib2.Sampler#get()方法(ImageJ2)

例如,在 Python

  • (使用ImageJ1结构)
from ij import IJ

imp = IJ.getImage()
result = imp.getProcessor().getPixel(0, 123)
print result
# @Dataset img
ra = img.randomAccess()
ra.setPosition([0, 123])
result = ra.get()
print result

答案 1 :(得分:0)

ImageJ使用抽象类ImageProcessor,它大概是""发现在java.awt中的BufferedImage的扩展。

您可以使用ImageProcessor中提议的方法之一:

public abstract int getPixel(int x, int y);
public abstract int get(int x, int y);
public abstract int get(int index);

但是当您想要访问多个通道(彩色图像)上的像素编码时,它会变得有点混乱。

以下是使用栅格访问像素的简单方法:

ImageProcessor myimage = ... ;
BufferedImage image = myimage.getBufferedImage() ;
int intensity = image.getRaster().getSample(0, 0, 0) ; // Get the value.
image.getRaster().setSample(0, 0, 0, NewValue) ; // Set a new value.

这是最简单的方法,但不是最快的方法。最快的是直接访问存储在DataBuffer中的值,但是您必须处理该类型。