Обработка изображений с помощью MATLAB: основные операции
Обработка изображений с помощью MATLAB: основные операции
В этой серии из четырех статей обсуждаются основы, а также расширенные темы обработки изображений с использованием MATLAB. В статьях рассматриваются базовые и расширенные функции набора инструментов обработки изображений MATLAB (IPT) и их влияние на различные изображения. В первой части этой серии дается краткое введение в цифровые изображения и MATLAB, за которым следуют основные операции обработки изображений в MATLAB, включая считывание, отображение и сохранение изображений на диске.
Обработка изображений
Обработка изображений — это метод преобразования изображения в цифровой формат и выполнения над ним операций для получения улучшенного изображения или извлечения из него некоторой полезной информации. Изменения, происходящие в изображениях, обычно выполняются автоматически и основаны на тщательно разработанных алгоритмах.
Обработка изображений – это междисциплинарная область, в которую вносят вклад представители различных отраслей науки, включая математику, физику, оптику и электротехнику. Более того, оно пересекается с другими областями, такими как распознавание образов, машинное обучение, искусственное исследования интеллекта и человеческого зрения. Различные этапы обработки изображения включают импорт изображения с помощью оптического сканера или с цифровой камеры, анализ и обработку изображения (сжатие данных, улучшение и фильтрация изображения), а также создание желаемого выходного изображения.
Необходимость извлекать информацию из изображений и интерпретировать их содержание стала движущим фактором развития обработки изображений. Обработка изображений находит применение во многих отраслях, включая медицину, промышленность, военную промышленность, бытовую электронику и т. д.
В медицине он используется для таких методов диагностической визуализации, как цифровая рентгенография, позитронно-эмиссионная томография (ПЭТ), компьютерная аксиальная томография (КТ), магнитно-резонансная томография (МРТ) и функциональная магнитно-резонансная томография (фМРТ). Промышленные применения включают производственные системы, такие как системы безопасности, контроля качества и автоматизированного управления транспортными средствами.
Сложные алгоритмы обработки изображений используются в различных приложениях: от обнаружения солдат или транспортных средств до наведения ракет, распознавания и разведки объектов. Биометрические методы, в том числе снятие отпечатков пальцев, распознавание лица, радужной оболочки глаза и руки, широко используются в правоохранительных органах и службах безопасности.
Цифровые фотоаппараты и видеокамеры, телевизоры высокой четкости, мониторы, DVD-плееры, персональные видеомагнитофоны и сотовые телефоны — популярные предметы бытовой электроники, использующие обработку изображений.
МАТЛАБ
MATLAB, аббревиатура от «матричная лаборатория», представляет собой платформу для решения математических и научных задач. Это собственный язык программирования, разработанный MathWorks, позволяющий манипулировать матрицами, функциями и построением графиков данных, реализовывать алгоритмы, создавать пользовательский интерфейс и взаимодействовать с программами, написанными на таких языках программирования, как C, C++, Java и т. д.
В MATLAB IPT представляет собой набор функций, расширяющих возможности среды числовых вычислений MATLAB. Он предоставляет полный набор стандартных алгоритмов и приложений для обработки изображений, анализа, визуализации и разработки алгоритмов.
Его можно использовать для сегментации изображений, улучшения изображений, уменьшения шума, геометрических преобразований, регистрации изображений и операций обработки трехмерных изображений. Многие функции IPT поддерживают генерацию кода C/C++ для создания прототипов настольных компьютеров и развертывания встроенных систем машинного зрения.
Что такое цифровое изображение?
Цифровое изображение можно определить как двумерную функцию f(x,y), где «x» и «y» — пространственные координаты, а амплитуда «f» в любой паре координат называется интенсивностью изображения в этой точке. Когда значения «x», «y» и амплитуды «f» являются конечными дискретными величинами, изображение называется цифровым.
Оцифровка значений координат называется «выборкой», while оцифровка значений амплитуд называется «квантованием». Результатом выборки и квантования является матрица действительных чисел.
Оцифрованное изображение представляется как:
Каждый элемент массива называется пикселем или элементом изображения.
Основные команды обработки изображений в MATLAB
В MATLAB цифровое изображение представляется как:
В этом представлении можно заметить сдвиг в исходной точке.
Чтение изображений
Изображения считываются в среде MATLAB с использованием функции imread. Синтаксис imread:
imread('имя файла');
где «имя файла» — это строка, содержащая полное имя изображения, включая его расширение.
Обратите внимание, что если в «имя файла» не указана информация о пути, «imread» считывает файл из текущего каталога. Если необходимо прочитать изображение из другого каталога, необходимо указать путь к нему.
Точка с запятой (;) в конце инструкции используется для подавления вывода. Если он не включен, MATLAB отображает на экране результат операции, указанной в этой строке.
’>>’ указывает начало командной строки, как она появляется в командном окне MATLAB.
Рис. 1: Изображение пингвинов в оттенках серогоРис. 2: RGB-изображение пингвинов
На рисунках 1 и 2 показаны изображения пингвинов в оттенках серого и RGB соответственно. Эти изображения можно загрузить с веб-сайта EFY и сохранить в текущем рабочем каталоге.
Функции imread, imshow и imwrite в MATLAB используются для чтения изображений в среде MATLAB, отображения их на рабочем столе MATLAB и записи их в текущий каталог соответственно
В case изображений в оттенках серого результирующая матрица оператора imread содержит 256×256 или 65 536 элементов. Первый оператор берет значения серого всех пикселей изображения в оттенках серого и помещает их в матрицу F (256×256 элементов), которая теперь является переменной MATLAB, над которой можно выполнять различные матричные операции.
В case изображений RGB значения пикселей теперь состоят из списка из трех значений, задающих красные, зеленые и синие компоненты цвета данного пикселя. Матрица «G» представляет собой трехмерную матрицу размером 256х256х3. Если точка с запятой отсутствует, результат команды отображается на экране.
Вкратце, функция imread считывает значения пикселей из файла изображения и возвращает матрицу всех значений пикселей.
Чтобы получить размер 2D-изображения, вы можете написать команду:
[M,N] = размер(f)
Этот синтаксис возвращает количество строк (M) и столбцов (N) в изображении.
Дополнительную информацию о массиве можно найти с помощью команды whos.
«whos f» указывает имя, размер, байты, класс и атрибуты массива «f».
В качестве примера, вопрос «чья F» в нашем case дает:
Имя
Размер
Байт
Атрибуты класса
F
768×1024×3
2359296
uint8
Выражение «чей G» дает:
Имя
Размер
Байт
Атрибуты класса
G
768×1024
786432
uint8
Отображение изображения
Изображения отображаются на рабочем столе MATLAB с помощью функции imshow, имеющей базовый синтаксис:
imshow(f)
где «f» — массив изображений типа данных «uint8» или double. Тип данных uint8 ограничивает целые значения от 0 до 255.
Следует помнить, что для матрицы типа double функция imshow ожидает, что значения будут находиться в диапазоне от 0 до 1, где 0 отображается черным, а 1 — белым. Любое значение от 0 до 1 отображается в оттенках серого. Любое значение больше 1 отображается белым цветом, а значение меньше нуля — черным. Чтобы получить значения в этом диапазоне, можно использовать коэффициент деления. Чем больше коэффициент деления, тем темнее будет изображение.
В качестве примера: if вы даете команду imshow(G), изображение, показанное на рабочем столе, представлено на рис. 3. «imshow(F)» отображает изображение, показанное на рис. 4. «imshow(f, [low high])» отображает черным все значения, меньшие или равные «низкому», и белым все значения, равные или большие, чем «высокий». Значения между ними отображаются как промежуточные значения интенсивности.
Рис. 3: Изображение получено с помощью команды imshow(G)Рис. 4: Изображение, полученное с помощью команды imshow(F)
'imshow(f, [])' устанавливает переменную low в минимальное значение массива 'f' и high в максимальное значение. Это помогает улучшить контрастность изображений с низким динамическим диапазоном.
Инструмент «Изображение» в наборе инструментов обработки изображений обеспечивает более интерактивную среду для просмотра и навигации по изображениям, отображения подробной информации о значениях пикселей, измерения расстояний и других полезных операций. Чтобы запустить инструмент изображения, используйте функцию imtool. Следующие операторы считывают изображение Penguins_grey.jpg, сохраненное на рабочем столе, а затем отображают его с помощью imtool:
>>B = imread(Penguins_grey.jpg); >>imtool(B)
Рис. 5 показано окно, которое появляется при использовании инструмента изображения. Текст статуса в нижней части главного окна показывает расположение столбца/строки и значение пикселя, находящегося под курсором мыши.
Рис. 5: Окно, которое появляется при использовании инструмента изображения
Инструмент «Измерить расстояние» на вкладке «Инструменты» используется для отображения расстояния между двумя выбранными точками. На рис. 6 показано использование этого инструмента для измерения расстояний между клювами разных пингвинов.
Рис. 6. Инструмент «Измерить расстояние» на вкладке «Инструменты» используется для измерения расстояний между клювами разных пингвинов
Инструмент «Обзор» на вкладке «Инструменты» отображает все изображение в виде миниатюр. Инструмент «Пиксельная область» показывает отдельные пиксели из небольшой квадратной области в правом верхнем углу, увеличенные настолько, чтобы можно было увидеть фактические значения пикселей. На рис. 7 показан снимок.
Рис. 7: Инструмент «Обзор» показывает все изображение в виде миниатюр. Инструмент «Пиксельная область» показывает отдельные пиксели из небольшой квадратной области в правом верхнем углу, увеличенные настолько, чтобы можно было увидеть фактические значения пикселей
На одном рисунке можно отобразить несколько изображений с помощью функции subplot. Эта функция имеет три параметра в скобках, где первые два параметра указывают количество строк и столбцов, на которые нужно разделить фигуру. Третий параметр указывает, какое подразделение использовать. Например, subplot(3,2,3) сообщает MATLAB разделить фигуру на три строки и два столбца и установить третью ячейку как активную. Чтобы отобразить изображения Penguins_RGB.jpg и Penguins_grey.jpg вместе в одном рисунке, необходимо дать следующие команды:
Цифра, которая появляется на экране после третьей команды, показана на рис. 8.
Рис. 8. Изображения в оттенках серого и RGB показаны вместе
Написание изображений
Изображения записываются в текущий каталог с помощью функции imwrite, которая имеет следующий синтаксис:
imwrite(f, 'имя файла');
Эта команда записывает данные изображения «f» в файл, указанный «имя файла» в вашей текущей папке. Функция imwrite поддерживает большинство популярных форматов графических файлов, включая GIF, HDF, JPEG или JPG, PBM, BMP, PGM, PNG, PNM, PPM, TIFF и так далее.
В следующем примере массив значений оттенков серого размером 100×100 записывается в PNG-файл с именем random.png в текущей папке:
>> F = rand(100); >>imwrite(F, ‘random.png’)
Когда вы открываете папку, в которой работаете, создается файл изображения с именем «random.png».
Для изображений JPEG применим следующий синтаксис imwrite:
imwrite(f, «имя_файла.jpg», «качество», q)
где «q» — целое число от 0 до 100.
Его можно использовать для уменьшения размера изображения. Параметр качества используется как компромисс между субъективным качеством конечного изображения и размером файла.
Теперь вы можете прочитать изображение Penguins_grey.jpg, сохраненное в текущей рабочей папке, и сохранить его в формате JPG с тремя различными параметрами качества: 75 (default), 10 (низкое качество и маленький размер) и 90 (высокое качество и большой размер):
F = imread('Penguins_grey.jpg'); imwrite(F,’Penguins_grey_75. jpg’,’quality’,75); imwrite(F,’Penguins_grey_10. jpg’,’quality’,10); imwrite(F,’Penguins_grey_90. jpg’,’quality’,90);
На рисунках с 9 по 11 показаны изображения для добротности 75, 10 и 90 соответственно. Вы заметите, что изображение низкого качества имеет меньший размер, чем изображение более высокого качества.
Рис. 9: Изображение с добротностью 75
Синтаксис imwrite, применимый к изображениям TIFF, имеет следующий формат:
Информацию о файле, включая имя файла, данные, размер, формат, высоту и ширину, можно получить с помощью команды:
imfinfo’filename’
В качестве примера команда imfinfo('Penguins_grey.jpg') предоставляет следующую информацию:
ans= Имя файла: [1×50 символов] FileModDate: '02 августа 2016 г. 09:24:12' Размер файла: 100978 Формат: «jpg». FormatVersion: ” Ширина: 1024 Рост: 768 BitDepth: 8 Тип цвета: «оттенки серого» FormatSignature: ” Число выборок: 1 Метод кодирования: «Хаффман» CodingProcess: «Последовательный» Комментарий: {}
Информационные поля, отображаемые с помощью imfinfo, можно записать в структурную переменную, которую можно использовать для последующих вычислений.
Рис. 10: Изображение с добротностью 10Рис. 11: Изображение с добротностью 90
В следующем примере вся информация сохраняется в переменной «K»:
K = imfinfo('Penguins_grey.jpg')
Информация, сгенерированная «imfinfo», добавляется к структурной переменной посредством полей, отделенных от «K» точкой. Например, высота и ширина изображения хранятся в полях структуры K.height и K.weight.
Эта статья была впервые опубликована 24 января 2018 г. и обновлена 14 марта 2019 г.
Все ссылки на книги и журналы, представлены на этом сайте, исключительно для ознакомления, авторские права на эти публикации принадлежат авторам книг и издательствам журналов!
Подробно тут! Жалоба