Разбить текстовые строки в отсканированном документе

Я пытаюсь найти способ разбить строки текста в отсканированном документе с адаптивным пороговым значением. Прямо сейчас я сохраняю значения пикселей в документе как целые числа без знака от 0 до 255, и я беру среднее значение пикселей в каждой строке, и я разбиваю строки на диапазоны в зависимости от того, является ли среднее значение значений пикселей больше 250, а затем я беру медиану каждого диапазона линий, для которых это имеет место. Однако этот метод иногда дает сбой, поскольку на изображении могут быть черные пятна.

Есть ли более устойчивый к шумам способ решения этой задачи?

РЕДАКТИРОВАТЬ: Вот код. «искривленное» - это имя исходного изображения, «отрубы» - это то, где я хочу разделить изображение.

warped = threshold_adaptive(warped, 250, offset = 10)
warped = warped.astype("uint8") * 255

# get areas where we can split image on whitespace to make OCR more accurate
color_level = np.array([np.sum(line) / len(line) for line in warped])
cuts = []
i = 0
while(i < len(color_level)):
    if color_level[i] > 250:
        begin = i
        while(color_level[i] > 250):
            i += 1
        cuts.append((i + begin)/2) # middle of the whitespace region
    else:
        i += 1

РЕДАКТИРОВАТЬ 2: Образец изображения добавлен

Ответы на вопрос(2)

Ваш ответ на вопрос