Быстрый способ манипулировать каждым пикселем из ImagePlus

Здравствуйте, мне нужно получить доступ к каждому пикселю ImagePlus для анализа изображения.

Из-за огромного количества изображений, которые необходимо обработать, мне было интересно, существуют ли специальные эффективные способы/методы для доступа и/или изменения каждого пикселя из imagePlus? Единственная идея, с которой я, естественно, пришел, — это двойной цикл for по матрице изображения, что занимает несколько десятков секунд для изображения 1000x1000. Вот мой код:

ImagePlus Iorg = IJ.openImage("Demo1.png");
int[] pix = Iorg.getPixel(5, 5);
if(Iorg.getSlice() != 1) {
    System.exit(0);
}

for(int w=0; w< Iorg.getDimensions()[0]; w++) {
    for(int h=0; h<Iorg.getDimensions()[1]; h++) {
       System.out.println(w + " x " + h);
       // DO what needs to be done      
    }
}

Есть идеи?


person kaligne    schedule 17.04.2014    source источник
comment
1) System.out.print займет очень много времени. 2. Старайтесь использовать библиотечные методы, а не циклы for. 3) Что вы пытаетесь сделать внутри DO what needs to be done?   -  person smttsp    schedule 17.04.2014
comment
На данный момент я хотел бы разделить каждый пиксель на максимальную интенсивность, которая равна 255. Действительно, я удалил System.out.print, и теперь для цикла по всей матрице требуется 1 секунда: P   -  person kaligne    schedule 17.04.2014
comment
Для деления вы можете использовать Iorg.getProcessor().multiply(<factor>), чтобы выполнить математику без цикла. Я думаю, вам лучше, чтобы изображение было 32-битным с плавающей запятой, прежде чем делать это.   -  person Kota    schedule 17.04.2014


Ответы (1)


Поскольку изображения uchar, то, что вы хотите сделать, эквивалентно

if(selected_pixel==255) 
     selected_pixel = 1; 
else 
     selected_pixel = 0 

Вы можете создать маску, это было бы проще. Я не знаю, в java ImagePlus, но в matlab это mask = image==255;.

Попробуйте использовать такие матричные операции в соответствии с вашими потребностями. Я уверен, что эти методы должны быть где-то внутри библиотеки (если ImagePlus — это библиотека обработки изображений).

person smttsp    schedule 17.04.2014