Я сделал 3D-рендеринг нескольких изоповерхностей в Matlab. Выглядит это так (скриншот, стрелки добавлены позже):
Я сделал это, используя такой код:
for i = 1 : n
fv = isosurface(x, y, z, v{i}, t(i)); % x,y,z being the grid, v being the values, t being the threshold
p = patch(fv);
p.FaceColor = [r(i),g(i),b(i)]; % some suitable color value
p.FaceAlpha = alpha(i); % the alpha value
p.EdgeColor = 'none';
isonormals(x, y, z, v, p);
hold on;
end
camlight;
lighting('gouraud');
который перебирает серию стеков 3D-значений, каждый с другим порогом, цветом и альфа-значением, и отображает их все на рисунке. В частности, здесь у меня были четыре внутренние поверхности, окрашенные в желтый, синий, зеленый, пурпурный цвета с альфа-каналом, равным единице, и четыре внешние поверхности с теми же цветами, но с альфа-каналом, равным 0,1.
Это выглядит нормально, но показывает некоторые артефакты, от которых я хотел бы избавиться.
- Красными стрелками показаны артефакты в виде линий, вероятно, от пересечений внешних поверхностей.
- Голубыми стрелками показаны очень четкие цветовые границы на пересечениях внутренних поверхностей.
Я ожидал более плавного рендеринга, который не так сильно подчеркивает пересечения.
Я не хочу, чтобы линия была похожа на артефакты, изображенные красными стрелками, и я хочу, чтобы острые края, изображенные голубыми стрелками, были более гладкими. Конечно, я стремлюсь к решению в Matlab.
Я попытался интерполировать исходные данные, чтобы получить их на более мелкой сетке, но это не имело никакого значения, равно как и попытка уменьшить количество патчей (с reducepatch
). Линии пересечения изоповерхностей (голубые стрелки) всегда являются очень жесткими линиями, и установка значений NaN за пределами интересующей области (т. е. ниже самого низкого используемого порога) также не имеет никакого эффекта.
В комментарии говорилось, что может помочь рендеринг в векторный формат, такой как eps/pdf. С Matlab 2019b это не так. Использование print
, а не saveas
для выбора средства рендеринга painters
, поэтому вывод действительно представляет собой векторную графику, что приводит к артефактам. Вывод в epsc не учитывает прозрачность, а вывод в pdf не отображает все патчи полностью. Это их собственные проблемы, и они меня здесь не интересуют.
Просто для полноты здесь вывод в формате pdf (который меня не интересует):
print(fig, '-painters', '-bestfit', '-dpdf', 'test.pdf');
export_fig
(нужно скачать). Он лучше справляется с экспортом вещей, может быть, это решает проблему - person Ander Biguri   schedule 06.05.2020export_fig
тоже имеет такие возможности. Однако они могут не работать. Пожалуйста, сообщите о своих выводах. - person Ander Biguri   schedule 06.05.2020