Важно обновить
2024929: После долгого отсутствия обновлений этого репозитория я обнаружил, что многие люди используют эту библиотеку. Я очень рад, что мой вклад в открытое ПО оказался полезен. Единственное, что меня расстраивает, это то, что я обнаружил, что некоторые люди используют мою библиотеку с открытым исходным кодом для зарабатывания денег, и одна образовательная организация (я не буду называть её) напрямую использует мою библиотеку для коммерческих целей. Более того, меня обвиняют в плагиате другие люди, которые используют демонстрационные версии моей библиотеки. Это действительно неприятно. Я не могу гарантировать, что все будут уважать мои авторские права, поэтому я изменил лицензию на GNU. В этом соглашении я скажу только о важных моментах:
2022629, вчера пользователь использовал мою библиотеку, но получил сообщение об ошибке «PclDLL не загружен». После удалённой помощи я наконец понял, что это произошло потому, что в модуле Io были добавлены функции VTK, но соответствующие DLL не были добавлены в зависимости. Эта проблема уже решена. DLL, связанные с VTK, теперь находятся в каталоге depend/x64.
20221214, наконец-то я закончил свою диссертацию, и она не была выбрана для слепого рецензирования, чему я очень рад. Позже мне предстоит защита диссертации. Впоследствии я постепенно улучшу эту библиотеку, учитывая мои текущие навыки программирования, в этой библиотеке не используются некоторые шаблоны проектирования для создания всего проекта, поэтому расширяемость и возможность повторного использования этой библиотеки не так хороши. Сейчас уже очевидна проблема: некоторые пользователи хотят обрабатывать данные структуры PointXYZRGB, но эта библиотека поддерживает только структуру данных PointXYZ, если вы хотите поддерживать PointXYZRGB или другие типы структур, вам придётся повторять инкапсуляцию алгоритмов, и возможность повторного использования кода вообще не проявляется (ручная шутка). Эту проблему можно решить только после того, как я изучу шаблоны проектирования и переработаю проект. Если кто-то хочет обрабатывать данные структуры типа PointXYZRGB и т. д., им остаётся только загрузить исходный код, а затем создать его самостоятельно, следуя моим идеям. Кстати, сегодня я обновил демонстрацию модуля сегментации, данные облака точек были созданы с помощью activiz и представляют собой круглое облако точек. Основное внимание уделяется алгоритму сегментации облака точек на основе евклидова расстояния и алгоритму сегментации на основе роста области.
1 Введение
Для обработки 3D облаков точек Pcl является обязательным инструментом. Подобно тому, как OpenCV является кристаллизацией 2D информации о получении и обработке, Pcl занимает аналогичное положение в 3D информации о получении и обработке. Однако, в отличие от opencv, который имеет множество оболочек .NET, таких как OpencvSharp и emgucv, в настоящее время нет надёжной оболочки Pcl .NET (PclSharp не поддерживается уже много лет, а текущая версия содержит слишком много ошибок). Это не способствует разработке приложений, связанных с 3D облаками точек, пользователями .NET. Чтобы решить эту проблему, я разработал оболочку Pcl для облака точек .NET: PclCSharp. Эта библиотека инкапсулирует версию Pcl 1.8.1 и в основном интегрирует функции обработки облака точек в Pcl, но не инкапсулирует функцию визуализации облака точек. Поскольку визуализация облака точек в pcl реализуется через vtk, а у vtk есть версия C#, пользователи могут использовать vtk для визуализации облака точек и использовать эту библиотеку для обработки облака точек. В настоящее время эта библиотека поддерживает только платформу Windows10 X64.
2 Использование Пожалуйста, добавьте звезду к этому репозиторию, чтобы дать мне мотивацию продолжать создавать. Эта библиотека определённо стоит звезды. Если во время использования вы обнаружите какие-либо ошибки, вы можете связаться со мной по электронной почте 2237380450@qq.com, и я буду постоянно поддерживать эту библиотеку. Эта библиотека была инкапсулирована в среде VS2017 и .NET Framework4.6.1. Основные инкапсуляции включают четыре DLL: PointCloudSharpDll, PclCSharp, PointCloudDll и PclDll. Среди них первые два являются DLL, инкапсулированными C#, и они являются оболочками для последних двух DLL. Конкретные отношения зависимости между ними показаны ниже. При фактическом использовании вам нужно только сослаться на PointCloudSharpDll и PclCSharp в .net. Однако необходимо поместить все остальные две DLL и все DLL, от которых зависят эти две DLL, в каталог exe. Конечно, вы также можете поместить их в system32 или в папку, указанную переменной среды. Рекомендуется размещать их в каталоге exe. Все зависимые DLL помещаются в каталог depend/x64. Помните, что все DLL, перечисленные на рисунке ниже, должны быть размещены вместе с PointCloudSharpDll и PclCSharp без пропусков, иначе будет сообщено об ошибке System.DllNotFoundException: «Невозможно загрузить DLL». Также следует отметить, что для pcl_common_release этой DLL требуются все системные DLL и DLL времени выполнения C++. Для системных DLL достаточно, чтобы это была нормальная система Windows 10 (эта библиотека была инкапсулирована на win10, поэтому это должна быть система win10), и соответствующие DLL будут включены в system32, поэтому нет необходимости добавлять их дополнительно. Что касается DLL C++, большинство компьютеров с установленным программным обеспечением для программирования также будут включать их, поэтому их также не нужно добавлять дополнительно. Пользователям нужно только поместить четыре DLL в bin (PointCloudSharpDll, PclCSharp, PointCloudDll и PclDll) и все DLL в каталоге depend / x64 вместе в путь exe, чтобы использовать его.
3 Пространство имён
PointCloudSharp инкапсулирует данные структуры этой библиотеки. В настоящее время структура pcl::PointCloud<pcl::PointXYZ>
и vector<pcl::PointIndices>
инкапсулированы, и соответствующие классы C# — PointCloudXYZ и PointIndices. Другие структуры данных будут инкапсулироваться постепенно. Подробности см. в разделе doc каталога функций.
Это пространство имён включает алгоритмы обработки облаков точек в pcl. На данный момент оно инкапсулирует пять статических классов в Io, Filter, Segmentation, SampleConsensus и Util, каждый из которых примерно соответствует модулю pcl, и последующие модули будут добавляться постепенно. Отношения между различными классами показаны ниже. Подробности см. в разделе doc каталога функций.
4 Демонстрация функций В каталоге demo представлены примеры на языке C#. Этот демонстрационный пример включает примеры каждого модуля. Конкретная реализация функций см. в каталоге demo. Соответствующие файлы облаков точек можно найти в каталоге source.
Этот демонстрационный пример в основном представляет собой пример модуля Io. В этом примере я показываю, как загружать файлы форматов pcd, ply, obj и stl, а также использую vtk для визуализации. Кроме того, вы можете использовать этот демонстрационный пример для сохранения загруженных файлов в формате pcd или ply. Результаты показаны ниже. ### 4.2 FilterDemo
Данный демо-пример в основном касается модуля Filter. В этом примере автор демонстрирует, как можно выполнить понижающую дискретизацию, равномерную выборку, фильтрацию по радиусу, статистическую фильтрацию и прямую фильтрацию для стола (table_scene_lms400.pcd), а также визуализировать результаты с помощью VTK.
Изображение облака точек стола:
После понижающей дискретизации с параметром выборки 0,08 облако точек стола становится очень разреженным.
После статистической фильтрации с параметрами окрестности 40 и пороговым значением 1 удаляются все разреженные выбросы облака точек стола.
После фильтрации по радиусу с параметрами поиска радиуса 0,08 и количества порогов 40 удаляются некоторые выбросы на левой стороне облака точек стола.
После прямой фильтрации с осью фильтрации x, минимальным значением x 0,4 и максимальным значением x 1 удаляются выбросы вдоль оси x облака точек стола.
Этот демо-пример посвящён модулю Segmentation. В нём автор показывает, как динамически генерировать облако круглых точек с помощью VTK, а затем использовать евклидову кластеризацию и рост областей для разделения сгенерированного облака точек. После нажатия кнопки «Создать облако точек» в поле будет динамически генерироваться облако круглых точек.
Облако точек:
Из изображения видно, что данные облака точек явно разделены на три категории, которые были разделены с использованием евклидовой кластеризации и роста областей. Результаты евклидовой кластеризации:
Результаты роста областей:
В этих данных рост областей не так эффективен, как евклидова кластеризация, потому что эти данные были созданы искусственно, и расстояния между группами точек очевидны. Евклидова кластеризация хорошо работает в таких случаях, и требуется только установить порог расстояния, что делает её более простой и эффективной, чем рост областей.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )