2016-03-31 7 views
-1

Есть ли какой-нибудь пример для построения объемного фрагмента в Ilnumerics, используя версию сообщества. Это пример я получил от сайта Matlab:Ищите пример для построения объемного фрагмента в Ilnumerics

Volumetric slice image example of matlab

У меня есть массив X, Y, Z, как posistions и V (скорость) в качестве значения для цвета черчения. Все, что я сделал, это использовать Ilpoints для построения V в положениях X, Y, Z нет, поверхностей. Вот мой код, и результат,

ILArray<float> plotXY = ILMath.zeros<float>(3, XcoordinateXY.Length); 
     plotXY["0;:"] = ILMath.tosingle(SurfaceXY[":;:;1"]); 
     plotXY["1;:"] = ILMath.tosingle(SurfaceXY[":;:;2"]); 
     plotXY["2;:"] = ILMath.tosingle(SurfaceXY[":;:;3"]); 

     ILArray<float> ColorMap = ILMath.tosingle(SurfaceXY[":;:;0"]); 

var ilsurfaceplotXY = new ILPoints() 
     { 

      /*Wireframe = { Color = Color.FromArgb(50, Color.LightGray) }, 
      Colormap = new ILColormap(dataXY), 
      Children = { new ILColorbar() }*/ 
      Positions = plotXY, 
      Colors = cm.Map(ColorMap).T, 
      Color = null 
     }; 

Вот код для отображения:

var scene = new ILScene(); 
     scene.Add(
       new ILPlotCube 
       { 
        TwoDMode = false, 
        Axes = 
        { 

         XAxis = 
         { 
          Label = { Text = "UTM X (Km)" }, 
          GridMajor = 
          { 
           DashStyle = DashStyle.Dashed, 
           Color = Color.DarkGray, 
           Width = 1 

          } 
         }, 
         YAxis = 
         { 
          Label = { Text = "UTM Y (Km)" }, 
          GridMajor = 
          { 
           DashStyle = DashStyle.Dashed, 
           Color = Color.DarkGray, 
           Width = 1 
          } 
         }, 
         ZAxis = 
         { 
          Label = { Text = "DEPTH (Km)" }, 
          GridMajor = 
          { 
           DashStyle = DashStyle.Dashed, 
           Color = Color.DarkGray, 
           Width = 1 
          } 
         } 
        }, 

        Children = { ilsurfaceplotXY, ilsurfaceplotXZ, ilsurfaceplotYZ }, 
       } 
      ); 

     this.ilPanel1.Scene = scene; 
     this.ilPanel1.Scene.Configure(); 
     this.ilPanel1.Refresh(); 

А вот результат изображения.

Result Image

Я сожалею, изображение находится в ссылке.

ответ

1

Что касается визуализации, это можно сделать с помощью regular surfaces, imagesc plots или новой быстрой поверхности в наборе инструментов Drawing2. Все они позволяют предоставлять значения X, Y и Z, а также цвет для каждой точки сетки или плитки.

Что касается вычислений точек: кажется, что вы просто выбираете очки из имеющегося набора. Было бы гораздо лучше интерполировать между этими пунктами. Interpolation Toolbox предоставляет функции для интерполяции сеточных и рассеянных данных. (В вашем случае данные кажутся сетчатыми?). Это позволяет иметь срезы в произвольной ориентации/углах. Инструментарий интерполяции интерполирует позиции точек среза среза, а также значения для цветов.

С online example:

Interpolation and visualization of sliced data from volumes

Установка горизонтальных срезов выполняется следующим образом:

ILArray<float> C; 
for (int i = 0; i < m_nrSlices; i += m_nrSlices/4) { 
    C = m_V[":",":", i]; 
    pc1.Add(new ILSurface(grid + i, C, colormap: Colormaps.Bone) 
    { 
     Wireframe = { Visible = false }, 
    }); 

}

Здесь m_V ваш 3D набор данных, обрабатываются как 3D-массив. pc - куб сюжета. Поверхности просто добавляются в куб сюжета. Точки красной интерполированной области динамически вычисляются как пользователь перемещает красные шары:

// Points on the cutting area are considered scattered points, because the area is not (necessarily) plain. However, V 
// is a grid. interp3s interpolates the scattered points very efficiently. 
// Note how the shape of the coordinate arrays Xn, Yn and Zn is not important. interp3s takes their elements in sequential order. 
// The output is a vector of interpolated values. (We gonna reshape it below.) 
ILArray < float> Z = Interpolation.interp3s(m_V, m_x, m_x, m_x, m_Xn, m_Yn, Zn, method: InterpolationMethod.cubic); 

// let's plot! We get a reference to the fast surface 
var fsurf = ilPanel1.Scene.First<ILFastSurface>("dynslice"); 
if (fsurf != null) { 
    // first time setup only: provide the full coordinates of X and V. Here it is sufficient to provide grid vectors. 
    if (fsurf.Cols == 0) { 
     fsurf.Update(X: m_xn * res, Y: m_xn * res, Z: Zn * res, C: ILMath.reshape(Z, Zn.S), colormap: Colormaps.Hot); 
    } else { 
     // the grid was configured already and did not change. we save some recomputing by ommiting the X and Y coordinates, prevent from reshaping buffers. 
     fsurf.Update(Z: Zn * res, C: ILMath.reshape(Z, Zn.S), colormap: Colormaps.Hot); 
    } 
} 
fsurf.Configure(); 
ilPanel1.Refresh(); 

Для того, чтобы перейти в деталь выходит за рамки так. Вы можете загрузить пример и запустить его на своем компьютере. Вам понадобится recent version ILNumerics.

EDIT: Выровненные по оси срезы, как и на участке, который вы предоставили, являются только субдоменом, конечно. Генерирование их работы в том же образом: enter image description here

+0

Это то, что я ищу for..thankyou так много @Haymo Kutschbach – Cas

+0

способ сказать спасибо на SO является upvote и пометить как ответ;) –