Объект изображения и его свойства

Обработка изображений CData

Примечание

image и imagesc команды создают объекты изображения. Объекты изображения являются дочерними элементами объектов осей, как линия, закрашенная фигура, поверхность и текстовые объекты. Как все графические объекты, объект изображения имеет много свойств, которые можно установить, чтобы подстроить его внешний вид на экране. Самыми важными свойствами объекта изображения относительно внешнего вида является CData'CDataMapping' , XData, и YData. Эти свойства обсуждены в этом и следующих разделах. Для получения дальнейшей информации о них и всех свойствах объекта изображения, смотрите image.

CData свойство объекта изображения содержит массив данных. В следующих командах, h указатель объекта изображения, созданного image, и матрицы X и Y то же самое:

h = image(X); colormap(map)
Y = get(h,'CData');

Размерность CData массив управляет, окрашивают ли отображения изображений с помощью палитры или как изображение RGB. Если CData массив двумерен, изображение является или индексируемым изображением или изображением интенсивности; в любом случае изображение отображено с помощью цветов палитры. Если, с другой стороны, CData массив является m n 3, это отображается как изображение истинного цвета, игнорируя цвета палитры.

Обработка изображений CDataMapping

CDataMapping свойство управляет, является ли изображением indexed или intensity. Чтобы отобразить индексируемое изображение устанавливает CDataMapping свойство к 'direct', так, чтобы значения CData массив используется непосредственно в качестве индексов в палитру фигуры. Когда image команда используется с одним входным параметром, она устанавливает значение CDataMapping к 'direct':

h = image(X); colormap(map)
get(h,'CDataMapping')
ans =

direct

Изображения интенсивности отображены путем установки CDataMapping свойство к 'scaled'. В этом случае, CData значения линейно масштабируются, чтобы сформировать индексы палитры. Оси CLim свойство управляет масштабными коэффициентами. imagesc функция создает объект изображения чей CDataMapping свойство установлено в 'scaled', и это настраивает CLim свойство родительских осей. Например:

h = imagesc(I,[0 1]); colormap(map)
get(h,'CDataMapping')
ans =

scaled

get(gca,'CLim')
ans =

[0 1]

XData и YData

XData и YData свойства управляют системой координат изображения. Для изображения m на n, XData по умолчанию [1 n] и YData по умолчанию [1 m]. Эти настройки подразумевают следующее:

  • Левый столбец изображения имеет x-координату 1.

  • Правый столбец изображения имеет x-координату n.

  • Верхняя строка изображения имеет y-координату 1.

  • Нижний ряд изображения имеет y-координату m.

Система координат для изображений

Используйте систему координат по умолчанию

Отобразите изображение с помощью системы координат по умолчанию. Используйте цвета от colorcube карта.

C = [1 2 3 4; 5 6 7 8; 9 10 11 12];
im = image(C);
colormap(colorcube)

Figure contains an axes object. The axes object contains an object of type image.

Задайте систему координат

Отобразите изображение и задайте систему координат. Используйте цвета от colorcube карта.

C = [1 2 3 4; 5 6 7 8; 9 10 11 12];
x = [-1 2];
y = [2 4];
figure
image(x,y,C) 
colormap(colorcube)

Figure contains an axes object. The axes object contains an object of type image.

Добавление текста к данным изображения

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

Чертите текст в оси с помощью text функция. Затем получите текст с экрана с помощью getframe и закройте фигуру.

fig = figure;
t = text(.05,.1,'Mandrill Face','FontSize',20,'FontWeight','bold');
F = getframe(gca,[10 10 200 200]);
close(fig)

Выберите любую плоскость получившегося изображения RGB, возвращенного getframe. Найдите пиксели, которые являются черными (черный, 0), и преобразуйте их индексы в индексы с помощью sub2ind. Используйте эти индексы, чтобы "нарисовать" текст в изображение, содержавшееся в mandrill Matfile. Используйте размер того изображения плюс местоположения строки и столбца текста, чтобы определить местоположения в новом изображении. Индексируйте в новое изображение, заменив пиксели.

c = F.cdata(:,:,1);
[i,j] = find(c==0);
load mandrill
ind = sub2ind(size(X),i,j);
X(ind) = uint8(255);

Отобразите новое изображение с помощью палитры кости.

imagesc(X)
colormap bone

Figure contains an axes object. The axes object contains an object of type image.

Дополнительные методы для быстрого обновления изображений

Увеличить уровень в который CData свойство объекта изображения обновляется, оптимизируйте CData и набор некоторая связанная фигура и свойства осей:

  • Используйте самый маленький возможный тип данных. Используя uint8 тип данных для вашего изображения будет быстрее, чем использование double тип данных.

    Часть процесса установки CData изображения свойство включает копирование матрицы для использования изображения. Полный размер матрицы зависит от размера своих отдельных элементов. Используя меньшие отдельные элементы (i.e., меньший тип данных), уменьшает матричный размер и уменьшает количество времени, должен был скопировать матрицу.

  • Используйте самую маленькую приемлемую матрицу.

    Если скорость, на которой отображено изображение, является вашим самым высоким приоритетом, вы, возможно, должны пойти на компромисс на размере и качестве изображения. Снова, уменьшение размера уменьшает время, должен был скопировать матрицу.

  • Установите предельные свойства режима (XLimMode и YLimMode) из ваших осей к manual.

    Если они установлены в auto, затем каждый раз, когда объект (такой как изображение, линия, закрашенная фигура, и т.д.) изменяет некоторый аспект своих данных, оси должны повторно вычислить ее связанные свойства. Например, если вы задаете

    image(firstimage);
    set(gca, 'xlimmode','manual',...
    'ylimmode','manual',...
    'zlimmode','manual',...
    'climmode','manual',...
    'alimmode','manual');
    

    оси не повторно вычисляют ни одного из предельных значений прежде, чем перерисовать изображение.

  • Рассмотрите использование a movie возразите, должен ли основной момент вашей задачи просто отобразить серию изображений на экране.

    MATLAB® movie объект использует базовые системные ресурсы графики непосредственно, вместо того, чтобы выполнить объектный код MATLAB. Это быстрее, чем повторная установка CData изображения свойство, аналогичное описанному ранее.