Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Здесь размеры m и n изображения X1 навязываются в качестве физического размера картинки в графическом окне системы MATLAB. Для слишком маленьких картинок при этом ничего хорошего не получится.
Если мы не будем создавать новые изображения, манипулируя явно матрицами, а будем пытаться отобразить в графическом окне системы MATLAB уже готовые картинки, записанные в файлах, то тогда нам потребуется прочесть содержимое этих файлов функцией imread. В частности, ранее мы записывали трёхмерные изображения в файлы с помощью функции imwrite. Теперь их можно прочесть
[ X2, map2 ] = imread('myfile1.jpg')
и показать в графическом окне. Заметим только, что файл должен быть в текущем каталоге системы MATLAB, иначе его нужно указать вместе с полным путём к нему.
Рассмотренное нами строение данных для объекта Image, состоящее из двух матриц, одна из которых построчно задаёт цвета, а вторая своими элементами указывает входы в таблицу (матрицу) цветов, называется более точно как Indexed Image (индексированное изображение). Есть и другой тип объекта Image - так называемый Truecolor Image (картинки с очень большим количеством цветов - до 16 миллионов). Этот второй тип объектов Image устроен по-другому.
Для TruecolorImage- объектов таблица цветов не требуется, так как массивы данных таких объектов непосредственно определяют цвета.
Эти массивы имеют размер m x n x 3 (это массивы размерности 3). Величины m и n определяют размер картинки на экране (m x n пикселов), а вдоль третьего направления располагаются RGB-составляющие цвета каждого пиксела. Зададим для примера следующий массив для изображения TrueColor:
xTrue(1,1,1) = uint8(127); xTrue(1,1,2) = uint8(127); xTrue(1,1,3) = uint8(127);
xTrue(1,2,1) = uint8(19); xTrue(1,2,2) = uint8(12); xTrue(1,2,3) = uint8(255);
xTrue(1,3,1) = uint8(245); xTrue(1,3,2) = uint8(127); xTrue(1,3,3) = uint8(1);
xTrue(2,1,1) = uint8(6); xTrue(2,1,2) = uint8(203); xTrue(2,1,3) = uint8(128);
xTrue(2,2,1) = uint8(100); xTrue(2,2,2) = uint8(1); xTrue(2,2,3) = uint8(80);
xTrue(2,3,1) = uint8(60); xTrue(2,3,2) = uint8(249); xTrue(2,3,3) = uint8(5);
Массив xTrue создаёт изображение 2 x 3 пиксела с помощью вызова одной функции image(xTrue):
Если изображение находится в файле и вы заранее не знаете какой оно имеет тип (индексное, то есть с палитрой цветов, или имеет тип TrueColor), то можете читать его следующим образом:
[ X, map ] = imread('name.xxx')
В случае TrueColor изображений здесь матрица X получит размер m x n x 3 а матрица палитры map будет пустой:
size(map) = 0 0
В дальнейшем функция image автоматически по размеру матрицы X распознаёт типы изображений и действует в обоих случаях как надо, а функция colormap в случае пустого массива map не делает ничего, так что оба этих случая могут быть обработаны одинаково.
Однако, если бы мы заранее знали, что в файле содержится изображение типа TrueColor, то мы бы выполняли для его чтения более короткий код
X = imread('name.xxx')
а показывали бы изображение вызовом только одной функции image(X). Чтобы заранее узнать тип изображения в файле, нужно вызвать функцию
imfinfo('name.xxx')
В частности для файла 'myfile1.jpg', созданного в предыдущем разделе данного пособия, функция imfinfo выдаст следующую информацию:
Отсюда видно, что тип изображения в файле (ColorType) есть truecolor. Это означает, что можно полностью обойтись без матрицы цветов.
#$Глава 3.
Дата публикования: 2015-01-23; Прочитано: 305 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!