【问题标题】:Remove all horizontal and vertical lines from an image从图像中删除所有水平和垂直线
【发布时间】:2019-05-26 02:09:41
【问题描述】:

我想删除所有水平和垂直线,但一些小的垂直线没有被删除。 添加输入和输出图像以及下面的代码。

            string ImageUrl = @"C:\Users\Jayant\Desktop\test images\rtaImage.tiff";
            Image<Bgr, Byte> image = new Image<Bgr, byte>(ImageUrl);
            Image<Bgr, byte> res = image.Copy();

            LineSegment2D[] lines =
                image
                    .Convert<Gray, byte>()
                    .Canny(16, 16)
                    .HoughLinesBinary(1, Math.PI / 16, 10, 50, 1)[0];

            foreach (LineSegment2D line in lines)
            {
                res.Draw(line, new Bgr(System.Drawing.Color.White), 2);
            }

            res.Save(ImageUrl);

我想删除所有水平和垂直线,但一些小的垂直线没有被删除。 添加上述代码的输入输出。

输入图像:

输出图片:

如果您注意到一些垂直线没有被删除。我在 Visual Studio 中使用 emgu.cv 库,代码是 C# 。任何不使用 emgu 的解决方案也将不胜感激

【问题讨论】:

  • 不要为此使用 Hough。使用带有水平和垂直线结构元素的形态闭合。

标签: c# opencv image-processing emgucv


【解决方案1】:

在 Imagemagick 中,您可以使用形态关闭,但结果必须与原始组合返回以去除线条。形态关闭使短的水平或垂直线段变为白色并留下长的黑线。所以结果必须被否定并添加到原始结果中。重要的是使形态线小于最短的线段,但比文本的任何部分都长。所以在下面,我处理垂直线的图像并取反。然后对水平线重复白色和否定。然后我将两组线组合在一起并将它们加在一起。最后,我将合并的线条添加到原始图像中。

输入:

Imagemagick 6,Unix 语法:

convert \( image.png -alpha off \) \
\( -clone 0 -morphology close rectangle:1x50 -negate +write tmp1.png \) \
\( -clone 0 -morphology close rectangle:50x1 -negate +write tmp2.png \) \
\( -clone 1 -clone 2 -evaluate-sequence add +write tmp3.png \) \
-delete 1,2 \
-compose plus -composite \
result.png


Imagemagick 6 Windows 语法:

convert ( image.png -alpha off ) ^
( -clone 0 -morphology close rectangle:1x50 -negate +write tmp1.png ) ^
( -clone 0 -morphology close rectangle:50x1 -negate +write tmp2.png ) ^
( -clone 1 -clone 2 -evaluate-sequence add +write tmp3.png ) ^
-delete 1,2 ^
-compose plus -composite ^
result.png


tmp1(垂直线):

tmp2(水平线):

tmp3(合并和否定行):

结果:

对于 Imagemagick 7,将 convert 更改为 magick。

您应该能够在带有 Magick.NET 的 Windows Imagemagick 中执行此操作。见https://github.com/dlemstra/Magick.NET。但我怀疑您的 emgu.cv 工具具有相同的形态学工具。

【讨论】:

  • 感谢您的回答。帮助我很好地理解它只是一个更改我们应该写magick代替convert,因为当我们在Windows上安装它时,文件至少对于Windows来说是magick.exe,看起来magick.net正是我需要的,但不确定如何在 C# 中复制相同的命令。如果您也能提供帮助或参考任何资源,那就太好了。
  • 无论如何要在图像中找到表格?
  • @Jayant Rajwani 对不起,我不明白你想要什么。您认为“表”的哪一部分?
【解决方案2】:

您可以使用 ImageMagick 库轻松做到这一点,只需使用一些预定义的过滤器

我不确定这是否适用于 tiff 格式,您可能需要先将 tiff 文件转换为 bmp/png/jpb

这会删除水平线

 convert rtaImage.png -morphology close:1 "1x5: 0,1,1,1,0"

这两个都删除了

 convert rtaImage.png -convolve "0,$v,0,0,$v,0,0,$v,0" -threshold 99% rtaImage2.png

【讨论】:

    猜你喜欢
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多