Как сегментировать шрифт Брайля с помощью камеры реального времени?
Я студент бакалавриата и в настоящее время работаю над финальным проектом по оптическому распознаванию Брайля с использованием камеры реального времени. Я успешно обработал изображение в формате HSV и извлек только значение HSV-изображения, чтобы предотвратить воздействие окружающего света на изображение, выполнил двоичный порог, обнаружение хитрой границы, размытие и расширение для получения только точек Брайля с камеры,
Я хотел бы спросить, как выполнить сегментацию в задаче, в которой расстояние между точками всегда изменяется по мере того, как камера перемещается ближе или дальше к брайлевским текстам?
Любая помощь будет оценена. Спасибо
3 ответа
Нет простого, общего решения вашей проблемы. Конечно, если я не сразу пойму, как расположены эти буквы Брайля, это не будет легко решено простым алгоритмом.
Лучше всего читать литературу по брайлевскому тексту, поговорить с вашим профессором и попросить слепого объяснить вам, как они читают шрифт Брайля.
Кроме этого, вам нужно будет найти базовые линии текстовых строк Брайля и посмотреть, как они отличаются, а затем запустить cvPerspectiveTransform, чтобы выровнять изображение, чтобы вы могли сегментировать точки без учета перспективы.
Чтобы сделать это, вы должны обнаружить некоторую относительную пару координат, которая позволит вам определить "масштаб" написания шрифтом Брайля на вашем изображении. Это может быть идентифицирующая пара точек на любом конце письма или даже просто некоторые характерные точки. С помощью шкалы вы можете преобразовать изображение в один размер, в зависимости от расстояния до камеры.
Эта проблема очень похожа на проблемы, с которыми я столкнулся в своей системе штрих-кодов. Мой ответ - обобщенное описание метода, который я использую.
Я бы начал с того, что разделил изображение на сетку, где ячейка из одного символа помещалась бы в пределах одной ячейки сетки. Это позволило бы гарантировать, что любой символ будет помещаться в ячейку сетки 2x2, независимо от того, как сетка накладывается на изображение.
Преобразуйте изображение в точки. Точки идентифицируются путем локальной идентификации с использованием небольшой площади пикселей.
присвойте каждой точке номер ячейки сетки. это должно быть что-то простое, например, расположение x/y, разделенное на ячейку 32 пикселя ((y/32)*(width/32))+(x/32)
Сохраняйте количество точек на ячейку сетки и, когда все точки идентифицированы, сортируйте таблицу точек по номеру сетки и строите индекс по смещению в таблице и количеству элементов.
Если разрешение изменяется, выберите несколько ячеек с множеством точек, чтобы определить расстояние между парами ячеек.
Просматривайте ячейки строка за строкой, но изучите каждую ячейку, используя группу ячеек 2x2. Таким образом, любая точка в проверяемой ячейке гарантированно будет сопоставлена с парной точкой (если она существует). Используя сетку, точки должны быть сопоставлены только с точками, расположенными локально друг к другу, поэтому, хотя изображение может иметь тысячи точек, отдельные точки должны только пытаться соответствовать 1-10 точкам.
Точки сопряжения создадут дубликаты, которые могут быть либо предотвращены во время сопоставления, либо удалены позже.
На этом этапе вам нужно будет сопоставить точки с шрифтом Брайля. Горизонтальные пары пар и вертикальные пары пар должны иметь возможность начать выравнивание текста Брайля.
Как только линии выровнены, таблица пятен будет повернута в определенное выравнивание текста. Пары будут приведены в выравнивание, а затем с позиции пары могут быть добавлены несогласованные пятнышки путем сопоставления расположения сетки пары с непарными точками в таблице точек.