Марширующие квадраты: Нахождение нескольких контуров в пределах одного исходного поля?


9

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

Алгоритм в основном просматривает все строки на рисунке, начиная с верхнего левого угла, до тех пор, пока не найдет пиксель, являющийся границей. В псевдо-C ++:

int start = 0;
for(int i=0; i<amount_of_pixels; ++i)
{
   if(pixels[i] == border)
   {
      start = i;
      break;
   }
} 

Когда он находит его, он запускает алгоритм движущихся квадратов и находит контур для любого объекта, к которому принадлежит пиксель.

Допустим, у меня есть что-то вроде этого:

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

Где все, кроме белого цвета, является границей.

И нашли точки контура первого шарика:

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

Для общего алгоритма все кончено. Он нашел контур и сделал свое дело. Как я могу перейти к двум другим объектам, чтобы найти их контуры?


нужна помощь с этим , пожалуйста , посмотрите в эту stackoverflow.com/questions/17232672/...

Ответы:


7

Не могли бы вы просто стереть найденный полигон, нарисовав его цветом фона, и повторять, пока ничего не осталось?


1
Вот как это должно быть сделано. Залейте найденный элемент фоном (или другим цветом) и продолжите поиск (вы можете продолжить с того места, где нашли первое «совпадение»)
bummzack

Ух ты. Я даже не знал о заливке. Спасибо.
TravisG


1

почему бы не сохранить информацию о BLOB-объекте в другой массив и проверить, попадают ли вновь обнаруженные пиксели в ограничительную рамку более раннего BLOB-объекта? Некоторые дополнительные манипуляции потребуются для работы с каплями ниже центриода более ранней капли, которые попадают в ограничивающую рамку.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.