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