Нахождение кромки воды с использованием OpenCV и Python точно

Я работал над попыткой обнаружить край воды с помощью OpenCV/Python, и результаты, которые я получаю, довольно неточны, и нет никакой надежности. Это то, чего я добился до сих пор: исходное изображение, выходное изображение

Обнаружение Canny Edge

В настоящее время я занимаюсь настройкой некоторых переменных (уровень размытия по Гауссу, сигма, используемая для обнаружения края Канни, и максимального отклонения, которое измеряемый уровень может изменять между каждой точкой), выполняя "автоматическое" обнаружение края Канни (где средняя интенсивность пикселей измеряется и используется для формирования нижней и верхней границ), затем перемещается от нижнего левого угла вверх, чтобы найти первый "белый" пиксель. Это делается с интервалами по пять по всей длине кадра.

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

После 30 кадров среднее из средних значений рассчитывается и рисуется в виде красной линии, которая затем считается "реальной" высотой воды.

У кого-нибудь есть идеи по поводу лучшего способа сделать это? Что сделает кромку воды более заметной? Этот метод работает с большинством отснятых материалов, но с плохими результатами.

Заранее спасибо.

1 ответ

Решение

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

  • Попробуйте ограничить область поиска: можете ли вы предположить, где должен быть уровень воды? Учитывайте также, что правильно определил уровень воды. Можно ли предположить, что в следующих кадрах уровень воды будет постоянно уменьшаться / увеличиваться? Будет ли он меняться медленно? Обрежьте свое изображение, чтобы принять во внимание только область, в которой можно предположить, что уровень воды присутствует.
  • Изменить цветовое пространство: вы можете попробовать работать в других цветовых пространствах, таких как HSV, чтобы отделить яркость от цветности
  • Обнаружение линий преобразования Хафа: попробуйте использовать этот алгоритм для поиска определенных горизонтальных линий на изображении или других фигур.
  • Неискаженное изображение: при необходимости попытайтесь исправить изображение, чтобы исправить изогнутые линии, или отмените перспективу с помощью Inverse Perspective Mapping (IPM).

Вы также можете рассмотреть возможность изменения алгоритма обнаружения ребер.

Другие вопросы по тегам