Удалить все горизонтальные и вертикальные линии из изображения - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу удалить все горизонтальные и вертикальные линии, но некоторые маленькие вертикальные линии не удаляются.Добавление входных и выходных изображений и кода ниже.

            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

Если вы заметили, что некоторые вертикальные линии не были удалены.Я использую библиотеку emgu.cv в Visual Studio и код C #.Любое решение без использования emgu также будет оценено

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

В Imagemagick вы можете использовать морфологию 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.

Вы можете сделать это в Windows Imagemagick с помощью Magick.NET.См. https://github.com/dlemstra/Magick.NET. Но я подозреваю, что ваш инструмент emgu.cv имеет те же инструменты морфологии.

0 голосов
/ 28 декабря 2018

Вы можете легко сделать это с библиотекой 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
...