В принципе, это дополнительный вопрос к проблеме, возникшей несколько недель назад , хотя речь идет об алгоритме в целом без применения к моей реальной проблеме.
Алгоритм в основном просматривает все строки на рисунке, начиная с верхнего левого угла, до тех пор, пока не найдет пиксель, являющийся границей. В псевдо-C ++:
int start = 0;
for(int i=0; i<amount_of_pixels; ++i)
{
if(pixels[i] == border)
{
start = i;
break;
}
}
Когда он находит его, он запускает алгоритм движущихся квадратов и находит контур для любого объекта, к которому принадлежит пиксель.
Допустим, у меня есть что-то вроде этого:
Где все, кроме белого цвета, является границей.
И нашли точки контура первого шарика:
Для общего алгоритма все кончено. Он нашел контур и сделал свое дело. Как я могу перейти к двум другим объектам, чтобы найти их контуры?
Ответы:
Не могли бы вы просто стереть найденный полигон, нарисовав его цветом фона, и повторять, пока ничего не осталось?
источник
Проверь это:
http://en.wikipedia.org/wiki/Connected-component_labeling После обнаружения блобов просто примените маргинальные квадраты alg, чтобы получить поля для каждого блоба.
Пока ло
источник
почему бы не сохранить информацию о BLOB-объекте в другой массив и проверить, попадают ли вновь обнаруженные пиксели в ограничительную рамку более раннего BLOB-объекта? Некоторые дополнительные манипуляции потребуются для работы с каплями ниже центриода более ранней капли, которые попадают в ограничивающую рамку.
источник