Основные функции работы с изображениями
Загрузка графического файла
Для загрузки графического файла используется функция imread:
>> I=imread('d:\МВ\book_2007\1\0\фото\light.jpg');
Параметром функции является полное имя графического файла, указанное в апострофах. Информация считывается и присваивается переменной I.
Вывод изображения на экран
Отобразить на экран прочитанное изображение можно с помощью команды:
>> imshow(I)
Появится графическое окно с именем Figure1 и в нем отразится изображение (Рис.7)
Рис.7. Вывод изображения на экран
Информация о структуре изображение I
Получить информацию о структуре I можно с помощью обращения:
>> whos I % запрос информации о
% структуре объекта I
Name Size Bytes Class
I 661x824x3 1633992 uint8 array
Grand total is 1633992 elements using 1633992 bytes
Операции с фрагментами R, G, B карт изображения
Предыдущий пункт показал, что изображение I является полноцветным изображением, цифровая информация о котором хранится в структуре I(i,j,k), где - число строк; - число столбцов; k=1,2,3 – индекс компонентов цвета RGB. Для запроса значений цветовых компонент нужно указать границы нужного фрагмента и номер цвета.
Пример 3.1.Получим значения цветовых компонент для фрагмента
>> I(50:60,30:40,1) % красная компонента
ans =
199 199 199 200 198 203 203 168 104 58 42
199 199 199 201 199 204 204 167 106 59 43
199 199 199 201 198 203 204 167 105 58 43
199 199 199 199 197 202 203 166 104 58 41
199 199 199 200 196 203 200 166 104 57 40
199 199 199 201 197 204 202 167 105 57 40
199 199 199 200 198 204 203 168 107 59 42
196 196 196 202 203 202 197 169 109 61 52
197 197 196 200 201 203 198 170 107 62 55
197 197 197 196 201 204 200 170 108 64 58
198 197 197 194 198 203 200 170 110 65 60
>> I(50:60,30:40,2) % зеленая компонента
ans =
205 205 205 204 202 209 209 174 113 67 51
205 205 205 205 203 210 210 176 115 68 52
205 205 205 205 202 209 210 176 116 69 54
205 205 205 203 201 208 209 175 115 69 53
205 205 205 202 200 207 209 175 115 69 55
205 205 205 203 201 208 211 176 117 72 57
205 205 205 204 202 210 212 179 119 74 59
202 202 202 206 207 208 206 180 121 76 69
203 203 202 204 207 209 207 181 122 77 72
203 203 203 202 207 210 209 181 123 79 75
204 203 203 200 207 212 211 182 122 80 77
>> I(50:60,30:40,3) % синяя компонента
ans =
203 203 203 203 201 207 207 172 110 64 48
203 203 203 204 202 208 208 173 112 65 49
203 203 203 204 201 207 208 173 112 65 50
203 203 203 202 200 206 207 172 111 65 49
203 203 203 201 199 206 206 172 111 65 50
203 203 203 202 200 207 208 173 113 67 51
203 203 203 203 201 208 209 175 115 69 53
200 200 200 205 206 206 203 176 117 71 63
201 201 200 203 205 207 204 177 117 72 66
201 201 201 200 205 208 206 177 118 74 69
202 201 201 198 204 209 207 178 118 75 71
Пример 3.2. Преобразуем цветное изображение из RGB формата в бинарный.
>> I1=im2bw(I) % I – цветное изображение;
% I1 – преобразованное в бинарное.
Соответствующая матрица имеет вид
>> I1(50:60,30:40) % запрос матрицы I1.
ans =
1 1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0 0
>>imshow(I1) % вывод на экран I1
Рис.8. Преобразование RGB изображения в бинарный тип
Поворот изображения
Обработка матрицы изображения осуществляется по строкам или столбцам, что накладывает некоторые ограничения при анализе симметричности объекта. Поэтому в некоторых приложениях важно иметь возможность поворота объекта в плоскости как целого. Для этой цели используется функция imrotate.
Команда imrotate(Im, a, s) выполняет поворот изображения на угол a, s - метод интерполяции. Можно использовать три метода: «’nearest’»-интерполяция по цвету ближайших пикселов, «’bilinear’»-билинейная интерполяция, «’bicubic’»-бикубическая интерполяция. Если параметр s не указан, по умолчанию используется 'nearest'.
Пример 3.3.
>>Imrotate = imrotate(Im,45, 'bicubic');
% Поворот изображения Im на 45
% градусов с бикубической
% интерполяцией
>>imshow(Imrotate)
Рис.9. Исходное изображение Im
Рис.10. Результат поворота на 45 градусов
Упражнение 3.1.Глубиной фрагмента изображения называется физическое расстояние до объекта, прообраза. Как оценить глубину изображения?
Упражнение 3.2.Предположим, что точность аппроксимации изображения - один пиксель. Какова относительная ошибка аппроксимации объектов на изображении в зависимости от глубины?
Упражнение 3.3.Почему при определенных скоростных режимах крутящегося колеса телеги наблюдается как бы схема направления вращения?
Упражнение 3.4.Как меняется форма наблюдаемого объекта на изображении в зависимости от скорости перемещения объекта?
Программирование в MATLAB
Внешние текстовые файлы
Изображение является внешним графическим файлом по отношению к пакету MATLAB, т.е. файлом, полученным независимым от MATLAB способом, например, с помощью фотокамеры. Естественно, что такие графические файлы доступны для обработки и другими программными приложениями. Получив матрицы цветов изображения с помощью MATLAB, бывает полезно сохранить эти числовые данные в виде текстового файла, который может использоваться другими приложениями. С другой стороны может возникнуть потребность прочитать текстовую информацию, полученную в других приложениях. Такие файлы называются внешними текстовыми файлами (по отношению к среде MATLAB).
MATLAB имеет функции работы с внешними файлами, аналогичные стандартным алгоритмическим языкам, таким как Pasсal и C++, например, assignfile(f), closefile(f).
Пример 4.1. Записать строку «12345.» в текстовый файл data.txt.
>> fid = fopen('C:\temp\data.txt','w');
% открытие файла на запись данных
>> fprintf(fid,'12345.\n');
% запись строки символов в файл
>> fclose(fid); % закрытие файла
>> open('C:\temp\data.txt');
% открытие файл в текстовом редакторе