Как найти прямоугольные области в массиве Numpy? - PullRequest
0 голосов
/ 10 мая 2019

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

тогда простая буква "r" может выглядеть так

] enter image description here слева: входное растровое изображение

справа: ожидаемый результат, обратите внимание, что горизонтальный ход был проигнорирован. Обожаю, что такие буквы могут быть бесконечными с неизвестной шириной ствола Но давайте скажем, что мы всегда будем знать, насколько толстый удар, мы просто не знаем, какой он высокий.

[
[255, 255, 255, 255],
[255,   0,   0, 255],
[255,   0, 255, 255],
[255,   0, 255, 255],
[255,   0, 255, 255],
[255, 255, 255, 255]
]

Как бы вы нашли все вертикальные прямоугольники? Таким образом, результат будет выглядеть следующим образом

[
[False, False, False, False],
[False,  True, False, False],
[False,  True, False, False],
[False,  True, False, False],
[False,  True, False, False],
[False, False, False, False]

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Вы можете просто использовать вертикальный медианный фильтр:

scipy.ndimage.filters.median_filter(
    a, size=(3, 1)
)
# array([[255, 255, 255, 255],
#        [255,   0, 255, 255],
#        [255,   0, 255, 255],
#        [255,   0, 255, 255],
#        [255,   0, 255, 255],
#        [255, 255, 255, 255]])
0 голосов
/ 10 мая 2019

Вероятно, не самый эффективный и не самый общий подход, но он работает:

import matplotlib.pyplot as plt
import numpy as np
from scipy.signal import convolve2d

image = np.asarray( [
                [255, 255, 255, 255],
                [255,   0,   0, 255],
                [255,   0, 255, 255],
                [255,   0, 255, 255],
                [255,   0, 255, 255],
                [255, 255, 255, 255]
                ] )

imageI = 255 - image
kernel=np.ones(3).reshape(3,1)

out= convolve2d( imageI, kernel, mode='full' )

out2 = out > 255

print out2[ 1 : len(image) + 1 ]

, давая по желанию:

 >> [[False False False False]
 >> [False  True False False]
 >> [False  True False False]
 >> [False  True False False]
 >> [False  True False False]
 >> [False False False False]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...