Марширующие кубы — это алгоритм компьютерной графики , опубликованный в трудах SIGGRAPH 1987 года Лоренсеном и Клайном [1] для извлечения полигональной сетки изоповерхности из трехмерного дискретного скалярного поля (элементы которого иногда называют вокселями ). Приложения этого алгоритма в основном связаны с медицинской визуализацией, такой как изображения данных КТ и МРТ , а также со специальными эффектами или трехмерным моделированием с использованием того, что обычно называют меташарами или другими метаповерхностями. Алгоритм марширующих кубов предназначен для использования в 3D; двумерная версия этого алгоритма называется алгоритмом марширующих квадратов .
Алгоритм был разработан Уильямом Э. Лоренсеном (1946-2019) и Харви Э. Клайном в результате их исследований для General Electric . В General Electric они работали над способом эффективной визуализации данных с устройств КТ и МРТ. [2]
Суть алгоритма состоит в том, чтобы разделить входной объем на дискретный набор кубов. Если предположить , что фильтрация линейной реконструкции позволяет легко идентифицировать каждый куб, содержащий часть заданной изоповерхности , поскольку значения выборки в вершинах куба должны охватывать целевое значение изоповерхности. Для каждого куба, содержащего участок изоповерхности, создается треугольная сетка, аппроксимирующая поведение трилинейного интерполянта во внутреннем кубе.
Первая опубликованная версия алгоритма использовала вращательную и отражательную симметрию, а также изменения знаков для построения таблицы с 15 уникальными случаями. Однако из-за существования неоднозначностей в поведении трилинейного интерполянта на гранях и внутри куба сетки, извлеченные с помощью Marching Cubes, представляли собой разрывы и топологические проблемы. Учитывая куб сетки, неоднозначность грани возникает, когда вершины его грани имеют чередующиеся знаки. То есть вершины одной диагонали на этой грани положительны, а вершины другой – отрицательны. Заметим, что в этом случае знаков вершин грани недостаточно для определения правильного способа триангуляции изоповерхности. Аналогично, внутренняя неоднозначность возникает, когда знаки вершин куба недостаточны для определения правильной триангуляции поверхности , т. е. когда для одной и той же конфигурации куба возможны множественные триангуляции.
Популярность Marching Cubes и его широкое распространение привели к нескольким улучшениям алгоритма, позволяющим справиться с неоднозначностью и правильно отслеживать поведение интерполянта. Дерст [3] в 1988 году был первым, кто заметил, что таблица триангуляции, предложенная Лоренсеном и Клайном, была неполной и что некоторые случаи марширующих кубов допускают множественные триангуляции. «Дополнительная ссылка» Дерста была на более ранний, более эффективный (см. де Араужо [4] ) алгоритм полигонизации изоповерхностей, разработанный Уивиллом, Уивиллом и Макфитерсом. [5] Позже Нильсон и Хаманн [6] в 1991 году заметили существование неоднозначностей в поведении интерполянта на грани куба. Они предложили тест под названием « Асимптотический решатель» , позволяющий правильно отслеживать интерполянт на гранях куба. Фактически, как заметил Натараджан [7] в 1994 году, эта проблема неоднозначности возникает и внутри куба. В своей работе автор предложил тест устранения неоднозначности, основанный на интерполянтных критических точках, и добавил четыре новых случая в таблицу триангуляции Marching Cubes (подслучаи случаев 3, 4, 6 и 7). На этом этапе, даже несмотря на все улучшения, предложенные для алгоритма и его таблицы триангуляции, сетки, созданные Марширующими кубами, все еще имели топологическую некогерентность.
Marching Cubes 33, предложенный Черняевым [8] в 1995 году, является одним из первых алгоритмов выделения изоповерхностей, предназначенных для сохранения топологии трилинейного интерполянта. В своей работе Черняев расширяет число случаев в справочной таблице триангуляции до 33. Затем он предлагает другой подход к решению внутренних неоднозначностей, основанный на асимптотическом решателе. Позже, в 2003 году, Нильсон [9] доказал, что справочная таблица Черняева является полной и может отражать все возможные варианты поведения трилинейного интерполянта, а Левинер и др. [10] предложили реализацию алгоритма. Также в 2003 г. Лопес и Бродли [11] расширили тесты, предложенные Натараджан. [7] В 2013 году Custodio et al. [12] отметили и исправили алгоритмические неточности, ставившие под угрозу топологическую корректность сетки, созданной алгоритмом Marching Cubes 33, предложенным Черняевым. [8]
Алгоритм проходит через скалярное поле, одновременно беря восемь соседних местоположений (формируя таким образом воображаемый куб), а затем определяя многоугольник(и), необходимые для представления части изоповерхности, проходящей через этот куб. Отдельные полигоны затем объединяются в желаемую поверхность.
Это делается путем создания индекса для заранее рассчитанного массива из 256 возможных конфигураций многоугольников (2 8 = 256) внутри куба, обрабатывая каждое из 8 скалярных значений как бит в 8-битном целом числе. Если значение скаляра выше, чем значение iso (т. е. оно находится внутри поверхности), тогда соответствующий бит устанавливается в единицу, а если оно ниже (снаружи), он устанавливается в ноль. Окончательное значение после проверки всех восьми скаляров является фактическим индексом массива индексов полигонов.
Наконец, каждая вершина сгенерированных многоугольников помещается в соответствующую позицию вдоль края куба путем линейной интерполяции двух скалярных значений, соединенных этим краем.
Градиент скалярного поля в каждой точке сетки также является вектором нормали гипотетической изоповерхности, проходящей из этой точки . Следовательно, эти нормали можно интерполировать по краям каждого куба, чтобы найти нормали сгенерированных вершин, которые необходимы для затенения результирующей сетки с помощью некоторой модели освещения .
Реализация алгоритма марширующих кубов была запатентована как патент США № 4710876. [2] Другой аналогичный алгоритм был разработан, названный марширующими тетраэдрами , чтобы обойти патент, а также решить небольшую проблему двусмысленности марширующих кубов с некоторыми конфигурациями кубов. Срок действия патента истек в 2005 году, и теперь графическому сообществу разрешено использовать его без лицензионных отчислений, поскольку с даты его выдачи (1 декабря 1987 г. [2] ) прошло более 20 лет.
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка )