
- •Часть 1: Пакет matlab
- •1. Начальные сведения о математическом пакете matlab
- •1.2. Редактор командной строки
- •2. Основные конструкции matlab
- •2.1. Форматы представления чисел и типы данных, используемых при обработке изображений
- •2.2. Массивы.
- •2.3. Операторы
- •2.3.1. Операции с числами
- •2.3.2 Операции с матрицами
- •2.3.3. Операторы сравнения для массивов
- •2.3.4. Логические операторы
- •2.4. Символьные вычисления
- •3. Основные команды для цифровой обработки изображений
- •3.1. Цифровое представление изображения и математическая модель цвета.
- •3.2. Цифровое представление изображения в matlab
- •Бинарные изображения
- •3.3.5. Поворот изображения
- •4. Программирование в matlab
- •4.1. Внешние текстовые файлы
- •4.2. Условный оператор и оператор цикла
- •4.3. Работа с m-файлами
- •4.4. Пример m-файла. Умножение изображений
- •5. Визуализация результатов вычислений
- •5.1. Команда Plot
- •5.2. Настройка параметров графического вывода команды plot
- •5.6. Отображение радиус – векторов
- •5.7. Построение узлов разбиения прямоугольной области.
- •6. Статистические функции обработки изображений
- •6.1. Определение rgb значений пиксела
- •6.2. Вычисление среднего значения элементов матрицы
- •6.3. Вычисление среднеквадратичного отклонения элементов матрицы
- •6.4. Выделение подобластей изображения
- •6.5. Построение гистограммы интенсивности цветовых компонентов
- •6.6. Применение команды hist для анализа текстуры дорожного покрытия
- •7. Управление параметрами изображений
- •7.1. Выравнивание гистограммы (эквализация)
- •7.2. Управление яркостью (Вета – коррекция)
- •7.3. Управление контрастностью (Гамма-коррекция)
- •8. Фильтрация изображений
- •Принципы фильтрации
- •8.2 Функции фильтрации
- •8.3. Фильтр Гаусса.
- •8.4.Фильтр Собеля
- •8.5. Фильтр Превитта.
- •8.6. Вч фильтр Лапласа.
- •8.7.Фильтр Лапласа-Гаусса.
- •8.8. Усредняющий нч фильтр.
- •8.9. Фильтр повышения резкости.
- •9. Выделение контуров объектов
- •10. Пример обработки изображения для анализа качества дорожного покрытия
- •Литература
3.3.5. Поворот изображения
Обработка матрицы изображения осуществляется по строкам или столбцам, что накладывает некоторые ограничения при анализе симметричности объекта. Поэтому в некоторых приложениях важно иметь возможность поворота объекта в плоскости как целого. Для этой цели используется функция imrotate.
Команда imrotate(Im, , s) выполняет поворот изображения на угол , 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. Как меняется форма наблюдаемого объекта на изображении в зависимости от скорости перемещения объекта?
4. Программирование в matlab
4.1. Внешние текстовые файлы
Изображение является внешним графическим файлом по отношению к пакету 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');
% открытие файл в текстовом редакторе
4.2. Условный оператор и оператор цикла
MATLAB имеет процедуры, позволяющие создавать переходы по условию и циклы. Условный оператор
“Если <условие>, то <действие>“
работает по следующей конструкции:
>> if условие
действие;
End;
Набрав логическое выражение, необходимо нажать клавишу «Enter», после чего MATLAB сделает переход строки. Далее следует написать оператор действия, которое осуществляется в случае выполнения условия, закончив его символом «;». При этом MATLAB снова сделает переход строки. В конце необходимо написать «end», символ «;» и нажать «Enter». При отсутствии ошибок MATLAB выполнит условный оператор “if” и в командном окне появится символ «>>».
Для организации ветвления используется форма
>> if условие1
действие 1;
else
действие 2;
end;
Циклы в MATLAB осуществляются с помощью оператора «for»:
>> for счетчик = начальное значение : конечное
действие;
end;
Пример 4.2. Создать вектор, состоящий из шести чисел геометрической прогрессии со знаменателем, равным 3, и первым членом, равным 1.
>> a(0)=1;
>> for i=1:5
a(i)=a(i-1)*3;
end;
>> a
a =
1 3 6 9 12 15
Пример 4.3. Построить цикл, проходящий по всем пикселам заданного полутонового изображения. Все пикселы, у которых интенсивность больше p=180, закрасить в черный цвет. Результаты представлены на рис. 1, 2.
>> p = 180; % параметр
>> img = imread(‘C:\path\file.jpg’);
% чтение изображения
>> grayImg = rgb2gray(img);
% перевод RGB-изображения
% в полутоновое
>> m = size(grayImg,1); % определение
% числа строк
>> n = size(grayImg,2); % определение % числа столбцов
>> for i = 1 : m % цикл по строкам
for j = 1 : n % цикл по столбцам
if grayImg(i,j) > p
grayImg(i,j) = 0; % черный
end;
end;
end;
В результате четко определилось небо и разметка на дорожном полотне.
|
|
Рис.1. Исходное изображение
|
Рис.2. Результат работы программы примера 4.3
|