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