从图像中删除所有水平和垂直线
Remove all horizontal and vertical lines from an image
我想删除所有水平和垂直线,但一些小的垂直线没有被删除。
添加输入和输出图像以及下面的代码。
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 的解决方案也将受到赞赏
您可以使用 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
在Imagemagick中,可以使用morphology close,但是结果必须和原来的结合起来,去除线条。形态闭合使短的水平或垂直线段变白并留下长黑线。所以结果必须被否定并添加到原来的。重要的是使形态线小于最短线段,但长于文本的任何部分。所以在下面,我处理垂直线的图像并取反。然后重复白色水平线并取反。然后我将两组线组合起来并将它们加在一起。最后我将组合线添加到原始图像。
输入:
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。
您应该可以在 Windows Imagemagick 中使用 Magick.NET 执行此操作。参见 https://github.com/dlemstra/Magick.NET。但我怀疑您的 emgu.cv 工具具有相同的形态学工具。
我想删除所有水平和垂直线,但一些小的垂直线没有被删除。 添加输入和输出图像以及下面的代码。
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 的解决方案也将受到赞赏
您可以使用 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
在Imagemagick中,可以使用morphology close,但是结果必须和原来的结合起来,去除线条。形态闭合使短的水平或垂直线段变白并留下长黑线。所以结果必须被否定并添加到原来的。重要的是使形态线小于最短线段,但长于文本的任何部分。所以在下面,我处理垂直线的图像并取反。然后重复白色水平线并取反。然后我将两组线组合起来并将它们加在一起。最后我将组合线添加到原始图像。
输入:
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。
您应该可以在 Windows Imagemagick 中使用 Magick.NET 执行此操作。参见 https://github.com/dlemstra/Magick.NET。但我怀疑您的 emgu.cv 工具具有相同的形态学工具。