Интерполяционная задача во время марширующего куба на скалярном поле - PullRequest
1 голос
/ 14 марта 2019

У меня есть обычная квадратная сетка, в которой все мои данные хранятся в центроиде.У меня есть скалярное поле (диапазон: 0-> 1), которое указывает количество вещества внутри клетки.Я заинтересован в идентификации интерфейса этого вещества внутри клетки (для дальнейшей обработки, а не для визуализации).

Я натолкнулся на алгоритм Marching cube (http://paulbourke.net/geometry/polygonise/). Здесь мне нужны значения науглы ячейки. Таким образом, я усреднил значения центроидов соседней ячейки. Это усреднение в сочетании с дальнейшей линеаризацией для нахождения точек пересечения во время «полигонизации» в MC приводит к нереалистичным интерфейсам, таким как этот ..

enter image description here

Здесь серая клетка полна вещества, а ее соседи имеют минимальное количество вещества. В идеале это должно быть очень близко к границе ячейки Кельтре. Я чувствуюэто происходит из-за линейной интерполяции между 0,25 и 0, которая уводит его далеко от предполагаемого положения.

Можно ли что-то сделать, чтобы решить эту проблему?

1 Ответ

1 голос
/ 14 марта 2019

Алгоритм Marching-Cubes имеет один параметр, который можно настроить, а именно isolevel. В вашем примере вы, кажется, выбрали значение около 0.05 для isolevel. При выборе значения чуть ниже 0.25 (например, что-то вроде 0.24) интерфейсы будут гораздо ближе к центральной ячейке. Но тогда у вас все равно будут неудовлетворительные результаты, когда две ячейки со значением 1 соприкасаются друг с другом. углы будут иметь среднее значение 0.5.

То, что вы все еще можете попробовать: вместо усреднения значений ячеек для вычисления значений углов вы можете взять максимальное значение ячейки для значения угла и поднять isolevel до значения чуть ниже 1 (например, 0.9) .

...