Исследуйте детали заблокированного изображения с интерактивными ROIs

В этом примере показано, как отобразить подробную область заблокированного изображения, выбранную в интерактивном режиме с помощью инструментов ROI.

bigimageshow отображает blockedImage объекты. Если на blockedImage объект имеет несколько уровней, тогда bigimageshow автоматический выбор соответствующего уровня в зависимости от размера экрана и порта просмотра. bigimageshow всегда работает в одной 'мировой координате' и отображает каждый уровень на основе его пространственной ссылочной информации. Это позволяет использовать два отображений одинаковых blockedImage объект для отображения деталей изображения на разных уровнях, но с одной и той же системой координат.

Создайте blockedImage использование измененной версии изображения «tumor_091.tif» из CAMELYON16 набора данных. Оригинальное изображение представляет собой обучающее изображение лимфатического узла, содержащего опухолевую ткань. Оригинальное изображение имеет восемь уровней разрешения, а лучшее - разрешение 53760 на 61440. Измененное изображение имеет только три уровня грубого разрешения. Пространственная привязка измененного изображения была скорректирована, чтобы обеспечить согласованное соотношение сторон и зарегистрировать функции на каждом уровне.

bim = blockedImage('tumor_091R.tif');

Отображение обзора изображений и подробного представления

Отобразите все большое изображение в левой части окна рисунка с помощью bigimageshow функция. Уровень разрешения отображаемого обзора автоматически изменяется в зависимости от размера окна и размера экрана.

hf = figure;
haOView = subplot(1,2,1);
haOView.Tag = 'OverView';
hl = bigimageshow(bim,'Parent',haOView);

Зафиксировать уровень разрешения обзорного изображения как самый грубый уровень разрешения.

coarsestLevel = bim.NumLevels;
hl.ResolutionLevel = coarsestLevel;
title('Overview');

Отобразите подробный вид большого изображения в правой части окна рисунка. Разрешить bigimageshow для автоматического управления уровнем детального изображения.

haDetailView = subplot(1,2,2);
haDetailView.Tag = 'DetailView';
hr = bigimageshow(bim,'Parent',haDetailView);

Изменение масштаба подробного представления.

xlim([2800,3050])
ylim([500,750])
title('Detailed View');

Добавьте интерактивный прямоугольник информации только для чтения для управления Отображения просмотра

На обзорном изображении нарисуйте прямоугольник информация только для чтения. Этот пример задает начальный размер и положение прямоугольника программно путем установки Position свойство как четырехэлементный вектор вида [xmin, ymin, width, height]. После появления информация только для чтения в обзоре можно в интерактивном режиме настроить размер и положение информация только для чтения.

xrange = xlim;
yrange = ylim;
roiPosition = [xrange(1) yrange(1) xrange(2)-xrange(1) yrange(2)-yrange(1)];
hrOView = drawrectangle(haOView,'Position',roiPosition,'Color','r');

Сохраните указатели прямоугольника, который будет использоваться при определении взаимодействия между прямоугольником и выносным элементом.

hrOView.UserData.haDetailView = haDetailView;
haDetailView.UserData.hrOView = hrOView;

Добавить прослушивателей в подробный вид. Эти прослушиватели обнаруживают изменения в пространственных границах подробного представления. Когда пространственные границы изменяются, прослушиватели вызывают updateOverviewROI вспомогательная функция, которая обновляет границы информация только для чтения так, чтобы они совпадали с границами подробного представления. Функция helper определяется в конце этого примера.

addlistener(haDetailView,'XLim','PostSet',@updateOverviewROI);
addlistener(haDetailView,'YLim','PostSet',@updateOverviewROI);

Добавьте прослушиватель в прямоугольник информация только для чтения. Эти прослушиватели обнаруживают изменения пространственной протяженности прямоугольника. Когда пределы изменяются, прослушиватели вызывают updateOverViewROI helper, которая обновляет границы подробного изображения так, чтобы оно совпадало с границами информация только для чтения. Функция helper определяется в конце этого примера.

addlistener(hrOView,'MovingROI',@updateDetailView);

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

Этот пример программно изменяет размер и положение информация только для чтения путем установки Position свойство.

hrOView.Position = [2230,1300,980,840];
evt.CurrentPosition = hrOView.Position;
updateDetailView(hrOView,evt);

Задайте функции обратного вызова, чтобы управлять взаимодействиями

function updateOverviewROI(~,hEvt)
  % Update overview rectangle position whenever the right hand side
  % zooms/pans.
  ha = hEvt.AffectedObject;
  hr = hEvt.AffectedObject.UserData.hrOView;
  hr.Position = [ha.XLim(1),ha.YLim(1),diff(ha.XLim),diff(ha.YLim)];
end

function updateDetailView(hSrc,hEvt)
  % Update the right side detail view anytime the overview rectangle is
  % moved. bigimageshow automatically picks the appropriate image level.
  ha = hSrc.UserData.haDetailView;
  ha.XLim = [hEvt.CurrentPosition(1), ...
      hEvt.CurrentPosition(1)+hEvt.CurrentPosition(3)];
  ha.YLim = [hEvt.CurrentPosition(2), ...
      hEvt.CurrentPosition(2)+hEvt.CurrentPosition(4)];
end

См. также

|