Как выполнить сегментацию изображения в Java? - PullRequest
2 голосов
/ 01 ноября 2010

Привет, ребята, я младенец из-за техники обработки изображений в Java, я решил разработать один проект по обработке изображений, поэтому мне нужно, какие алгоритмы соблюдаются, а также какой из них легче разработать, пожалуйста, кто-нибудь, назовите мне, что можетотлично подходит для меня ..... а также, какая технология лучше всего подходит для обработки изображений Java или Matlab?веди меня ...

Ответы [ 5 ]

2 голосов
/ 03 августа 2011

Для сегментации изображений в JAVA вы также можете использовать IMMI-инструмент с открытым исходным кодом (http://spl.utko.feec.vutbr.cz/en/).). По сравнению с Matlab, он (на мой взгляд) более прост в использовании и позволяет также использовать интеллектуальный анализ изображений.

1 голос
/ 05 июля 2016

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

Если вы работаете над исследовательским проектом, требующим повышения производительности, быстрой проверки и написания отчетов, Matlab и аналогичные инструменты являются лучшим вариантом.С другой стороны, если вы разрабатываете программный продукт, Java, C ++, C, Objective-C и т. Д. больше указывается.Решения Matlab не так просто доставить и поддерживать в работе.

Поскольку вы спросили, как выполнить сегментацию изображений в Java, я приведу пример с использованием Java и Marvin Image Processing Framework .По предложению @Asif Sharif, сегментация FloodFill - хорошая стратегия, и я ее использовал!

ВХОДНОЕ ИЗОБРАЖЕНИЕ: enter image description here

ВЫХОДНОЕ ИЗОБРАЖЕНИЕ: enter image description here

КАК ЭТО РАБОТАЕТ:

  1. Загрузка входного изображения.
  2. Измените зеленые пиксели на белые пиксели.
  3. Примените пороговое значение интенсивности для отделения переднего плана от фона.
  4. Примените морфологическое закрытие к группированным частям одного и того же объекта
  5. Используйте сегментацию FloodFill дляполучить сегменты.
  6. Нарисуйте координаты сегментов в исходном изображении.

ИСТОЧНИК:

import static marvin.MarvinPluginCollection.*;

public class SimpleSegmentation {
    public SimpleSegmentation(){
        // 1. Load image
        MarvinImage original = MarvinImageIO.loadImage("./res/robocup.jpg");
        MarvinImage image = original.clone();
        // 2. Change green pixels to white
        filterGreen(image);
        // 3. Use threshold to separate foreground and background.
        MarvinImage bin = MarvinColorModelConverter.rgbToBinary(image, 127);
        // 4. Morphological closing to group separated parts of the same object
        morphologicalClosing(bin.clone(), bin, MarvinMath.getTrueMatrix(30, 30));
        // 5. Use Floodfill segmention to get image segments
        image = MarvinColorModelConverter.binaryToRgb(bin);
        MarvinSegment[] segments = floodfillSegmentation(image);
        // 6. Show the segments in the original image
        for(int i=1; i<segments.length; i++){
            MarvinSegment seg = segments[i];
            original.drawRect(seg.x1, seg.y1, seg.width, seg.height, Color.yellow);
            original.drawRect(seg.x1+1, seg.y1+1, seg.width, seg.height, Color.yellow);
        }
        MarvinImageIO.saveImage(original, "./res/robocup_segmented.png");
    }
    private void filterGreen(MarvinImage image){
        int r,g,b;
        for(int y=0; y<image.getHeight(); y++){
            for(int x=0; x<image.getWidth(); x++){
                r = image.getIntComponent0(x, y);
                g = image.getIntComponent1(x, y);
                b = image.getIntComponent2(x, y);
                if(g > r*1.5 && g > b*1.5){
                    image.setIntColor(x, y, 255,255,255);
        }}}
    }
    public static void main(String[] args) { new SimpleSegmentation();  }
}
1 голос
/ 14 февраля 2014

Алгоритм сегментации изображения зависит от того, какой тип вывода вы хотите после сегментации. Каждый алгоритм выполняет различную сегментацию. Я думаю, что растущий регион или Flood Fill хороши для этой цели. Вы можете использовать Java / JAI и JavaCV для задач обработки изображений.

1 голос
/ 02 ноября 2010

Вы можете использовать библиотеку Java Advanced Imaging (JAI) для обработки изображений в Java.Вы должны решить для себя, лучше ли вам Java или MATLAB.

0 голосов
/ 01 ноября 2010

MATLAB лучше для обработки изображений. И лучший способ - найти специальные инструменты для обработки изображений (или библиотеки).

...