删除图像中的所有水平和垂直线

时间:2018-12-28 07:54:52

标签: c# opencv image-processing emgucv

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

            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);

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

输入图片:

enter image description here

输入图片:

enter image description here

如果您发现某些垂直线没有被去除。我在Visual Studio中使用emgu.cv库,代码为C#。不使用emgu的任何解决方案也将受到赞赏

2 个答案:

答案 0 :(得分:2)

在Imagemagick中,可以使用morphology close,但是必须将结果与原始图像合并以删除线条。形态闭合使短的水平或垂直部分变成白色,而留下长的黑线。因此,结果必须取反并添加到原始结果中。重要的是使形态学线比最短的线段小,但比文本的任何部分长。因此,在下面,我将图像处理为垂直线并取反。然后对白色的水平线重复并取反。然后,我将两组线结合起来并将它们加在一起。最后,我将合并的行添加到原始图像中。

输入: enter image description here

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(垂直线): enter image description here

tmp2(水平行): enter image description here

tmp3(组合和取反的行): enter image description here

结果: enter image description here

对于Imagemagick 7,请转换为magick。

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

答案 1 :(得分:0)

您可以使用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