Моя путаница с областью интересов
Я искал учебное пособие по интересующей нас области, и есть несколько вещей, которые избегают моего понимания.
Пример, приведенный для создания бинарной маски для настройки ROI:
img = imread('pout.tif');
h_im = imshow(img);
e = imellipse(gca,[55 10 120 120]);
BW = createMask(e,h_im);
Я понимаю что эллипс imellipse
используется для создания объекта ROI. Итак, следуя своей странице, я читал об этом больше, но нигде на этой странице это не объясняет, что gca
является? все, что он говорит, - то, что это hparent и определяет родителя HG эллипса. Я не понимаю, это может кто-нибудь, пожалуйста, уточните. Могу ли я использовать что-то еще вместо gca? а что такое gca?
Также в этой строке imshow
функция назначена h_im
а затем в дальнейшем используется. Когда я сделал это с моей установкой с образцом изображения, я получил это значение h_im = 1.740099
так h_im
это двойное значение.
Это далее используется здесь BW = createMask(e,h_im);
Я понимаю, что это параметры, означающие:
BW = createMask (h, h_im) возвращает маску того же размера, что и изображение h_im с 1 с внутри объекта ROI h и с 0 снаружи. Этот синтаксис необходим, когда оси, содержащие область интереса, содержат более одного изображения.
так это 1.740099
размер изображения? В каких единицах это измеряется?
Также, когда я написал последнюю строку в моем Matlab, я получил следующую ошибку:
>> BW = createMask(h,h_im);
??? Invalid or deleted object.
Error in ==> imroi>imroi.parseInputsForCreateMask at 78
h_ax = ancestor(obj.h_group,'axes');
Error in ==> imroi>imroi.createMask at 264
[obj,h_im] = parseInputsForCreateMask(varargin{:});
Почему я получаю эту ошибку?
Спасибо
1 ответ
gca - это функция, которая возвращает дескриптор текущей оси. Аналогично, h_im - это дескриптор объекта изображения, созданного imshow. Подробнее о работе с ручками из Mathworks вы можете прочитать здесь.
Число, которое вы видите при проверке дескрипторов, не связано со свойствами (размером и т. Д.) Изображения - значение может иметь отношение к типу объекта, но в основном это идентификаторы, используемые Matlab для отслеживания открытых графических объектов. Поэтому, когда вы вызываете imellipse, вы передаете дескриптор к осям, где появится эллипс, и возвращаете другой дескриптор в e
,
e = imellipse(gca,[55 10 120 120]);
В качестве альтернативы вместо gca
Вы могли бы использовать другую ручку, указывающую на другие оси. Например, если у вас было:
a1 = subplot(1,2,1), h1 = imshow(img1)
a2 = subplot(1,2,2), h2 = imshow(img2)
Тогда вы можете использовать либо a1
или же a2
вместо gca, в зависимости от того, какое изображение вы хотите создать.
Если вы закроете фигуру, содержащую изображение и ваш эллипс, эти маркеры будут удалены - так вы получили ошибку "Неверный или удаленный объект". Как только вы использовали createMask
и вернул маску, которую хочешь, фигуру можно закрыть.