volume
|
Страница в процессе перевода. |
#
MakieCore.volume — Function
volume(volume_data)
volume(x, y, z, volume_data)
Строит график объема с необязательными физическими размерами x, y, z. Доступные алгоритмы:
-
:iso=> IsoValue -
:absorption=> Absorption -
:mip=> MaximumIntensityProjection -
:absorptionrgba=> AbsorptionRGBA -
:additive=> AdditiveRGBA -
:indexedabsorption=> IndexedAbsorptionRGBA
Тип графика
Псевдоним типа графика для функции volume — Volume.
Примеры
Алгоритмы на основе значений (:absorption, :mip, :iso, counter)
Алгоритмы, основанные на значениях, выполняют выборку цветовой карты, используя значения из данных объема.
using GLMakie
r = LinRange(-1, 1, 100)
cube = [(x.^2 + y.^2 + z.^2) for x = r, y = r, z = r]
contour(cube, alpha=0.5)
cube_with_holes = cube .* (cube .> 1.4)
volume(cube_with_holes, algorithm = :iso, isorange = 0.05, isovalue = 1.7)
using GLMakie
using NIfTI
brain = niread(Makie.assetpath("brain.nii.gz")).raw
mini, maxi = extrema(brain)
normed = Float32.((brain .- mini) ./ (maxi - mini))
fig = Figure(size=(1000, 450))
# Создадим цветовую карту, первое значение которой будет прозрачным.
colormap = to_colormap(:plasma)
colormap[1] = RGBAf(0,0,0,0)
volume(fig[1, 1], normed, algorithm = :absorption, absorption=4f0, colormap=colormap, axis=(type=Axis3, title = "Absorption"))
volume(fig[1, 2], normed, algorithm = :mip, colormap=colormap, axis=(type=Axis3, title="Maximum Intensity Projection"))
fig
Алгоритмы RGB(A) (:absorptionrgba, :additive)
Алгоритмы RGBA выполняют выборку цветов непосредственно из данных объема. Если данные содержат менее 4 измерений, оставшиеся измерения заполняются нулями для зеленого и синего каналов и единицами для альфа-канала.
using GLMakie
using LinearAlgebra
# Поле значения расстояния со знаком для цепочки Link (генерирует значения расстояния от
# поверхности фигуры, отрицательные значения находятся внутри)
# на основе https://iquilezles.org/articles/distfunctions/ "Link"
# положение выборки (x,y,z), длина между концами, радиус фигуры, радиус трубы
function sdf(x, y, z, le, r1, r2)
x, y, z = Vec3f(x, max(abs(y) - le, 0.0), z);
return norm(Vec2f(sqrt(x*x + y*y) - r1, z)) - r2;
end
r = range(-5, 5, length=31)
data = map([(x,y,z) for x in r, y in r, z in r]) do (x,y,z)
r = max(-sdf(x,y,z, 1.5, 2, 1), 0)
g = max(-sdf(y,z,x, 1.5, 2, 1), 0)
b = max(-sdf(z,x,y, 1.5, 2, 1), 0)
# RGBAf(1+r, 1+g, 1+b, max(r, g, b) - 0.1)
RGBAf(r, g, b, max(r, g, b))
end
f = Figure(backgroundcolor = :black, size = (700, 400))
volume(f[1, 1], data, algorithm = :absorptionrgba, absorption = 20)
volume(f[1, 2], data, algorithm = :additive)
f
Алгоритмы индексирования (:indexedabsorption)
Алгоритмы индексирования интерпретируют значение, считанное из данных объема, как индекс на цветовой карте. То есть фактически считывается idx = round(Int, get(data, sample_pos)) и используется colormap[idx] в качестве цвета выборки. Обратите внимание, что здесь по-прежнему можно использовать данные с плавающей запятой, но без interpolate = false они будут интерполированы.
using GLMakie
r = -5:5
data = map([(x,y,z) for x in r, y in r, z in r]) do (x,y,z)
1 + min(abs(x), abs(y), abs(z))
end
colormap = [:red, :transparent, :transparent, RGBAf(0,1,0,0.5), :transparent, :blue]
volume(data, algorithm = :indexedabsorption, colormap = colormap,
interpolate = false, absorption = 5)
Атрибуты
absorption
Значение по умолчанию: 1.0
коэффициент поглощения для algorithm=:absorption. Определяет количество света, поглощаемого каждым вокселом.
alpha
Значение по умолчанию: 1.0
альфа-значение цветовой карты или атрибута цвета. Несколько альфа-значений, как в plot(alpha=0.2, color=(:red, 0.5), перемножаются.
backlight
Значение по умолчанию: 0.0
задает вес для расчета вторичного освещения с инвертированными нормалями.
clip_planes
Значение по умолчанию: automatic
плоскости отсечения позволяют выполнять отсечение в трехмерном пространстве. Здесь можно указать вектор из 8 плоскостей Plane3f, за которыми графики будут отсечены (т. е. станут невидимыми). По умолчанию плоскости отсечения наследуются от родительского графика или сцены. Чтобы удалить родительский объект clip_planes, передайте Plane3f[].
colormap
Значение по умолчанию: @inherit colormap :viridis
задает цветовую карту, из которой производится выборка для числовых значений color. Также можно использовать PlotUtils.cgrad(...), Makie.Reverse(any_colormap) или любой символ из ColorBrewer или PlotUtils. Чтобы увидеть все доступные цветовые градиенты, можно вызвать Makie.available_gradients().
colorrange
Значение по умолчанию: automatic
значения, представляющие начальную и конечную точки colormap.
colorscale
Значение по умолчанию: identity
функция преобразования цвета. Может быть любой функцией, но с Colorbar хорошо работают только identity, log, log2, log10, sqrt, logit, Makie.pseudolog10 и Makie.Symlog10.
depth_shift
Значение по умолчанию: 0.0
корректирует значение глубины графика после всех остальных преобразований, т. е. в пространстве отсечения, где 0 <= depth <= 1. Применимо только к GLMakie и WGLMakie и может использоваться для настройки порядка отрисовки (настраиваемая перерисовка).
diffuse
Значение по умолчанию: 1.0
определяет то, насколько сильно красный, зеленый и синий каналы реагируют на диффузное (рассеянное) освещение.
enable_depth
Значение по умолчанию: true
включает запись глубины для объема, чтобы объем правильно перекрывал другие объекты.
fxaa
Значение по умолчанию: true
определяет то, будет ли график отрисовываться с помощью fxaa (сглаживание, только GLMakie).
inspectable
Значение по умолчанию: true
определяет, должен ли график проверяться с помощью DataInspector.
inspector_clear
Значение по умолчанию: automatic
задает функцию обратного вызова (inspector, plot) -> ... для очистки пользовательских индикаторов в DataInspector.
inspector_hover
Значение по умолчанию: automatic
задает функцию обратного вызова (inspector, plot, index) -> ..., которая заменяет методы show_data по умолчанию.
inspector_label
Значение по умолчанию: automatic
задает функцию обратного вызова (plot, index, position) -> string, которая заменяет метку по умолчанию, сгенерированную DataInspector.
interpolate
Значение по умолчанию: true
определяет то, следует ли выполнять выборку данных объема с интерполяцией.
material
Значение по умолчанию: nothing
используемый только в RPRMakie атрибут для задания сложных материалов RadeonProRender. Внимание! Способ задания материала RPR может измениться, и другие бэкенды будут игнорировать этот атрибут.
model
Значение по умолчанию: automatic
задает модельную матрицу для графика. Переопределяет настройки, выполненные с помощью translate!, rotate! и scale!.
overdraw
Значение по умолчанию: false
определяет то, будет ли график отрисовываться поверх других графиков. В частности, это означает игнорирование проверок глубины в бэкендах GL.
shading
Значение по умолчанию: automatic
задает используемый алгоритм освещения. Возможные значения: NoShading (без освещения), FastShading (AmbientLight + PointLight) или MultiLightShading (несколько источников света, только для GLMakie). Обратите внимание, что это не влияет на RPRMakie.
space
Значение по умолчанию: :data
задает пространство преобразования для прямоугольника, охватывающего график. Возможные входные данные см. в описании Makie.spaces().
specular
Значение по умолчанию: 0.2
определяет то, насколько сильно объект отражает свет в красном, зеленом и синем каналах.
ssao
Значение по умолчанию: false
определяет то, будет ли график отрисовываться с использованием ssao (преграждение окружающего света в экранном пространстве). Обратите внимание, что это имеет смысл только для трехмерных графиков и применимо только с fxaa = true.