Mayavi: Mayavi๋Š” RGB ํŠœํ”Œ์„ ํฌ์ธํŠธ ๋ฐ์ดํ„ฐ๋กœ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2013๋…„ 11์›” 22์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: enthought/mayavi

์ˆœ์ˆ˜ vtk์—์„œ๋Š” point_data.scalars๊ฐ€ vtkUnsignedCharArray์ธ ํ‘œ๋ฉด์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ Œ๋”๋Ÿฌ๋Š” ์ด๊ฒƒ์„ ๊ฐ ์ •์ ์— ๋Œ€ํ•ด ๊ณ ์œ ํ•œ RGB ๋˜๋Š” RGBA ๊ฐ’์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•ด์„ํ•˜๊ณ  ์„ค์ •์ด ์„ค์ •๋œ ๊ฒฝ์šฐ ๊ทธ์— ๋”ฐ๋ผ ํ‘œ๋ฉด์— ์ƒ‰์ƒ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. Mayavi ๊ฐ์ฒด๋Š” vtkUnsignedCharArrays๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ž‘์—…์„ ์ „ํ˜€ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ์‚ฌ์šฉ์ž๊ฐ€ ์œ ํšจํ•œ RGB ๋˜๋Š” RGBA ํŠœํ”Œ์„ mlab ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์Šค์นผ๋ผ๋กœ ์ง€์ •ํ•˜๋ฉด ๊ฐ ์ง€์ ์˜ ์ƒ‰์ƒ์ด ์Šค์นผ๋ผ์™€ ์ผ์น˜ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ทธ ๋‹ต๋ณ€ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์‹ค์ œ๋กœ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์„ํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ๋งˆ์นจ๋‚ด ๊ทธ๊ฒƒ๋“ค์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์•Œ์•„ ๋ƒˆ์Šต๋‹ˆ๋‹ค. :)

# Imports
import numpy as np
from mayavi.mlab import quiver3d, draw

# Primitives
N = 200 # Number of points
ones = np.ones(N)
scalars = np.arange(N) # Key point: set an integer for each point

# Define color table (including alpha), which must be uint8 and [0,255]
colors = (np.random.random((N, 4))*255).astype(np.uint8)
colors[:,-1] = 255 # No transparency

# Define coordinates and points
x, y, z = colors[:,0], colors[:,1], colors[:,2] # Assign x, y, z values to match color
pts = quiver3d(x, y, z, ones, ones, ones, scalars=scalars, mode='sphere') # Create points
pts.glyph.color_mode = 'color_by_scalar' # Color by scalar

# Set look-up table and redraw
pts.module_manager.scalar_lut_manager.lut.table = colors
draw()

snapshot

๋ชจ๋“  9 ๋Œ“๊ธ€

Mayavi์˜ ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋งค์šฐ ๋ฐ”์ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋‘๋ ค์›Œ
์ด ๊ธฐ๋Šฅ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ฐœ์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ.

๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋ž˜์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์œผ๋กœ ์˜๋„ํ–ˆ๋Š”๋ฐ ์ƒ๋‹นํ•œ ์ž‘์—…๋Ÿ‰์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ํ—ˆ๋ฝ๋œ๋‹ค๋ฉด ํ•ด๋ณด๊ณ  ์‹ถ์€ ์ž‘ํ’ˆ์ž…๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ์ดํ•ดํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ๋…ธ๋™๋ ฅ
Mayavi๋Š” ๋ชจ๋“  ์ž ์žฌ๋ ฅ์„ ์ถฉ์กฑํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@GaelVaroquaux ๊ณง ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ž๊ธˆ ์ง€์›์ด ์žˆ์„ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค(๋‚ด๋…„ 2๋ถ„๊ธฐ ์‹œ์ž‘)!

๋‚˜๋Š” ์˜ค๋Š˜ ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„ ๋™์•ˆ ์ด ํŠน์ •ํ•œ ๋ฒฝ์— ๋จธ๋ฆฌ๋ฅผ ๋ถ€๋”ชํ˜€ ์™”์Šต๋‹ˆ๋‹ค. [x, y, z, ํฌ๊ธฐ, ์ƒ‰์ƒ]์˜ ๋ฐฐ์—ด๋กœ ์  ๋ชฉ๋ก์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ์•„์ฃผ ๋ช…๋ฐฑํ•œ ๊ธฐ๋Šฅ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค! ํฌ์ธํŠธ ํฌ๊ธฐ๊ฐ€ ํฌ์ธํŠธ ์ƒ‰์ƒ์— ๊ณ ์ •๋˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?!

๊ท€ํ•˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ ์ง‘ํ•ฉ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Mayavi๋Š” ๋‹ค์Œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ฐ˜ ์‹œ๊ฐํ™” ํˆดํ‚ท์œผ๋กœ ์ƒ์„ฑ๋œ VTK
์ง€์†์ ์œผ๋กœ ๋ณ€ํ™”ํ•˜๋Š” ํ’๋ถ€ํ•œ ๋ฐ์ดํ„ฐ. ์‚ฌ๋ฌผ์„ ์ถ”์ƒ์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐœ์ฒด์˜ ์‹œ๊ฐ์  ์†์„ฑ์— ๋งคํ•‘๋˜์–ด์•ผ ํ•˜๋Š” ์–‘. ์ข‹์•„์š”
์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ๊ฑฐ์˜ ๋ฌถ์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์•ฝ๊ฐ„์˜ ์ž‘์—…์œผ๋กœ ํฌ๊ธฐ์™€ ์ƒ‰์ƒ์„ ์‰ฝ๊ฒŒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
hack: ๋‹ค์Œ ๋‹จ๋ฝ์˜ ๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ
http://docs.enthought.com/mayavi/mayavi/mlab.html#adding -color-or-size-variations

๋น ๋ฅธ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„, ๊ณผํ•™์  ๋ฐ์ดํ„ฐ๋ฅผ ํ”Œ๋กฏํ•˜๋Š” Mayavi์˜ ๋Šฅ๋ ฅ ์ธก๋ฉด์—์„œ ์ฃผ์š” ์ œํ•œ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค(์˜ˆ: ์ด ์Šค๋ ˆ๋“œ ์ฐธ์กฐ, "๋‚˜๋Š” ๋˜ํ•œ ํƒœ์•„์˜ ์ž…์žฅ์„ ์ทจํ•˜๊ณ  API์— ๋ช…ํ™•ํ•œ/๊ธฐ๋ณธ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ณ  ๋‚˜์„œ ์šธ๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ์ƒ‰์ƒ", ๋‚ด ๋Š๋‚Œ์„ ์ •ํ™•ํžˆ ์š”์•ฝํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค!). ์ด ๊ธฐ๋Šฅ์€ VTK(์˜ˆ: this )์—์„œ ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™์ง€๋งŒ Mayavi๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(๋ง๋ถ™์ด์ž๋ฉด, ์ œ๊ฐ€ ์—ฌ๊ธฐ์„œ ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•ด ์ž˜ ์•Œ๊ณ  ๊ณ„์‹ค ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํ”ผ์งˆ์˜ 3D ๋ชจ๋ธ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๋‰ด๋Ÿฐ ์ง‘๋‹จ์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.)

์•ˆ๋…•ํ•˜์„ธ์š” ํด๋ฆฌํ”„์ž…๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์ข‹์€ API๋Š” ์—†์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์— ์—ฌ๊ธฐ์—์„œ ์ œ์•ˆํ•œ ๋Œ€๋กœ tvtk unsigned char ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜

(๋ณด๋‹ค
http://stackoverflow.com/questions/19431099/how-to-directly-set-rgb-rgba-colors-in-mayavi,
ํŠน์ • ๋งˆ์•ผ๋น„ ์†Œ์Šค์˜ ๊ฒฝ์šฐ ๋ณต์žกํ•จ)

๋˜๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  RGB ๊ฐ’์„ ๋ณด์œ ํ•˜๋Š” ํฐ ์ƒ‰์ƒํ‘œ๋ฅผ ์„ค์ •ํ•˜์—ฌ.

(์‚ฌ์šฉ์ž eqzx์˜ ๋‹ต๋ณ€ ์ฐธ์กฐ,
http://stackoverflow.com/questions/18537172/specify-absolute-colour-for-3d-points-in-mayavi?rq=3
)

2015๋…„ 5์›” 15์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 1์‹œ 26๋ถ„, Cliff Kerr [email protected]
์ผ๋‹ค:

๋น ๋ฅธ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„, ๊ทธ๊ฒƒ์€ ์ฃผ์š” ์ œํ•œ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.
๊ณผํ•™์  ๋ฐ์ดํ„ฐ๋ฅผ ํ”Œ๋กฏํ•˜๋Š” Mayavi์˜ ๋Šฅ๋ ฅ์— ๋Œ€ํ•œ ์šฉ์–ด(์˜ˆ: ์ด ์Šค๋ ˆ๋“œ ์ฐธ์กฐ
http://stackoverflow.com/questions/18537172/specify-absolute-colour-for-3d-points-in-mayavi,
"๋‚˜๋„ ํƒœ์ž ์ž๋ฆฌ๋ฅผ ์žก๊ณ  ์šธ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.
API์— ๋ช…ํ™•ํ•œ/๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋œ ํ›„
์ƒ‰์ƒ", ๋‚ด ๋Š๋‚Œ์„ ์ •ํ™•ํ•˜๊ฒŒ ์š”์•ฝํ•ฉ๋‹ˆ๋‹ค!). ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
VTK์—์„œ ๊ฐ€๋Šฅ(์˜ˆ: ์ด
http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/ColoredPoints),
Mayavi๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/enthought/mayavi/issues/92#issuecomment -102463748.

๊ทธ ๋‹ต๋ณ€ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์‹ค์ œ๋กœ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์„ํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ๋งˆ์นจ๋‚ด ๊ทธ๊ฒƒ๋“ค์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์•Œ์•„ ๋ƒˆ์Šต๋‹ˆ๋‹ค. :)

# Imports
import numpy as np
from mayavi.mlab import quiver3d, draw

# Primitives
N = 200 # Number of points
ones = np.ones(N)
scalars = np.arange(N) # Key point: set an integer for each point

# Define color table (including alpha), which must be uint8 and [0,255]
colors = (np.random.random((N, 4))*255).astype(np.uint8)
colors[:,-1] = 255 # No transparency

# Define coordinates and points
x, y, z = colors[:,0], colors[:,1], colors[:,2] # Assign x, y, z values to match color
pts = quiver3d(x, y, z, ones, ones, ones, scalars=scalars, mode='sphere') # Create points
pts.glyph.color_mode = 'color_by_scalar' # Color by scalar

# Set look-up table and redraw
pts.module_manager.scalar_lut_manager.lut.table = colors
draw()

snapshot

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰