Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绘图和其他折线图的图像增强_Java_Image Processing - Fatal编程技术网

Java 绘图和其他折线图的图像增强

Java 绘图和其他折线图的图像增强,java,image-processing,Java,Image Processing,我正在寻找用于(科学)绘图和图表图像增强的库例程。典型示例如所示 和的图3 它们具有以下特点: 它们通常使用非常少的基本体(直线、字符、圆、矩形) 它们通常是单色(黑色/白色)或只有很少的块颜色 原稿没有渐变或图案 我希望重建原语,并在下一阶段分析(可能包括线条检测和OCR)之前寻找一种算法来恢复图像中干净的线条。噪音通常来自: 使用JPGs(噪声通常出现在原始基元附近) 抗锯齿 我需要免费/开源的解决方案,最好是现有的Java库。如果有任何已经做了一些工作或重建线,这将是一个奖金!对

我正在寻找用于(科学)绘图和图表图像增强的库例程。典型示例如所示

和的图3

它们具有以下特点:

  • 它们通常使用非常少的基本体(直线、字符、圆、矩形)
  • 它们通常是单色(黑色/白色)或只有很少的块颜色
  • 原稿没有渐变或图案
我希望重建原语,并在下一阶段分析(可能包括线条检测和OCR)之前寻找一种算法来恢复图像中干净的线条。噪音通常来自:

  • 使用JPGs(噪声通常出现在原始基元附近)
  • 抗锯齿
我需要免费/开源的解决方案,最好是现有的Java库。如果有任何已经做了一些工作或重建线,这将是一个奖金!对于字符识别,我很乐意在这一阶段隔离每个字符并推迟OCR,不过也希望能有人指出这一点

更新: 我感到惊讶的是,即使有悬赏,也没有对这个问题作出实质性的答复。因此,我本人正在调查此事。我仍然希望得到答案,但答案应该超出我自己的答案。

回答自己的问题 由于近一周后仍没有答案,我现在计划:

我在另一篇SO帖子上发现了对的提及,然后发现:

[http://www.tomgibara.com/computer-vision/canny-edge-detector][2]
来自汤姆·吉巴拉

这在默认模式下非常容易使用,主程序为:

    public static void main(String[] args) throws Exception {
             File file = new File("c.bmp");
     //create the detector
     CannyEdgeDetector detector = new CannyEdgeDetector();
     //adjust its parameters as desired
     detector.setLowThreshold(0.5f);
     detector.setHighThreshold(1f);
     //apply it to an image
     BufferedImage img = ImageIO.read(file);
     detector.setSourceImage(img);
     detector.process();
     BufferedImage edges = detector.getEdgesImage();
     ImageIO.write(edges, "png", new File("c.png"));
}
这里ImageIO读取和写入位图。未经处理的图像被读取为24位BMP(ImageIO似乎因颜色范围较低而失败)。默认设置是Gibara的开箱即用

边缘检测非常令人印象深刻,它勾勒出了所有的线条和字符。这个位图

将转换为边

现在我有两个任务:

  • 将直线装配到轮廓上,轮廓基本上是干净的“有轨电车线”。我希望这对于干净的图表来说是直接的。如果有人提到Java库以使行原语符合大纲,我将不胜感激
  • 识别字符。Gibara在分离它们方面做得很好,因此这是一个识别单个标志符号的练习。我可以使用轮廓来隔离每个轮廓的单个像素贴图,然后将它们传递给。或者,轮廓可能足够好,可以直接识别字符。我不知道字体是什么,但大多数字符在32-255范围内,我相信我可以建立启发式映射
有关在Java中加载位图的信息,请参见

我希望重建原语,并寻找一个算法 在下一阶段分析之前恢复图像中的干净线条 (可能包括行检测和OCR)

你看过监狱工具吗?()

他们有矢量化图形的API,非常快速和灵活;请参见此处的API和文档:

Java库 OpenCV是计算机视觉任务的go-to库。此处有Java绑定:。OpenCV涵盖了从基本图像处理过滤器到高级对象和运动检测算法的所有内容

测线 要检测直线,请尝试Hough变换。OpenCV教程有一个很好的解释:

经典的Hough变换输出无限多条直线,但OpenCV还实现了一种称为概率Hough变换的变体,用于输出线段。它应该给你所需要的。学术论文原件如下:

检测到线段后,可能需要检测链接线段并将它们连接在一起。对于简单的图像,您可能只需要对所有段端点进行蛮力比较就可以了。如果在一个小半径内检测到多个端点,例如2个像素,请将它们连接在一起以确保线条连续。还可以测量连接线段之间的角度以检测多边形

圆检测
还有另一种Hough变换可以检测圆,在这里解释:

简单/高斯模糊是否适合您的需要?这里描述的平滑可以通过
java.awt
包中的类轻松实现和调整,而无需使用第三方库。简单/高斯模糊是否适合您的需要我不知道!我希望能有一些例子来说明如何做到这一点。@Yura这种开箱即用的精明方法(见下文)能做更多我需要的事情。很高兴你找到了解决方案:)@Yura。不,我没有:-)我已经走到一半了。我仍然需要适应线条和人物,我之所以授予这个奖项,是因为尽管我研究了霍夫变换,但我还没有意识到PHT的威力。它看起来非常适合我需要的东西(尽管我还没有试过——答案刚刚出来)