Вопрос

Таким образом, у меня есть 2-мерный массив, представляющий плоскость координат, изображение. На этом изображении я ищу «красные» пиксели и нахожу (надеюсь) местоположение красной светодиодной цели на основе всех красных пикселей, найденных моей камерой. В настоящее время я просто хлопаю по перекрестке по центру всех красных пикселей:

// pseudo-code

for(cycle_through_pixels)
{
   if( is_red(pixel[x][y]) )
   {
      vals++; // total number of red pixels
      cx+=x;  // sum the x's
      cy+=y;  // sum the y's
   }
}
cx/=vals; // divide by total to get average x
cy/=vals; // divide by total to get average y

draw_crosshairs_at(pixel[cx][cy]); // found the centroid

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

Мой вопрос:

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

Это было полезно?

Решение

Вы могли бы найти подключенные компоненты На изображении и включают только те компоненты, которые имеют общий размер выше определенного порога в вашем центре.

Другие советы

Я думаю, что самый простой (и, возможно, наивный) ответ был бы: вместо того, чтобы подсчитывать только значение пикселя, считайте также окружающие 8 пикселей (в общей сложности 9). Теперь каждое значение, которое взято, может быть от 0 до 9 и включает в себя большие значения для каплей с одним и тем же цветом. Теперь вместо vals++ Вы также увеличиваете значение на количество пикселей в окружающей области.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top