Python: обнаружение и параметризация простых прямоугольников angular / гауссовых полос в матрицах изображений - PullRequest
2 голосов
/ 13 июля 2020

Я ищу хорошее решение для обнаружения и описания прямоугольных angular образов в (зашумленном) матричном изображении. Пример приведен ниже:

Шаблон

Изображение монохромное c, цвета просто указывают значение пикселя.

Как я могу обнаружить эти прямоугольные angular формы и сохранить их в параметризованном виде манера? Пока я ничего не пробовал, но мой путь вперед - это обнаружение краев путем определения разницы значений выше порогового значения в определенных областях.

1 Ответ

2 голосов
/ 13 июля 2020

Я сделал это в командной строке с помощью ImageMagick , но вы можете сделать то же самое в Python с помощью wand , который основан на ImageMagick или с OpenCV с использованием сопоставления с шаблоном.

В основном форма, которую вы ищете, составляет 7x106 пикселей. Итак, я сделал черную полосу именно такой формы и попросил ImageMagick поискать на копии вашего изображения в оттенках серого лучшее место, которое наиболее близко соответствует такой solid черной полосе:

Сделать черную полосу:

magick -size 7x106 xc:black png8:bar.png

Сделать изображение в оттенках серого:

magick stripes.png -colorspace gray gstripe.png

Искать лучшую черную полосу на изображении:

magick compare -dissimilarity-threshold 1 -metric RMSE -subimage-search gstripe.png bar.png r.png
24655.4 (0.376218) @ 33,29

Это дает следующий результат:

enter image description here

The 33,29 tells me the top-left of the bar. So, I now draw a white rectangle there to hide the first bar and seek the second:

magick gstripe.png -fill white -draw "rectangle 33,29 40,135" gstripe2.png

magick compare -dissimilarity-threshold 1 -metric RMSE -subimage-search gstripe2.png bar.png r.png
30287.3 (0.462155) @ 162,32

And that tells me the second bar is at coordinates 162,32:

enter image description here


Another method is to use Numpy to calculate the mean of all the columns in your image and then look for the dark areas:

columnMeans = np.mean(im, axis=0)

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

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