Интерполяция вдоль срезов 2-D изображения - PullRequest
6 голосов
/ 21 июля 2011

У меня есть набор 100 2-D изображений срезов одного размера.Я использовал MATLAB, чтобы сложить их для создания объемных данных.Хотя размер двухмерных срезов составляет 480x488 пикселей, направление, в котором уложены изображения, недостаточно широкое для визуализации объема в другой ориентации при проецировании.Мне нужно интерполировать вдоль срезов, чтобы увеличить размер для визуализации.

Может кто-нибудь дать мне идею или совет о том, как это сделать?

Редактировать: Анотированные проецируемые изображения микроскопии

Looking at a face

General view

На рисунке 1 показан вид сверху прогнозируемого объема.

На рисунке 2 показан вид сбокупроецируемый объем.

Когда я изменяю угол поворота и пытаюсь визуализировать объем в другой ориентации, например, вид сбоку (рисунок 2), я вижу то же, что и на рисунке 2.

Я хочу расширить вид сбоку, интерполируя вдоль фрагментов изображения.

Ответы [ 3 ]

4 голосов
/ 21 июля 2011

Вот адаптированный пример из документации MATLAB о том, как визуализировать объемные данные (аналогичные вашим), используя изоповерхности :

%# load MRI dataset: 27 slices of 128x128 images
load mri
D = squeeze(D);       %# 27 2D-images

%# view slices as countours
contourslice(D,[],[],1:size(D,3))
colormap(map), view(3), axis tight

%# apply isosurface
figure
%#D = smooth3(D);
p = patch( isosurface(D,5) );
isonormals(D, p);
set(p, 'FaceColor',[1,.75,.65], 'EdgeColor','none')
daspect([1 1 .5]), view(3), axis tight, axis vis3d
camlight, lighting gouraud

%# add isocaps
patch(isocaps(D,5), 'FaceColor','interp', 'EdgeColor','none');
colormap(map)

contourslice isosurface_isocaps

3 голосов
/ 21 июля 2011

MATLAB имеет функцию interp3, которую можно использовать для интерполяции, предполагая, что данные равномерно дискретизированы.

Ознакомьтесь с документацией .

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: Функция MATLAB interp3 работает следующим образом:

vi = interp3(x, y, z, v, xi, yi, zi);

Я предполагаю, что ваш "стек" срезов определяет массивы x, y, z, v как 3D массивы, где x, y - координаты пикселей в плоскости, z - "высота" каждого среза.и v - фактические срезы изображения, возможно, в виде значений «интенсивности» для пикселей.

Если вы хотите интерполировать новые срезы изображения при промежуточных значениях z, вы можете указать эти уровни в ziмассив.Массивы xi, yi снова будут представлять координаты пикселей на плоскости.

0 голосов
/ 31 октября 2011

Я создал функцию для интерполяции фрагментов изображения. Ниже приведен код:

    function res = interp_along_slices( vol, scale )
    % Interpolation along the image slices

    % Get the size of the volume
      [r c p] = size(vol);

    % Pre-allocate the array:
    % the third dimension is scale times the p
      vol_interp = zeros(r,c,scale*p);

    % interpolate along the image slices 
      for inr = 1:r;
          for jnr = 1:c;
              xi = vol(inr,jnr,:);
              vol_interp(inr,jnr,:) = interp(xi, scale); 
          end;
      end;

      res = vol_interp;

    end
...