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

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

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

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

bim = bigimage('tumor_091R.tif');

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

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

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

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

hl.ResolutionLevel = bim.CoarsestResolutionLevel;
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

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

|