Что такое спекл в стерео алгоритмах BM и SGBM, реализованных в OpenCV - PullRequest
0 голосов
/ 09 июля 2019

При применении алгоритмов стерео BM & SGBM, реализованных в OpenCV, я натолкнулся на понятие «спекл-шум», которое фильтруется спекл-фильтром, характеризуемым его «speckleWindowSize» & «speckleRange parameters» => см. Документацию openCV на этой ссылке на документ OpenCV

Прежде всего, что такое спекл-шум и что его вызывает?

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

"speckleWindowSize: максимальный размер областей сглаживания диспаратности, чтобы учесть их шумовые спеклы и сделать недействительными. Установите 0, чтобы отключить фильтрацию спеклов. В противном случае установите его где-нибудь в диапазоне 50-200."

"speckleRange: максимальное отклонение диспаратности в каждом подключенном компоненте. Если вы выполняете фильтрацию спеклов, установите для параметра положительное значение, оно будет неявно умножено на 16. Обычно достаточно 1 или 2."

в то время как знаменитая книга «Learning OpenCV» Гэри Брадски и Адриана Келера дает совершенно другой диапазон для speckleWindowSize:

"При сопоставлении на основе блоков возникают проблемы вблизи границ объектов, поскольку окно сопоставления захватывает передний план с одной стороны и задний фон с другой стороны. Это приводит к локальной области больших и малых различий, которую мы называем спеклом. Чтобы предотвратить эти пограничные совпадения, мы можем установить спекл-детектор над спекл-окном (размером от 5 на 5 до 21 на 21), установив speckleWindowSize, который имеет значение по умолчанию 9 для 9 на 9. 9. Окно спекла, пока минимальное и максимальное обнаруженные различия находятся в пределах speckleRange, совпадение разрешено (диапазон по умолчанию установлен на 4). "

При тестировании кажется, что я могу эффективно увеличить размер окна до 200, но если это представлено в пикселях, разве это не огромное окно?

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

Любая помощь будет оценена,

Спасибо.

1 Ответ

0 голосов
/ 09 июля 2019

При использовании любого из предоставленных алгоритмов диспаратности, вероятно, будут лучшие результаты, если будет применена постфильтрация. Типичными проблемными зонами карт диспаратности от стереоизображения являются края объекта , затененные области , текстурированные области , полученные в результате подсчета карты диспаратности. Вы можете проверить этот учебник , где к алгоритму несоответствия BM применяется один тип постфильтрации.

«Изучение OpenCV» - отличная книга, и ваш цитат из нее дает четкий ответ на ваш вопрос.

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

Example disparity map without filtering and with it

Я взял изображение с вопроса на answers.opencv.org .

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

Причина ручной настройки параметров алгоритма, связанных со спеклами, заключается в том, что эти параметры будут сильно различаться в разных сценах и настройках. Таким образом, не существует единственного оптимального выбора speckleWindowSize и speckleRange, чтобы соответствовать требованиям любого разработчика. Вы можете работать с крупными объектами, близкими к камере (например, на изображении), или с маленькими объектами, удаленными от камеры и близко к фону (автомобили на дорожной сцене с видом на птицу) и т. Д. Поэтому вы должны установить параметры, которые соответствуют вашей конкретной настройке камеры (или предоставьте пользователю интерфейс для их настройки, если настройки камеры могут отличаться). Рассмотрите области вокруг пальцев и внутри ладони. Есть спеклы (особенно область внутри ладони). Разница в несоответствии в данном случае является шумом и должна быть отфильтрована. Выбор очень большого speckleWindowSize (синий прямоугольник) приведет к потере мелких, но важных деталей, таких как пальцы. Может быть, лучше выбрать меньший speckleWindowSize (красный прямоугольник) и больший speckleRange, так как вариация диспаратности кажется большой.

...