Как нанести координаты на трехмерное изображение и отобразить его - PullRequest
0 голосов
/ 28 января 2019

У меня есть трехмерное изображение в виде многослойного файла TIF, это двоичный том, показывающий пятна в определенных местах.У меня также есть выходные данные из алгоритма прогнозирования, который предсказывает координаты упомянутых BLOB-объектов на изображении.

До сих пор я читал и записывал файлы tif, используя imageio.volread и imageio.volwrite, но яЯ хочу увидеть, насколько точно работает алгоритм прогнозирования, поэтому я хотел бы нанести координаты на изображение.Координаты - это значения [x,y,z], где количество строк равно количеству BLOB-объектов.

Я искал и обнаружил, что для Python нет простого способа добиться этого в 3D.принимая руководство отсюда: https://www.raddq.com/dicom-processing-segmentation-visualization-in-python/, я попытался использовать skimage.measure.marching_cubes для преобразования изображения в двухмерную сетку поверхности, чтобы его можно было построить с помощью matplotlib, а затем использовать его для построения моего изображения.

def make_mesh(image):
    print('Transposing surface')
    p = image.transpose(2, 1, 0)

    print('Calculating surface')
    verts, faces, norm, val = measure.marching_cubes_lewiner(p, allow_degenerate=True)
    return verts, faces

def plt_3d(verts, faces):
    print('Drawing')
    x, y, z = zip(*verts)
    fig = plt.figure(figsize=(10, 10))
    ax = fig.add_subplot(111, projection='3d')

    # Fancy indexing: `verts[faces]` to generate a collection of triangles
    mesh = Poly3DCollection(verts[faces], linewidths=0.05, alpha=1)
    face_color = [1, 1, 0.9]
    mesh.set_facecolor(face_color)
    ax.add_collection3d(mesh)

    ax.set_xlim(0, max(x))
    ax.set_ylim(0, max(y))
    ax.set_zlim(0, max(z))
    # ax.set_axis_bgcolor((0.7, 0.7, 0.7))
    plt.show()

img_gt = io.volread(gt_path)
v, f = make_mesh(img_gt)
plt_3d(v, f)

Изображение представляет собой [21,512,1024] и состоит из 5 «больших объектов», но plot_3d создает следующее:

enter image description here

правильно ли я не использую функцию marching_cubes?Почему сюжет настолько искажен?Оригинальные капли - это чистые сферы, совсем не растянутые.

Кроме того, если это единственный способ нанести мое изображение, как я могу нанести мои [x,y,z] координаты поверх этого?

...