Dividir líneas de texto en el documento escaneado

Estoy tratando de encontrar una manera de romper la división de las líneas de texto en un documento escaneado que ha sido adaptado por umbral. En este momento, estoy almacenando los valores de píxeles del documento como entradas sin signo de 0 a 255, y estoy tomando el promedio de los píxeles en cada línea, y divido las líneas en rangos en función de si el promedio de los valores de píxeles es más grande que 250, y luego tomo la mediana de cada rango de líneas para las cuales esto se cumple. Sin embargo, este método a veces falla, ya que puede haber manchas negras en la imagen.

¿Hay alguna forma más resistente al ruido para hacer esta tarea?

EDITAR: Aquí hay un código. "deformado" es el nombre de la imagen original, "cortes" es donde quiero dividir la imagen.

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

EDIT 2: imagen de muestra agregada

Respuestas a la pregunta(2)

Su respuesta a la pregunta