Преобразование выпуклой оболочки в бинарную маску - PullRequest
4 голосов
/ 05 мая 2010

Я хочу сгенерировать двоичную маску, которая имеет единицы для всех вокселей внутри и нули для всех вокселей вне объема. Объем определяется выпуклой оболочкой вокруг набора трехмерных координат (<100; некоторые из координат находятся внутри объема). </p>

Я могу получить выпуклую оболочку, используя CONVHULLN , но как мне преобразовать это в двоичную маску?

В случае, если нет хорошего способа пройти через выпуклую оболочку, есть ли у вас какие-либо другие идеи, как я мог бы создать бинарную маску?

Ответы [ 3 ]

8 голосов
/ 05 мая 2010

Вы можете решить эту проблему, используя DelaunayTri class и pointLocation метод . Вот пример:

pointMatrix = rand(20,3);       %# A set of 20 random 3-D points
dt = DelaunayTri(pointMatrix);  %# Create a Delaunay triangulation
[X,Y,Z] = meshgrid(0:0.01:1);   %# Create a mesh of coordinates for your volume
simplexIndex = pointLocation(dt,X(:),Y(:),Z(:));  %# Find index of simplex that
                                                  %#   each point is inside
mask = ~isnan(simplexIndex);    %# Points outside the convex hull have a
                                %#   simplex index of NaN
mask = reshape(mask,size(X));   %# Reshape the mask to 101-by-101-by-101

Приведенный выше пример создает логическую маску для сетки 101 на 101 на 101, охватывающей единичный объем (от 0 до 1 в каждом измерении), с 1 (true) для точек сетки внутри выпуклой оболочки набор 3D-точек.

2 голосов
/ 05 мая 2010

Уже поздно, поэтому только очень отрывочное предложение:

  1. С помощью точек выпуклой оболочки создайте тесселяцию Делоне.
  2. Использование метода pointLocation класса DelaunayTri проверяет каждую точку в вашем массиве пикселей.

Я ожидаю, что это будет очень медленно, и что есть лучшие решения, если кто-то придет в мои мечты, я опубликую завтра.

0 голосов
/ 05 мая 2010

Это проблема преобразования сканирования. Ознакомьтесь с разделом 8 из Алгоритмы 3D-сканирования и преобразования для воксельной графики .

Алгоритм, который вам нужен, является сплошным и немного проще, так как вы вокселизуете выпуклый многогранник, грани которого - треугольники - каждый цикл вокселей ограничен двумя треугольниками.

...