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

Изображение CData

Примечание

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

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

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

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

Изображение CDataMapping

The 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

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

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. The axes contains an object of type image.

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

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

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

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

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

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

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

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

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

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

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

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