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

В этом примере показано, как отобразить подробную область блокированного изображения, выбранного в интерактивном режиме с помощью инструментов 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');

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

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

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 функция помощника, которая обновляет степени ROI, чтобы совпадать со степенями представления детали. Функция помощника задана в конце этого примера.

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

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

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

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

Этот пример изменяет размер и положение ROI программно путем установки 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

Смотрите также

|