Java中的图像分割库

时间:2011-11-03 19:51:51

标签: java image image-segmentation

我正在开发一个项目,其中包括“通过计算机阅读图表”的程序 我需要进行图像分割,以便识别图像输入中的形状及其位置。我的教授说我可以使用任何公共图像分割库来做到这一点。 有没有可以达到此目的的良好图像分割库?

非常感谢

1 个答案:

答案 0 :(得分:6)

例如,在JAVA中,这些工具提供了许多用于图像分割的算法:

<强> ImageJ的

http://rsbweb.nih.gov/ij/

<强>斐济

http://fiji.sc/wiki/index.php/Fiji

Rapidminer IMMI

http://www.burgsys.com/image-mining

Marvin Framework

http://marvinproject.sourceforge.net/


<强>补

即使是通用的,我认为在某种意义上可以回答这个问题。由于这个问题已经结束,我将为那些在这里寻找一个简单的Java图像分割示例的人补充@ radim-burget的答案。

图像分割是一种图像处理任务,由大多数图像处理框架处理。在下面的示例中,我使用的是Marvin Framework

细分图元素的算法:

  1. 加载图片和二值化
  2. 应用形态侵蚀来删除线条,文本等
  3. 应用填充细分以获取细分
  4. 在原始图像中绘制线段。
  5. <强>输入:

    enter image description here

    侵蚀后:

    enter image description here

    <强>结果:

    enter image description here

    源代码:

    import static marvin.MarvinPluginCollection.*;
    
    public class SegmentDiagram {
    
        public SegmentDiagram(){
            MarvinImage originalImage = MarvinImageIO.loadImage("./res/diagram.png");
            MarvinImage image = originalImage.clone();
            MarvinImage binImage = MarvinColorModelConverter.rgbToBinary(image, 250);
            morphologicalErosion(binImage.clone(), binImage, MarvinMath.getTrueMatrix(5, 5));
            image = MarvinColorModelConverter.binaryToRgb(binImage);
            MarvinSegment[] segments = floodfillSegmentation(image);
    
            for(int i=1; i<segments.length; i++){
                MarvinSegment seg = segments[i];
                originalImage.drawRect(seg.x1, seg.y1, seg.width, seg.height, Color.red);
                originalImage.drawRect(seg.x1+1, seg.y1+1, seg.width, seg.height, Color.red);
            }
            MarvinImageIO.saveImage(originalImage, "./res/diagram_segmented.png");
        }
    
        public static void main(String[] args) {
            new SegmentDiagram();
        }
    }
    

    形状识别是另一个主题,已在Stack Overflow上讨论过:

    2D Shape recognition algorithm - looking for guidance