Обработка изображений — Алгоритм вычисления центроидов пустого пространства в бинарном изображении.

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

Формула

где M — сумма интенсивности m_i, m_i — значение интенсивности пикселя, x_i и y_i — положение пикселя на изображении, n — общее количество пикселей.

Может ли кто-нибудь предложить что-то подобное для работы с несколькими контурами или как игнорировать другие при расчете одного из них по той же формуле?


person user3029227    schedule 14.02.2014    source источник
comment
Будьте осторожны, ваша нормализация должна быть над суммой (m_i), а НЕ над M.   -  person Geoff    schedule 14.02.2014
comment
Я нашел эту формулу в книге по обработке изображений. Я не замечал, пока вы не упомянули, что это неправильно. :))   -  person user3029227    schedule 14.02.2014
comment
Можете ли вы рассказать нам немного больше о вашей проблеме? В зависимости от вашей среды могут быть применимы некоторые библиотеки/упрощения. Может покажите и картинку, а код какой у вас?   -  person Geoff    schedule 15.02.2014
comment
На самом деле, я думаю, что M, вероятно, определяется как общий вес. (Я путал это с n.)   -  person Geoff    schedule 15.02.2014
comment
Мне не нужен код, это для бумаги. Окружающая среда — это два белых круга в черном пространстве. Бинарное изображение, где нет шума.   -  person user3029227    schedule 15.02.2014


Ответы (2)


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

person sansuiso    schedule 14.02.2014
comment
Разве не было бы правильно, если бы я сделал это - после разделения разных капель я установил интенсивность на ноль капель, которые я не использую в данный момент? Например, есть блоки со значениями: 1 2 3 4.. Теперь мне нужно вычислить центроид первого блока, поэтому другие блоки 2 3 4 получают 0, поэтому я могу использовать формулу выше. - person user3029227; 14.02.2014
comment
@user да, но таким образом вы получаете неоптимальное время выполнения. Вы можете обрабатывать подключенный компонент в O (размер, если CC), а не в O (размер изображения). - person Niklas B.; 14.02.2014
comment
@sansuiso Есть случай, когда между некоторыми контурами может быть шум, и подключенный компонент не обнаружит его как целое. - person Vikram Bhat; 14.02.2014
comment
В моем случае шума нет только два белых контура. - person user3029227; 14.02.2014

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

person Vikram Bhat    schedule 14.02.2014