Numpy PIL Python: обрезать изображение по пробелу или обрезать текст с гистограммой Пороги

Как я могу найти ограничительную рамку или окно для области пробелов, окружающих цифры на изображении ниже?

Исходное изображение:

введите описание изображения здесь

Высота: 762 пикс. Ширина: 1014 пикселя

Цель:

Что-то вроде: {x-bound:[x-upper,x-lower], y-bound:[y-upper,y-lower]} поэтому я могу обрезать текст и ввести в tesseract или некоторое OCR.

Попытки:

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

Пример кода с использованием pyplot адаптированного из ( используя python и PIL, как я могу захватить блок текста в изображении? ):

 from PIL import Image import numpy as np import matplotlib.pyplot as plt im = Image.open('/home/jmunsch/Pictures/Aet62.png') p = np.array(im) p = p[:,:,0:3] p = 255 - p lx,ly,lz = p.shape plt.plot(p.sum(axis=1)) plt.plot(p.sum(axis=0)) #I was thinking something like this #The image is a 3-dimensional ndarray [[x],[y],[color?]] #Set each value below an axes mean to 0 [item = 0 for item in p[axis=0] if item < p.mean(axis=0)] # and then some type of enumerated groupby for each axes #finding the mean index for each groupby(0) on axes plt.plot(p[mean_index1:mean_index2,mean_index3:mean_index4]) 

На основе графиков каждая из долин указывает место привязки.

  • Первый график показывает, где строки текста будут
  • Второй график показывает, где символы будут

Пример участка plt.plot(p.sum(axis=1)) :

введите описание изображения здесь

Пример вывода plt.plot(p.sum(axis=0)) :

введите описание изображения здесь

Связанные должности / документы:

  • Обрезать пробелы с помощью PIL
  • Используя python и PIL, как я могу захватить блок текста в изображении?
  • Использовать Python / PIL или аналогично сокращению пробелов
  • Обрезать изображение с помощью PIL в python
  • Прямоугольная ограничивающая рамка вокруг блобов в монохромном изображении с использованием python
  • Как я могу улучшить обнаружение лапы?
  • http://scipy-lectures.github.io/advanced/image_processing/
  • http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html

обновление: решение от HYRY

введите описание изображения здесь

Я думаю, что вы можете использовать функции морфологии в scipy.ndimage , вот пример:

 import pylab as pl import numpy as np from scipy import ndimage img = pl.imread("Aet62.png")[:, :, 0].astype(np.uint8) img2 = ndimage.binary_erosion(img, iterations=40) img3 = ndimage.binary_dilation(img2, iterations=40) labels, n = ndimage.label(img3) counts = np.bincount(labels.ravel()) counts[0] = 0 img4 = labels==np.argmax(counts) img5 = ndimage.binary_fill_holes(img4) result = ~img & img5 result = ndimage.binary_erosion(result, iterations=3) result = ndimage.binary_dilation(result, iterations=3) pl.imshow(result, cmap="gray") 

выход:

введите описание изображения здесь