/ / Побудова вокселів 3D куба в MATLAB - matlab, обробка зображень, графіка, 3d, воксель

Побудова вокселів 3D куба в MATLAB - matlab, обробка зображень, графіка, 3D, воксель

Я хочу побудувати 3D-куб в MATLAB. Я знаю, що одиниці будь-якої тривимірної форми є вокселями, а не пікселями. Ось що я хочу зробити

По-перше, я хочу побудувати куб з деякими заданими розмірами x, y та z.

По-друге, відповідно до того, що я розумію з різних навчальних програм обробки зображень, цей куб повинен складатися з вокселів (3D-пікселів). Я хочу дати кожному вокселю початкове значення кольору, кажучи сірим.

По-третє, я хочу отримати доступ до кожного вокселя та змінити його колір, але я хочу відрізнити вокселі, які представляють обличчя куба від тих, що представляють внутрішній регіон. Я хочу, щоб вісь кожен воксель по розташуванню x, y, z. Врешті-решт, ми закінчимось кубом, який має різні кольори регіонів.

Я багато шукав, але не міг знайти хороший спосіб це здійснити, але код, наведений тут, здається дуже близьким щодо побудови внутрішньої області куба,

http://www.mathworks.com/matlabcentral/fileexchange/3280-voxel

Але мені незрозуміло, як він виконує цей процес.

Чи може хто-небудь сказати мені, як побудувати такий куб в MATLAB?

Дякую.

Відповіді:

6 за відповідь № 1

Ви хочете скласти вокселі! Добре! Подивимося, як ми можемо зробити це.

Поперше: так, одиниця 3D-форм може бути вокселями, але вони не повинні бути. Ви можете сконструювати сферу в 3D, не будучи "блокованою", тому вам не потрібно описувати її в термін вокселів, так само, як ви Не треба описувати синусоїдальну хвилю в термін пікселів, щоб мати змогу побудувати його на екрані. Подивіться на малюнок нижче. (те ж саме відбувається і для кубиків)

3D-форма, не визначена Voxels

Якщо ви зацікавлені в написанні вокселів, я взагалі рекомендую вам використовувати vol3d v2 від Matlab FEX. Чому це замість вашої?

Тому що найкращим (тільки?) Способом побудови вокселів є фактично площинні квадратні поверхні, 6 для кожного куба (подивіться відповідь тут для функції, яка це робить). Ця плоска поверхня також створить деякі артефакти для чогось називається З-бій в комп'ютерній графіці. Vol3D насправді лише складається з 3 поверхонь, тих, хто дивиться на вас, заощаджуючи половину обчислювального часу та уникаючи непривабливих артефактів. Це простий у використанні, ви можете визначити кольори на воксель, а також альфа (прозорість) кожного з них, що дозволяє побачити всередині.

Приклад використання:

% numbers are arbitrary
cube=zeros(11,11,11);
cube(3:9,3:9,3:9)=5; % Create a cube inside the region

% Boring: faces of the cube are a different color.
cube(3:9,3:9,3)=2;
cube(3:9,3:9,9)=2;
cube(3:9,3,3:9)=2;
cube(3:9,9,3:9)=2;
cube(3,3:9,3:9)=2;
cube(9,3:9,3:9)=2;

vold3d("Cdata",cube,"alpha",cube/5)

введіть опис зображення тут

Але, так, все одно виглядає погано. Тому що, якщо ви хочете бачити всередині, воксельне накладення не є найкращим варіантом. Альфа різного обличчя складається одне на вершині іншого, і єдиним способом вирішення цього є написання просунутого алгоритму трасування трафіку комп'ютерної графіки, і довіряйте мені, що це довга і сувора дорога, щоб взяти.

Дуже часто один має 4D-дані, отже дані, щомістить тривимірне розташування та окремі дані для кожного з місцеположень. Можна подумати, що в цьому випадку ви дійсно хочете вокселів, так як кожен з них має 3D + кольорові, 4D-дані. Дійсно! ви можете зробити це за допомогою вокселів, але іноді краще його описати іншими способами. Як приклад, дозвольте бачити цю людину, яка хоче виділити регіон у своєму 4D-просторі (посилання). Щоб переглянути більший список, я пропоную вам подивитися моя відповідь тут про технології візуалізації 4D.

Давайте спробуємо придумати інший підхід, ніж воксель. Давайте використовувати попередній куб і створити isosurfaces коли 4D-дані змінюють значення.

iso1=isosurface(cube,1);
iso2=isosurface(cube,4);
p1=patch(iso1,"facecolor","r","facealpha",0.3,"linestyle","none");
p2=patch(iso2,"facecolor","g","facealpha",1,"linestyle","none");

% below here is code for it to look "fancy"
isonormals(cube,p1)

view(3);
axis tight
axis equal
axis off
camlight
lighting gouraud

введіть опис зображення тут

І це, на мій погляд, краще виглядає.

Вибирай вільно і добре плануй!