Java 绘图和其他折线图的图像增强
我正在寻找用于(科学)绘图和图表图像增强的库例程。典型示例如所示 和的图3 它们具有以下特点:Java 绘图和其他折线图的图像增强,java,image-processing,Java,Image Processing,我正在寻找用于(科学)绘图和图表图像增强的库例程。典型示例如所示 和的图3 它们具有以下特点: 它们通常使用非常少的基本体(直线、字符、圆、矩形) 它们通常是单色(黑色/白色)或只有很少的块颜色 原稿没有渐变或图案 我希望重建原语,并在下一阶段分析(可能包括线条检测和OCR)之前寻找一种算法来恢复图像中干净的线条。噪音通常来自: 使用JPGs(噪声通常出现在原始基元附近) 抗锯齿 我需要免费/开源的解决方案,最好是现有的Java库。如果有任何已经做了一些工作或重建线,这将是一个奖金!对
- 它们通常使用非常少的基本体(直线、字符、圆、矩形)
- 它们通常是单色(黑色/白色)或只有很少的块颜色
- 原稿没有渐变或图案李>
- 使用JPGs(噪声通常出现在原始基元附近)
- 抗锯齿
[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范围内,我相信我可以建立启发式映射
还有另一种Hough变换可以检测圆,在这里解释:简单/高斯模糊是否适合您的需要?这里描述的平滑可以通过
java.awt
包中的类轻松实现和调整,而无需使用第三方库。简单/高斯模糊是否适合您的需要我不知道!我希望能有一些例子来说明如何做到这一点。@Yura这种开箱即用的精明方法(见下文)能做更多我需要的事情。很高兴你找到了解决方案:)@Yura。不,我没有:-)我已经走到一半了。我仍然需要适应线条和人物,我之所以授予这个奖项,是因为尽管我研究了霍夫变换,但我还没有意识到PHT的威力。它看起来非常适合我需要的东西(尽管我还没有试过——答案刚刚出来)