Разделить изображение по горизонтали с помощью python на основе темной центральной линии

Цель состоит в том, чтобы горизонтально разделить изображение (двойная газетная страница) в python на основе вертикальной центральной линии, которая темнее, чем другие области вокруг.

Пример изображения:

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

Удалось использовать opencv (cv2) для начальной обрезки и поворота двойной страницы с черного фона с помощью cv2.Canny, а затем сортировки контуров на основе cv2.contourArea.

Но теперь мне просто интересно найти центральную линию, а затем разделить изображение на два отдельных изображения. Снова используя cv2.Canny, я вижу, что он может определить эту центральную линию, но не уверен, как определить эту длинную вертикальную линию и использовать ее для разделения изображения:

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

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

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

Любые предложения будут приветствоваться.


person ghukill    schedule 30.01.2019    source источник
comment
Вы можете попробовать с HoughTransform. Кроме того, если вы знаете, что линия вертикальна, вы можете вычислить только горизонтальный градиент, а не хитрость.   -  person T.Lucas    schedule 30.01.2019


Ответы (1)


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

-1   0   1
-2   0   2
-1   0   1

Затем вычислите сумму вертикальных столбцов, вы можете использовать np.sum(array,axis=0), и вы получите это:

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

Я изменил его форму для удобства просмотра — на самом деле его высота составляет всего 1 пиксель. Надеюсь, вы видите яркую белую линию посередине, которую вы можете найти с помощью Numpy argmax(). Также будет лучше, если вы просто сделаете горизонтальный градиент, потому что на данный момент я использую фиолетово-желтое изображение с усиленными вертикальными и горизонтальными краями.

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

person Mark Setchell    schedule 30.01.2019