У меня есть изображение в градациях серого страницы комиксов, в котором есть несколько диалоговых пузырьков (= речевые балуны и т.д.), которые заключены в области с белым фоном и сплошными черными границами, которые содержат текст внутри, то есть что-то вроде этого:
Я хочу обнаружить эти области и создать маску (двоичный код в порядке), который будет охватывать все внутренние области диалогов, т.е. что-то вроде:
То же изображение, наложенный на маску, будет полностью понятным:
Итак, моя основная идея алгоритма была примерно такой:
- Определите, где находится текст - запустите по крайней мере один пиксель в каждом пузыре. Немного развейте эти районы и примените порог, чтобы получить лучшую начальную почву; Я сделал эту часть:
-
Используйте заливку заливки или некоторый вид обхода графика, начиная с каждого белого пикселя, который был обнаружен как пиксельный внутри пузыря на шаге 1, но работает над исходным изображением, заливая белые пиксели (которые должны быть внутри пузырь) и остановка на темных пикселях (которые должны быть границей или текстом).
-
Используйте некоторую операцию binary_closing для удаления темных областей (т.е. областей, соответствующих тексту) внутри пузырьков). Эта часть работает нормально.
Пока что шаги 1 и 3 работают, но я боюсь с шага 2. В настоящее время я работаю с scikit-image, и я не вижу никаких готовых алгоритмов, таких как заливка заливок. Очевидно, что я могу использовать что-то тривиальное, как обход ширины, в основном как предлагается здесь, но на самом деле это очень медленно, когда это делается на Python. Я подозреваю, что сложная морфология вроде binary_erosion или generate_binary_structure in ndimage или scikit-image, но я изо всех сил пытаюсь понять всю эту морфологическую терминологию и в основном как реализовать такую пользовательскую заливку заливки (т.е. начиная с изображения с шага 1, работая над исходным изображением и производя вывод для отдельного выходного изображения).
Я открыт для любых предложений, в том числе в OpenCV и т.д.