【问题标题】:How to output the intensity of every point using imageJ?如何使用 imageJ 输出每个点的强度?
【发布时间】:2015-09-14 13:54:40
【问题描述】:

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

function(0,123) --> intensity?

【问题讨论】:

    标签: java python imagej imagej-macro


    【解决方案1】:

    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
    

    【讨论】:

    • 太好了,我设法编写了一个 python 代码来完成这项工作。谢谢。
    【解决方案2】:

    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 中的值,但是你必须处理类型。

    【讨论】:

    • 对于彩色图像,您可以使用 ImagePlus#getPixel(x,y) 方法,该方法返回一个包含 RGBA 值的 int[] 数组。
    猜你喜欢
    • 2012-12-17
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2016-11-09
    • 2018-03-09
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    相关资源
    最近更新 更多