Среда обработки изображений Marvin - проблема с плагином Erosion

У меня проблема с плагином Erosion в Marvin Image Processing Framework. Я хочу сделать размывание, но, к сожалению, после этого я не получаю изображение на выходе. Это мой код:

tempPlugin  = new Erosion();
boolean[][] m = new boolean[][] {
{true,true,true},
{true,true,true},
{true,true,true}
};
tempPlugin.setAttributes("matrix", m);
resultImage = MarvinColorModelConverter.rgbToBinary(resultImage, 127);
tempPlugin.process(resultImage, resultImage);
resultImage = MarvinColorModelConverter.binaryToRgb(resultImage);
resultImage.update();
imagePanelNew.setImage(resultImage);

Я использую Java JDK 1.7 и Marvin Framework 1.5.0 Конечно, я пытался сделать то же самое с файлом.jar, без изменений.

Кто-нибудь может мне помочь, пожалуйста?

1 ответ

Решение

В вашем коде есть некоторые проблемы. Вы не используете Марвина должным образом.

1. Загрузка плагина

Вы должны создать плагин Erosion, используя MarvinPluginLoader:

tempPlugin  = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.erosion");

Таким образом, плагин и зависимости Erosion (поскольку плагин может использовать другие плагины) загружены правильно.

2. В случае Erosion, вы не можете использовать один и тот же объект изображения в качестве входного и выходного изображения.

Вы должны использовать две ссылки, например, клонирование:

tempPlugin.process(resultImage.clone(), resultImage);



Пример:

Ниже представлен исходный код, который достигает того же результата, который представлен на странице подключаемого модуля Erosion:

public class SimpleExample {

private MarvinImagePlugin tempPlugin;

public SimpleExample(){

    // 1. Load and set up plug-in.
    tempPlugin  = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.erosion");

    boolean[][] m = new boolean[][] {
    {true,true,true},
    {true,true,true},
    {true,true,true}
    };

    tempPlugin.setAttributes("matrix", m);

    // 2. Load image
    MarvinImage image = MarvinImageIO.loadImage("./res/erosion_in.png");
    MarvinImage resultImage = MarvinColorModelConverter.rgbToBinary(image, 127);

    // 3. Process and save image
    tempPlugin.process(resultImage.clone(), resultImage);
    resultImage = MarvinColorModelConverter.binaryToRgb(resultImage);
    resultImage.update();
    MarvinImageIO.saveImage(resultImage, "./res/erosion_out.png");
}

public static void main(String[] args) {
    new SimpleExample();
}

}
Другие вопросы по тегам