ПГУ ТиИ – Лабораторный практикум – Простые операции с изображениями

1 Цель работы
Изучение возможностей пакета расширений IPT/Image.
Изучение основных приёмов работы с изображениями.
Получение практических навыков в составлении программ.
2 Теоретический материал
Пакеты Image Processing Toolbox и Image представляют собой набор функций для расширения возможностей систем MATLAB и GNU Octave при работе с цифровыми изображениями. Данный пакет поддерживает различные операции для обработки изображений, такие как:
1) пространственное преобразование;
2) нелинейная и линейная фильтрация;
3) анализ и улучшение изображений;
4) восстановление изображений;
5) сжатие изображений.
Представление цифровых изображений
Монохромное (черно-белое, полутоновое, серое) изображение (Grayscale) можно определить как двумерную функцию f(x, y), где x и y представляют пространственные координаты, а амплитуда f для каж-дой пары координат (x, y) является интенсивностью или яркостью изо-бражения в точке с заданными координатами.
Цветные изображения формируются комбинацией нескольких монохромных. Например в системе RGB цветное изображение состоит из комбинаций трех монохромных компонент R – красной, G – зеленой и B – синей.
В аналоговых изображениях, например, изображениях на фо-тографиях, или на картинах, нарисованных художником, каждую точ-ку можно характеризовать непрерывными пространственными коор-динатами (x, y) и соответствующей интенсивностью или цветом. Пре-образование аналогового изображения в цифровое требует представ-ления координат и интенсивностей некоторыми дискретными значе-ниями. Для оцифровки выполняются операции:
– пространственная дискретизация координат, при которой непрерывные координаты заменяются конечным множеством отсчетов;
– квантование по амплитуде, при которой интенсивности в каждой полученной точке заменяются квантованными значениями 74
О. Л. Куляс, К. А. Никитин
_____________________________________________________________
(округленными до некоторых эталонных).
– кодирование, при которой проквантованные уровни интен-сивности (яркости) заменяются эквивалентными кодовыми комбина-циями.
Результатом этих преобразований является матрица чисел, со-стоящая из элементов изображения (пикселов) и имеющая M строк и N столбцов. Это значит, что изображение имеет размер MxN.
Цифровые изображения, загруженные в среду MATLAB/Octave, помещаются в прямоугольную систему координат, где дискретные координаты (x, y) заменяются на (r, c) для обозначения строк (row) и столбцов (column). Начало этой системы соответствует верхнему левому углу изображения, координаты которой (r, c)= (1, 1). При этом значения координат могут меняться следующим образом r = 1, 2,…, M; c = 1, 2,…, N, т.е. являются целыми числами.
Может быть интересно
Такое матричное представление изображений называется про-странственным. При этом для работы с изображениями, его отдель-ными элементами (пикселами) или фрагментами используются любые приемы работы с матрицами, которые были рассмотрены в лаборатор-ной работе №2.
Классы данных
Координаты пикселов изображений являются целыми числами, однако значения пикселов (интенсивность, яркость), несмотря на то, что они проквантованы, могут принимать дискретные значения в раз-ных диапазонах числовых значений. Это определяется классом данных, который используется для представления изображений. Ис-пользуемые в MATLAB/Octave классы данных приведены в табл. 5.1
используются для представления изображений. Класс uint16 используется значительно реже.
Символьный класс char хранит символы в кодировке Unicode. Символьная строка представляет собой массив размером 1xn симво-лов, в котором каждый символ занимает 2 байта.
Класс данных logical используется для описания логических массивов, элементы которых содержат значения логических 0 или 1. Такие массивы хранятся в памяти занимая по 1 байту на пиксел.
Все численные операции в MATLAB выполняются с двойной точностью в классе double.
Типы изображений
Пакет расширений IPT/Image может работать с изображениями следующих типов:
– полутоновые (черно-белые, монохромные, grayscale) изо-бражения. Это матрица, элементы которой могут быть представлены числовыми значениями различных классов.
Если элементы изображения принадлежат классу uint8 или uint16, то они представляются целыми числами в интервалах [0, 255] и [0, 65 535] соответственно.
Если изображение использует класс double, то интенсивность пикселов представляется вещественными числами с плавающей точ-кой двойной точности. При этом условлено, что интенсивность пиксе-лов лежит в диапазоне [0, 1].
– двоичные (бинарные, bitmap) изображения являются логи-ческими массивами, состоящими из 1 и 0. Массив элементов из 1 и 0 других классов, например, uint8, не является двоичным изображением. Для преобразования числовых массивов в логические используется функция logical:
G = logical(A),
где A – числовой массив, состоящий из 1 и 0, G – логический массив с теми же элементами.
Если массив А имеет элементы отличные от 0 и 1, то эта функ-ция преобразует все его отличные от 0 элементы в логические 1, а все нулевые в логический 0.
– индексированные цветные изображения;
– полноцветные изображения.
!!!Цветные изображения будут рассмотрены в последующих лабораторных работах.
77
Обработка изображений средствами MATLAB/Octave
_____________________________________________________________
Таким образом, изображения, обрабатываемые в MATLAB/Octave, характеризуются типом изображения и классом данных. Например: полутоновое изображение класса double или би-нарное изображение класса logical.
Конвертирование классов данных и типов изображений
Преобразование (конвертирование) изображений из одних клас-сов и типов в другие классы и типы является распространенным дей-ствием при обработке изображений. Применяя конвертирование типов данных, следует помнить о диапазонах значений величин каждого класса, приведенных в табл. 5.1.
Классы конвертируются командой следующего формата:
В = data_class_name(A),
где data_class_name – это одно из имен классов данных из первого столбца табл. 5.1. Например, пусть А — массив класса uint8. Массив двойной точности В генерируется командой
В = double (А).
Такое преобразование используется весьма часто, поскольку MATLAB/Octave предполагает, что операнды числовых операций яв-ляются вещественными числами с двойной точностью.
Если С – это массив класса double, элементы которого лежат в интервале [0, 255], но среди них могут встречаться дробные числа, то для их исключения его можно преобразовать в массив uint8 следую-щим образом:
D = uint8(C).
Если массив класса double имел элементы со значениями вне интервала [0, 255] и он был конвертирован в класс uint8 описанным выше способом, то MATLAB/Octave преобразует все отрицательные величины (меньшие 0) в 0, все величины, большие 255 — в 255, а у всех остальных элементов отбрасываются дробные части.
Это означает, что перед преобразованием массивов double в uint8 для того, чтобы не потерять некоторые значения, необходимо совершить подходящую перенормировку (перемасштабирование) его элементов.
Преобразование любых числовых данных в логические приво-дит к логическому массиву, в котором везде на месте ненулевых эле-ментов входного массива стоят логические 1 и 0 на месте тех элемен-тов, которые равны нулю.
Уточнить информацию о размерах массива и классе изображе-ния f можно с помощью команды whos f:
78
О. Л. Куляс, К. А. Никитин
_____________________________________________________________
>> whos f
Variables visible from the current scope:
variables in scope: top scope
Attr Name Size Bytes Class
==== ==== ==== ===== =====
f 340×240 81600 uint8
Total is 81600 elements using 81600 bytes
В пакете расширений имеются специальные функции, которые реализуют перенормировку (перемасштабирование) при конверти-ровании одних классов и типов изображений в другие. Функция im2uint8 сначала распознает класс данных на входе и совершает все необходимые преобразования, чтобы выходное изображение имело правильный тип данных. В качестве примера рассмотрим изображение f размера 2×2 класса double, которое может являться результатом не-которых промежуточных вычислений:
f =
-0.5 0.5
0.75 1.5
Выполнив преобразование
>> g = im2uint8(f)
получим результат
g =
0 128
191 255
Из примера видно, что функция im2uint8 обнуляет все отрица-тельные значения входного изображения, ставит число 255 на место величин, больших 1, и умножает остальные значения на 255, после чего округляет результат до ближайшего целого числа.
Преобразование произвольных массивов double в перенормиро-ванные массивы (изображения) double со значениями в интервале [0, 1] выполняется с помощью функции mat2gray, имеющий следую-щий синтаксис:
g = mat2gray(A, [Amin, Amax]) ,
где изображение g имеет значения пикселов в интервале от 0 (черный) до 1 (белый). Это происходит следующим образом:
– все элементы, меньшие или равные Amin, обнуляются;
– все элементы, большие или равные Amax, заменяются на 1,0.
79
Обработка изображений средствами MATLAB/Octave
_____________________________________________________________
– остальные элементы отображаются пропорциональными значениями в интервале [0 1,0].
f =
1 2
3 4
>> g=mat2gray(f, [1, 4])
g =0 0.3333
0.6667 1.0000
При выполнении команды без задания параметров Amin, Amax
g = mat2gray(A),
создается новый массив класса double в котором значения Amin и Amax – это настоящие максимум и минимум массива А.
f1 =
-5 3 2
6 0 2
5 0 4
>> g1=mat2gray(f1)
g1 = 0 0.7273 0.6364
1.0000 0.4545 0.6364
0.9091 0.4545 0.8182.
Видно, что элементы, имеющие минимальное значение (-5) преобра-зованы в минимум изображения класса double – 0, а элементы с мак-симальным значением (6) в максимум изображения класса double – 1.0.
Функция im2double преобразует входной массив классов logical, uint8 или uint16 в класс double с диапазоном [0, 1]. Если входной мас-сив был класса double, то функция im2double оставляет его без изме-нений.
>> f2=uint8([15 3 25; 66 0 200; 51 40 49])
f2 =
15 3 25
66 0 200
51 40 49
>> g2=im2double(f2)
g2 =
0.0588 0.0118 0.0980
0.2588 0 0.7843
0.2000 0.1569 0.1922
80
О. Л. Куляс, К. А. Никитин
_____________________________________________________________
Из примера следует, что входной массив класса uint8 пере-масштабируется делением каждого его элемента на 255. В случае пе-ремасштабирования массива класса uint16 каждый элемент будет де-литься на 65535.
Для получения двоичных изображений из полутоновых исполь-зуется функция im2bw, имеющая синтаксис
g = im2bw(f, T).
Результатом будет двоичное изображение g, полученное из полутоно-вого изображения f, преобразованное по порогу Т. Значения всех эле-ментов f, меньших Т, становятся логическими 0, а все остальные – ло-гическими 1. Значение порога Т должно находиться в интервале [0, 1] независимо от класса входного изображения. Выходной массив авто-матически будет логическим. Если порог не указывать
g = im2bw(f),
то по умолчанию он принимается Т = 0.5.
Если входное изображение было класса uint8, то im2bw сначала делит его элементы на 255, а потом применяет заданный порог или порог, принятый по умолчанию.
Если входной массив был класса uint16, то деление производит-ся на 65 535.
Если входное изображение принадлежало классу double, то im2bw сразу применяет соответствующий порог.
Если входной массив был логическим, то выходной массив бу-дет ему идентичен.
Логический (двоичный) массив можно преобразовать в число-вой с помощью любой из четырех функций:
– im2uint8;
– im2uint16;
– mat2gray;
– im2double.
Основные приемы работы с изображениями
Одной из самых частых операций по работе с изображениями является их считывание из графических файлов с целью загрузки в рабочее пространство MATLAB/Octave. Эта операция реализуется функцией imread:
imread(‘filename’).
Здесь filename – это строка символов, образующих полное имя загру-жаемого файла изображения (включая любое расширение).
81
Обработка изображений средствами MATLAB/Octave
_____________________________________________________________
Для случая, когда графический файл находится в текущей папке Current Folder запущенной системы MATLAB/Octave, достаточно указать только имя файла и его расширение, например:
>> A=imread(‘image.bmp’);
При этом матричной переменной А присваивается значения матрицы, соответствующей изображению, хранящемуся в файле с именем im-age.bmp и она появляется в рабочем пространстве/Области перемен-ных. Точка с запятой в конце командной строки запрещает (подавля-ет) вывод результата. Для данной команды запрещается вывод на эк-ран значений массива A.
В случае, когда изображение расположено не в текущей папке, необходимо в явном виде указать полный путь к нему, например:
>> A=imread(‘D:\Image\image.jpeg’).
Для вывода на дисплей изображения, находящегося в рабочем пространстве, используется функция imshow, которая имеет следую-щий синтаксис:
imshow (A),
где A – матрица выводимого изображения
Команда
imshow(f, [low high])
позволяет вывести изображение в котором все пикселы с интенсивно-стью не больше числа low отображаются черными, а пикселы с интен-сивностью не меньше числа high отображаются белыми. Если значе-ния [low high] не задаются, а квадратные скобки остаются пустыми
imshow(f, [ ]),
то пикселы с минимальной интенсивностью отображаются черными, а пикселы с максимальной интенсивностью – белыми, т.е. вывод в гра-фическое окно производится с максимальным контрастом. Нужно об-ратить внимание на то, что параметры команды imshow не изменяют исходную матрицу изображения, а влияет только на изображение в графическом окне.
Следующая последовательность команд производит загрузку изображения 1.tif из папки Image на диске D в рабочее пространство и выводит графическое окно с изображением на экран:
>> A=imread(‘D:\Image\1.tif’);
>>imshow(A);
Результат выполнения команд показан на рис. 5.2.
82
О. Л. Куляс, К. А. Никитин
_____________________________________________________________
Для того, чтобы вывести несколько изображений в отдельных гра-фических окнах, необходимо эти окна, за исключением первого, сформи-ровать командой figure. Например для вывода трех изображений A, B и C нужно выполнить последовательность команд:
>> imshow (A); title([‘Image A’]);
>> figure, imshow (B); title([‘Image B’]);
>> figure, imshow (C); title([‘Image C’]);
где А – матрица первого изображения, B – матрица второго изображе-ния, С – матрица третьего изображения.
Команда title([‘string1’, ‘string2’, ‘…’]) позволяет добавить над-писи в выводимое окно, которые необходимо указывать в апострофах. Если в надпись нужно ввести числовые значения переменных, то это производится следующей конструкцией:
title([‘string1’, ‘string2’, ‘…’, num2str(имя перем.1),…
num2str(имя прем.2), …]).
Рис. 5.2 – Изображение, выведенное на экран
В некоторых задачах обработки изображений необходимо про-изводить сравнение нескольких изображений. Для этого их удобно располагать рядом в одном графическом окне. Эта задача решается с помощью функции subplot(m,n,p), рассмотренной в лабораторной ра-боте №4.
83
Обработка изображений средствами MATLAB/Octave
_____________________________________________________________
Например для вывода трех изображений целесообразно исполь-зовать следующую конструкцию:
figure; %создать графическое окно
subplot(2, 2, 1);subimage(I_2gray); %вывести в первое подокно
title(‘I 2gray’); %и создать надпись
subplot(2, 2, 2);subimage(I_22gray); %вывести во второе подокно
title(‘I 22gray’); %и создать надпись
subplot(2, 2, 3);subimage(I_2); %вывести в третье
%подокно
title(‘I 2’); %и создать надпись
Результат приведен на рисунке 5.3. Отличительной особенно-стью этого способа является вывод на экран осей пиксельных коорди-нат изображений.
Рис. 5.3 – Три изображения, сформированные в одном графическом окне
Для сохранения изображения из рабочего пространства в файл используется функция imwrite, имеющая формат:
imwrite (A, ‘filename’ ),
84
О. Л. Куляс, К. А. Никитин
_____________________________________________________________
где А – матрица изображения, ‘filename’ – имя сохраняемого файла с указанием расширения, поддерживаемого системой MATLAB/Octave. Если ‘filename’ не содержит информацию о пути к папке, то сохранение производится в текущую папку.
Для того, чтобы получить информацию о размере и размерно-сти изображений, необходимо использовать функцию size (A). Если размерность массива изображения А равна 1, например в случаях по-лутоновых изображений, то функция возвращает размер матрицы изо-бражения А в виде вектора из двух элементов – числа строк и числа столбцов:
>> size (A)
ans =
500 500.
Если анализируемое изображение цветное и состоит из нескольких матриц, то функция возвращает трехэлементный вектор – число строк, число столбцов и число матриц-компонент (страниц):
>>size (I)
ans =
364 394 3.
Для того, чтобы получаемые значения размеров использовать для дальнейших вычислений следует применять функцию size в сле-дующем виде:
>> [M N V] = size (A);
M =
364
N =394
V =
3.
Получить информацию об изображении можно и функцией whos A, которая была рассмотрена выше.
Подробную информацию о файле изображения можно полу-чить используя функцию imfinfо, которая имеет вид
imfinfо (‘filename’),
где filename – это полное имя файла изображения, хранящегося на дис-ке. Например,
>> imfinfо (‘F:\File_Matlab\NewLab\Pic_4_2.tif’)
Информационные поля, которые выводятся на экран функцией imfinfо, можно ввести в так называемые структурные переменные. Эти 85
Обработка изображений средствами MATLAB/Octave
_____________________________________________________________
переменные можно использовать в последующих вычислениях. Беря в качестве примера предыдущее изображение и присваивая имя К струк-турной переменной, можно дать команду
>> К = imfinfo(‘F:\File_Matlab\NewLab\Pic_4_2.tif’);
для сохранения в переменной К всей информации, генерируемой ко-мандой imfinfо. Информация, полученная из функции imfinfо сохраня-ется в полях структурной переменной К, которые отделяются от нее точкой. Например, высота и ширина изображения теперь хранятся в структурных полях К.Height и К.Width, битовая глубина в поле K.BitDepth, а размер файла изображения в поле K.FileSize.
При анализе изображений часто используют графики изменения яркости вдоль выбранной строки или столбца изображения. Часто их называют профилем строки или столбца. Для построения такого про-филя, например для 30 строки изображения f, нужно выделить элемен-ты 30 строки из матрицы изображения и вывести их в графическое окно:
prof = f(30,:); % выделить 30 строку из матрицы f
figure, plot(prof); % построить профиль.
M-функции
В отличии от файлов-сценариев (скриптов), которым невозмож-но передать входные параметры, М-функции имеют входные пара-метры (аргументы) и допускают наличие возвращаемых выходных параметров. Это позволяет оформлять независимые и изолированные фрагменты программы, решающие некоторые фиксированные задачи, в виде М-функций, которые можно неоднократно использовать с по-мощью вызовов. Аналогом М-функций является подпрограмма или процедура, используемая при модульном программировании
М-функции, создаваемые в М-файлах, состоят из компонент:
1) заголовок функции;
2) основной комментарий;
3) дополнительный комментарий (текст справки);
4) тело функции.
М-функция создается по следующим правилам:
– заголовок является первой строкой и имеет следующий вид:
function[выходные_параметры] = f_name(входные_параметры);
– имя функции f_name может быть произвольным, но слово function должно быть обязательно. Если определяемая функция не имеет выходных параметров, то используется одно слово function без квадратных скобок и знака равенства. Пробелы в имени функции не допускаются;
86
О. Л. Куляс, К. А. Никитин
_____________________________________________________________
– основной комментарий это текстовый блок, каждая строка которого начинается с %. Между этим блоком и заголовком функции не должно быть пустых строк;
– дополнительный комментарий – текстовый блок, который размещается сразу после основного. Он служит для отображения ком-ментариев и онлайн справки по данной функции;
– тело функции состоит из выполняемого кода MATLAB/Octave, который совершает действия или вычисления и при-сваивает результаты выходным аргументам;
– функция возвращает свое значение и может использоваться в виде f_name (входные_параметры) в математических выражениях;
– все переменные, имеющиеся в теле М-функции, являются локальными, т. е. действуют только в пределах тела функции;
– М-функция является самостоятельным программным моду-лем, который общается с другими модулями через свои входные и вы-ходные параметры;
– если выходных параметров больше одного, то они указыва-ются в квадратных скобках после слова function;
– набранный в редакторе текст М-функции необходимо сохра-нить в файл, причем имя файла должно совпадать с f_name, указан-ным в заголовке.
Для примера создадим М-функцию, которая загружает изобра-жение из файла и вычисляет некоторые его параметры:
function [f, f1, f2, M, N, V, Imax, Imin]=begin_1(f0)
% функция begin_1 загружает изображение и выводит его в
% графическое окно, преобразует его в полутоновое, вычисляет
% размер, минимальное и максимальное значения яркости
% f0 -файл входного изображения
% возвращаемые переменные:
% M, N, V – размер загруженного изображения
% Imax, Imin – максимальное и минимальное значения яркости
% f -загруженное изображение, f1 -полутоновое изображение,
% f2 -изображение, преобразованное в класс double
%============================================
f=imread (f0); %загрузить изображение
figure,imshow(f); %вывести в окно
title(‘Original’); %подписать
[M,N,V]= size(f); %определить размер изображения
if (V==3) %если изображение цветное (V=3)
87
Обработка изображений средствами MATLAB/Octave
_____________________________________________________________
f1 =rgb2gray(f); %преобразовать в полутоновое и %переименовать в f1,
end %иначе идти далее
if (V~=3) %если изображение полутоновое
f1=f; %(V≠3), переименовать в f1
end
figure,imshow(f1); %вывести в окно и
title([‘Gray ‘,’M= ‘,num2str(M), ‘, N= ‘,num2str(N)]);%подписать
f2=im2double (f1); %преобразовать в класс double
Imax=max(f2(:)); %вычислить максимум яркости
Imin=min(f2(:)); %вычислить минимум яркости
M-функцию можно вызвать из командной строки системы MATLAB/Octave или из других M-файлов, при этом указав все необ-ходимые атрибуты – входные аргументы в круглых скобках, вы-ходные возвращаемые значения в квадратных скобках. Для рас-смотренного примера вызов будет таким:
>>[f, f1, f2, M, N, V, Imax, Imin]=begin_1(‘foto_8_1.tif’).
!!! Запретить вывод в командное окно возвращаемых значе-ний можно, поставив ; (точку с запятой) в конце строки вызова функции.
!!! Если для работы требуются на все выходные переменные, то их можно не указывать в поле возвращаемых значений.
!!! Следует помнить, что все переменные внутри функции являются локальными.
3 Подготовка к работе
3.1. Ознакомиться с теоретическим материалом и рекомендованной литературой.
3.2. Подготовить ответы на контрольные вопросы.
4 Задание на выполнение работы
Организовать ввод данных и вычисления согласно заданиям ниже. Исходные изображения для выполнения работы хранятся в пап-ке Images_5_FZO методических указаний.
Задание 1
1) Загрузить в рабочее пространство MATLAB/Octave изобра-жение 1 из файла, указанного в таблице с вариантами заданий.
88
О. Л. Куляс, К. А. Никитин
_____________________________________________________________
2) Используя функцию whos определить тип и класс загружен-ного изображения. Записать результат.
3) Создать и отладить программу, решающую следующие задачи:
а) загрузить изображение с помощью функции imread;
б) с помощью функции size определить размер изображения в виде вектора [M, N, V];
в) вывести загруженное изображение в графическое окно с по-мощью функции imshow, при этом сформировать пояснительные над-писи: Original, MxN. Для того, чтобы не изменять контраст исходного изображение при выводе на экран следует использовать функцию imshow без параметров;
г) если изображение цветное (состоит из трех компонент), пре-образовать его в полутоновое с помощью функции rgb2gray;
д) определить максимальное Imax и минимальное Imin значения яркостей пикселов изображения;
е) вывести полутоновое изображение в графическое окно с по-мощью функции imshow, при этом сформировать пояснительные над-писи: Gray Image, MxN, Imax=xxx, Imin=xxx;
ж) записать изображение на диск в текущую папку, используя функцию imwrite (f, ‘filemame’), присвоив ему имя zad5_1 и сохранив прежнее расширение.
з) сохранить изображение из графического окна через меню File\Save As, присвоив ему имя zad5_2 и сохранив прежнее расшире-ние.
и) загрузить сохраненные изображения из окна Current Directory/Диспетчера файлов в просмотрщик графических файлов, используя опцию Open Outside MATLAB/Открыть и проанализировать их. Установить и записать отличия.
4) Модернизировать отлаженную программу, оформив решение задач а), б), в), г) и д) в виде М-функции, которая может вызываться из программы и добиться ее работоспособности.
Задание 2
Создать и отладить программу, решающую следующие задачи:
а) загрузить изображение 2 с помощью функции imread;
б) с помощью функции size определить размер изображения в виде вектора [M, N, V];
в) вывести загруженное изображение в графическое окно с по-мощью функции imshow, при этом сформировать пояснительные над-писи: Original, MxN. Для того, чтобы не изменять контраст исходного изображение при выводе на экран следует использовать функцию imshow без параметров;
г) если изображение цветное (состоит из трех компонент), пре-образовать его в полутоновое с помощью функции rgb2gray;
д) определить максимальное Imax и минимальное Imin значения яркостей пикселов изображения;
е) вывести загруженное изображение в графическое окно с по-мощью функции imshow, при этом сформировать пояснительные над-писи: Gray Image, MxN, Imax=xxx, Imin=xxx;
Для решения задач а), б), в) и д) использовать созданную в за-дании 1 М-функцию.
ж) вырезать из исходного изображения фрагмент с размерами, взятыми из таблицы с вариантами заданий;
з) определить размеры получившегося фрагмента в виде вектора [Mf, Nf];
и) определить максимальное Imax и минимальное Imin значения яркостей пикселов в изображении фрагмента;
к) вывести сформированный фрагмент изображения в графиче-ское окно с помощью функции imshow, при этом сформировать пояс-нительные надписи: Fragment, MxN, Imax=xxx, Imin=xxx;
л) построить и вывести в отдельное графическое окно диа-грамму изменения яркости (профиль) для средней строки фрагмента изображения. Снабдить ее надписью ‘Profile Line’;
м) уменьшить размер исходного изображения в указанное в таблице 5.2 число раз прореживанием по строкам и столбцам;
90
О. Л. Куляс, К. А. Никитин
_____________________________________________________________
н) определить размеры уменьшенного изображения в виде век-тора [Mr, Nr];
о) вывести уменьшенное изображение в графическое окно с помощью функции imshow, при этом сформировать пояснительные надписи: Reduced, MxN;
п) вывести четыре изображения, получившиеся в результате выполнения пунктов задания в одно графическое окно размером 2х2, сформированное функцией subplot(2, 2, n). Предусмотреть вывод со-ответствующих поясняющих надписей к каждому выводимому изо-бражению (‘Original’, ‘Fragment’, ‘Profile Line’, ‘Reduced’).
!!!При выполнении пунктов ж), л) и м) следует пользоваться приемами работы с матрицами, рассмотренными в лабора-торной работе №2.
Задание 3
1) Загрузить в рабочее пространство MATLAB изображение 3 из файла, указанного в таблице с вариантами заданий.
2) Используя функцию whos определить тип и класс загружен-ного изображения. Записать результат.
3) Если выяснено, что изображение цветное (состоит из трех компонент), преобразовать его в полутоновое с помощью функции rgb2gray;
4) Вырезать наиболее информативный участок изображения размером 7х7 пикселов и вывести матрицу этого фрагмента в команд-ное окно. Выполнить анализ выведенной матрицы, соотнеся ее с клас-сом исходного изображения.
5) Преобразовать этот фрагмент исходного изображения в классы uint8, double и logical. Выполнить сравнительный анализ пре-образованных матриц фрагментов изображения, сделать выводы.
6) Создать и отладить программу, решающую следующие задачи:
а) загрузить изображение с помощью функции imread. Если изображение цветное (состоит из трех компонент), преобразовать его в полутоновое с помощью функции rgb2gray;
б) вывести загруженное изображение в графическое окно с по-мощью функции imshow, при этом сформировать пояснительные над-писи: ‘Original’. Для того, чтобы не изменять исходное изображение при выводе на экран следует использовать функцию imshow без пара-метров.
в) преобразовать исходное изображение в бинарное по порогу равному среднему значению яркости и вывести его в графическое окно снабдив надписью ‘Binary’;
91
Обработка изображений средствами MATLAB/Octave
_____________________________________________________________
г) вывести два полученных изображения в одно графическое окно, сформированное функцией subplot(1, 2, n). Предусмотреть вы-вод соответствующих поясняющих надписей к каждому выводимому изображению (‘Original’, ‘Binary’).
5 Требования к отчёту
Отчёт должен содержать:
– титульный лист с указанием названия ВУЗа, кафедры, номе-ра и темы лабораторной работы, а также номера зачетной книжки, ва-рианта и ФИО студента, подготовившего отчёт;
– цель выполняемой работы;
– ответы на все контрольные вопросы лабораторной работы;
– задания;
– листинги всех программ с обязательными комментария-ми;
– полученные на каждом этапе работы изображения;
– анализируемые в задании 3 матрицы фрагментов изображений;
– выводы по каждому выполненному заданию.
6 Контрольные вопросы
6.1. Для чего служит пакет расширения Image Processing Toolbox/Image?
6.2. Как можно представить и описать аналоговые монохромное и цветное изображения?
6.3. Какие операции необходимо выполнить, чтобы преобразовать аналоговое изображение в цифровое?
6.4. Как можно представить и описать цифровые монохромное и цветное изображения?
6.5. Что представляет собой система координат цифрового изображе-ния в системе MATLAB/Octave?
6.6. Понятие классов данных в MATLAB/Octave. Классы данных dou-ble, uint8 и logical.
6.7. Типы изображений в MATLAB/Octave. Полутоновые и двоичные изображения.
6.8. Чем вызвана необходимость конвертирования классов данных и типов изображений?
6.9. Как можно определить класс данных и тип изображений?
6.10. Какие функции позволяют выполнит перенормировку при кон-вертировании классов и типов изображений?
6.11. Опишите работу функции im2uint8.
6.12. Опишите работу функции mat2gray.
92
О. Л. Куляс, К. А. Никитин
_____________________________________________________________
6.13. Опишите работу функции im2double.
6.14. Опишите работу функции im2bw.
6.15. С помощью какой команды можно осуществить загрузку изобра-жения? Опишите синтаксис этой команды.
6.16. Как вывести изображение в графическое окно системы, в не-сколько графических окон?
6.17. Как сформировать пояснительную надпись в графическом окне с изображением?
6.18. Каким образом вывести несколько изображений в графическое окно?
6.19. С помощью каких команд можно получить информацию о загру-женном изображении?
6.20. Необходимость использования и основные компоненты М-функций.
6.21. Что представляют собой входные и выходные параметры М-функций?
6.22. Основные правила создания М-функций?
6.23. Как сохраняются и вызываются M-функции?
7 Рекомендуемая литература
1 Matlab и Simulink – сообщество пользователей, материалы, книги, форум [Электронный ресурс] – Режим доступа: http://matlab.exponenta.ru, свободный. – Загл. с экрана.
2 Дьяконов, В. П. MATLAB 6.5 SP1/7/7 SP1 + Simulink 5/6. Ра-бота с изображениями и видеопотоками [Текст] / В. П. Дьяконов. – М.: СОЛОН-Пресс, 2005. – 400 c.
3 Гонсалес, Р. Цифровая обработка изображений в среде MATLAB [Текст] / Р. Гонсалес, Р. Вудс, С. Эддинс. – М.:Техносфера, 2006. – с.28…78.
4 Солонина, А. И. Цифровая обработка сигналов. Моделирова-ние в MATLAB [Текст] / А. И. Солонина, С. М. Арбузов. – СПб.: БХВ-Петербург, 2008. – 816 с.
5 Сайт книги Алексеев Е.Р., Чеснокова О.В. GNU Octave для студентов и преподавателей. –Донецк.:ДонНТУ, Технопарк ДонНТУ УНИТЕХ, 2011. – 332с. [Электронный ресурс] – режим доступа http://gnu-octave.narod.ru/, свободный. – Загл. с экрана.
6 Сайт разработчиков Octave [Электронный ресурс] – режим доступа https://octave.org/doc/v6.4.0/, свободный. –Загл. с экрана
Здравствуйте. Скажите пожалуйста, планирую поступать в магистратуру на факультет Психологии « Психология личности»в РГГУ скажите пожалуйста, есть ли у вас, ответы на вступительные экзамены? так как, планирую, сделать акцент на бюджет. Спасибо.
Арсений, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Дистанционная помощь в защите ВКР
Анастасия, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Здравствуйте. Нужна срочно практическая часть вкр, третья глава. Скину похожие работы, на которые можно ориентироваться
Александр, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
вкр по теме: экологический туризм России : анализ состояния, проблемы и перспективы
Людмила, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Здравствуйте вы защищаете ВКР?
Ольга, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Написать магистерскую ВКР на тему «Совершенствование логистических бизнес-процессов на примере торговой компании». Не менее 100 страниц.
Миша, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Здравствуйте нужна работа Вкр
Лена, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Написать ВКР 3 раздела Тема строительство строительство жилого дома с применением каркасно-монолитных технологий Антиплагиат от 75% ПЗ и чертежи
Владимир, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.