我正在开发一个项目,其中包括“通过计算机阅读图表”的程序 我需要进行图像分割,以便识别图像输入中的形状及其位置。我的教授说我可以使用任何公共图像分割库来做到这一点。 有没有可以达到此目的的良好图像分割库?
非常感谢
答案 0 :(得分:6)
例如,在JAVA中,这些工具提供了许多用于图像分割的算法:
<强> ImageJ的强>
<强>斐济强>
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。
细分图元素的算法:
<强>输入:强>
侵蚀后:
<强>结果:强>
源代码:
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上讨论过: