如何在java中执行图像分割?

如何在java中执行图像分割?,java,image-processing,image-segmentation,Java,Image Processing,Image Segmentation,大家好,我是一个java图像处理技术的婴儿,我决定开发一个图像处理项目,所以我需要遵循哪些算法,以及哪一个更容易开发,请有人指导我,这可能对我很好……还有哪种技术最适合图像处理java或Matlab?指导我…MATLAB更适合图像处理。最好的方法是找到特殊的图像处理工具或库。您可以使用该库在java中进行图像处理。你必须自己决定java还是Matlab对你来说更好。 在java中进行图像分割,你也可以考虑使用开源IMMI工具。http://spl.utko.feec.vutbr.cz/en/.

大家好,我是一个java图像处理技术的婴儿,我决定开发一个图像处理项目,所以我需要遵循哪些算法,以及哪一个更容易开发,请有人指导我,这可能对我很好……还有哪种技术最适合图像处理java或Matlab?指导我…

MATLAB更适合图像处理。最好的方法是找到特殊的图像处理工具或库。

您可以使用该库在java中进行图像处理。你必须自己决定java还是Matlab对你来说更好。

在java中进行图像分割,你也可以考虑使用开源IMMI工具。http://spl.utko.feec.vutbr.cz/en/. 与Matlab相比,我认为它使用起来更简单,并且可以简单地启用图像挖掘。

图像分割的算法取决于分割后想要的输出类型。每个算法执行不同的分割。我认为该地区正在增长或正在增长,这对实现这一目标是有益的。
您可以使用Java/JAI和JavaCV来完成此图像处理任务。

我认为您最好的图像处理工具取决于您所从事的项目类型

如果你从事的研究项目需要生产率、快速验证和编写报告,那么Matlab和类似工具是最佳选择。另一方面,如果开发软件产品,则会更详细地说明java、C++、C、Objtovi-C等。Matlab解决方案不容易在生产中交付和维护

既然您询问了如何使用Java进行图像分割,我将提供一个使用Java和的示例。正如@Asif Sharif所建议的,洪水填充分割是一个很好的策略,我使用了它

输入图像:

输出图像:

工作原理:

加载输入图像。 将绿色像素更改为白色像素。 应用强度阈值分离前景和背景。 对同一对象的分离部分应用形态学闭合 使用“洪水填充分段”获取分段。 在原始图像中绘制线段坐标。 资料来源:


错误解析失败:Ljavax/imageio/imageio;帮助
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();  }
}