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

How to output the intensity of every point using imageJ?

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

function(0,123) --> intensity?

In ImageJ macro language:

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

来自其他 scripting languages, you can use the 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

ImageJ 使用抽象 class ImageProcessor,它是 "roughly" 在 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 中的值,但是你必须处理类型。