Нахождение высоты над уровнем воды скал - PullRequest
7 голосов
/ 19 января 2011

В настоящее время я помогаю другу, работающему над геофизическим проектом, я ни в коем случае не профессионал в обработке изображений, но мне интересно играть с такими проблемами.=)

Цель состоит в том, чтобы оценить высоту небольших камней, торчащих из воды, от поверхности к вершине.

Экспериментальным оборудованием будет камера ~ 10MP, установленная на измерителе расстояния свстроенная лазерная указка.«Оператор» укажет это на камень, нажмите на спусковой крючок, который зарегистрирует расстояние вдоль фотографии камня, которая будет в центре изображения.

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

На мой взгляд, существует ряд проблем, которые необходимо преодолеть:

  1. Условия освещения

    • В зависимости от времени суток и т. Д. Камень может быть ярче, чем вода или наоборот.
    • Иногда каменьбудет иметь цвет, очень близкий к воде.
    • Положение тени будет изменяться в течение дня.
    • В зависимости от того, насколько грубая вода, иногда может быть отражение скалы в воде.
  2. Разнообразие

    • Скала неравномерной формы.
    • В зависимости от типа породы, роста лишайника и т. Д., Изменяется внешний вид породы.

К счастью, нет недостатка в данных испытаний.Фотографии камней в воде легко найти.Вот несколько примеров изображений: alt text Я запустил детектор краев на изображениях и ESP.на четвертой картинке из-за плохого контраста трудно увидеть края: alt text Любые идеи будут высоко оценены!

Ответы [ 3 ]

4 голосов
/ 19 января 2011

Я не думаю, что обнаружение краев - лучший подход для обнаружения камней.Другие объекты, такие как горы или даже отражения в воде, могут привести к образованию краев.

Я предлагаю вам попробовать метод классификации пикселей, чтобы сегментировать камни по фону изображения:

  • Для каждого пикселя изображения извлеките набор дескрипторов изображений из окрестности NxN с центром в этом пикселе.
  • Выберите набор изображений и вручную пометьте пиксели как скалу или фон.
  • Используйте отмеченные пиксели и соответствующие дескрипторы изображений для обучения классификатора (например, наивного байесовского классификатора)

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

2 голосов
/ 20 января 2011

Классификация пикселей может работать здесь, но никогда не даст 100% точности.Разница в данных действительно велика, камни имеют разные цвета (которые также «искажаются» при освещении) и разную текстуру.Итак, нужно учитывать и глобальную информацию.

Проблема, с которой вы сталкиваетесь, - это извлечение переднего плана.Есть два подхода, которые мне известны.

  1. Минимизация энергии с помощью разрезов графиков, см., Например, http://en.wikipedia.org/wiki/GrabCut (есть ссылки на документ и реализацию OpenCV).Некоторая инициализация («семена») должна быть сделана (либо пользователем, либо с помощью предшествующего знания, например, что камень находится в центре, а вода - на периферии).Другой вариант ввода - приблизительный ограничивающий прямоугольник.Это реализовано в MS Office 2010 инструмент извлечения переднего плана.Энергетическая функция возможных меток переднего плана / фона заставляет передний план быть похожим на семена переднего плана и плавную границу.Итак, минимум энергии соответствует хорошей маске переднего плана.Обратите внимание, что при использовании подхода классификации пикселей необходимо предварительно пометить много изображений для изучения, затем сегментация выполняется автоматически, в то время как при таком подходе следует выбирать семена для каждого изображения запроса (или они выбираются неявно).

  2. Активные контуры Змеи также требуют взаимодействия с пользователем.Они больше похожи на инструмент Photoshop Magic Wand.Они также пытаются найти гладкую границу, но не учитывают внутреннюю область.

Оба метода могут иметь проблемы с отражениями (определенно будет иметься классификация пикселей).Если это так, вы можете попытаться найти приблизительную вертикальную симметрию и удалить нижнюю часть, если таковая имеется.Вы также можете попросить пользователя пометить рефлексию как фон при сборе статистики для разрезов графиков.

2 голосов
/ 19 января 2011

Цветовая сегментация, чтобы найти камень, вместе с обнаружением края, чтобы найти вершину.

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

Проще, если вы знаете угол наклона между камерой и водой и если камера выровнена горизонтально (крен).

пс.Это намного сложнее, чем я думал - вы не знаете расстояние до всех скал, поэтому подгонка плоскости затруднительна.

Бывает, что отражение на самом деле является идеальным способом определения уровня, ищитесимметричные края пути в обнаружении края скалы и выбрать вершину?

...