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