2

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

4

5 回答 5

2

对于 JAVA 中的图像分割,您还可以考虑使用开源 IMMI 工具 (http://spl.utko.feec.vutbr.cz/en/)。与 Matlab 相比,它(在我看来)更易于使用,并且还可以轻松实现图像挖掘。

于 2011-08-03T11:17:07.870 回答
1

您可以使用Java 高级成像 (JAI)库在 java 中进行图像处理。您必须自己决定是 Java 还是 MATLAB 更适合您。

于 2010-11-02T13:15:24.613 回答
1

图像分割算法取决于分割后你想要什么类型的输出。每种算法执行不同的分割。我认为区域增长或洪水填充有利于此目的。您可以将 Java/JAI 和 JavaCV 用于此图像处理任务。

于 2014-02-14T13:09:02.503 回答
1

我认为最适合您的图像处理工具取决于您正在从事的项目类型。

如果您正在从事需要生产力、快速验证和撰写报告的研究项目,Matlab和类似工具是最佳选择。另一方面,如果你正在开发一个软件产品,Java、C++、C、Objective-C 等就更重要了。Matlab 解决方案在生产中不容易交付和维护。

既然您问如何在 Java 中进行图像分割,我将提供一个使用 Java 和Marvin 图像处理框架的示例。正如@Asif Sharif 所建议的,FloodFill 分段是一个很好的策略,我使用了它!

输入图像: 在此处输入图像描述

输出图像: 在此处输入图像描述

这个怎么运作:

  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();  }
}
于 2016-07-05T13:59:22.293 回答
0

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

于 2010-11-01T07:38:00.513 回答