Различные результаты обработки изображений из Java и Matlab

1

Я выполнял простую задачу обработки изображений, которую я прототипировал на Matlab, а затем сделал порт для Java. После выполнения задачи на Java я заметил разные результаты. Это проблема конкретной платформы?

Задача, которую я делал до сих пор, заключается в получении зеленого канала изображения, вычислении процента числа пикселей со значениями определенного диапазона и вычислении среднего арифметического этого канала. Отображаются код и результаты:

Matlab

   a = imread('large.jpg');
   g = a(:,:,2);
   [x,y] = size(b);
   count = 0;
for i=1:x
    for j=1:y
        if g(i,j) < 90 & g(i,j) > 30
            count = count + 1;
            %Mistake part for arithmetic mean. Thanks to james_alvarez
            g(i,j) = 255;
        end
    end
end
 count
 (count/(3000*2400))*100
 mean2(g)

----------

1698469
23.5898
165.9823

Ява

BufferedImage img = ImageIO.read(Function.class.getResource("large.jpg"));
int gCount = 0;
int meanCount = 0;

int w = img.getWidth();

int h = img.getHeight();
for(int i = 0 ; i < w ; i++){

        for(int j = 0 ; j< h ; j++){

            Color c = new Color(img.getRGB(i,j));
            int g = c.getGreen();

            meanCount += g;

            if(g < 90 && g > 30)
                gCount++;
    }
}

System.out.println(gCount);
System.out.println((gCount/(3000.0*2400.0))*100.0);
System.out.println(meanCount/(3000*2400));

----------

1706642
23.70336111111111
121

Почему они дают значительно разные результаты?

  • 0
    Размер изображения 3000x2400
  • 0
    Сделал крошечную ошибку, вставив код здесь и очистив его от вопроса. Сейчас исправлено
Теги:
image-processing
javax.imageio

1 ответ

1
Лучший ответ

В коде Matlab вы также добавляете строку:

g(i,j) = 255;

Какая может быть вероятность того, что среднее значение "g" выше в версии matlab. В противном случае ваши индексы подходят для подсчета? например, в matlab вы используете размер (b), вместо того, чтобы получать ширину/высоту непосредственно из изображения.

  • 0
    размер (б) получает размер, как предполагалось
  • 0
    Действительно, часть g = 255 вызвала проблему из-за различных реализаций среднего значения. Я забыл удалить эту часть из matlab из предыдущего тестирования. Однако как насчет количества этих пикселей?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню