Как вывести интенсивность каждой точки с помощью imageJ?

Я хочу яркость каждой точки изображения, какую функцию я должен вызвать? Скажем, пиксели моего изображения 125 x 125, мне нужна интенсивность от (0,0) до (125,125), есть ли функция, чтобы я дал координату, она вернет мне такую ​​интенсивность

function(0,123) --> intensity?

person pill45    schedule 14.09.2015    source источник


Ответы (2)


В ImageJ макроязыке:

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

Из других языков сценариев вы можете использовать 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
person Jan Eglinger    schedule 15.09.2015
comment
Отлично, мне удалось написать код на Python для выполнения этой работы. Спасибо. - person pill45; 15.09.2015

ImageJ использует абстрактный класс ImageProcessor, который «примерно» является расширением BufferedImage, найденного в java.awt.

Вы можете использовать один из методов, предложенных в 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, но тогда вам придется иметь дело с типом.

person FiReTiTi    schedule 15.09.2015
comment
Для цветных изображений вы можете использовать метод ImagePlus#getPixel(x,y), который возвращает массив int [], содержащий значения RGBA. - person Jan Eglinger; 15.09.2015