Представьте, что вы наводите камеру на какой-то объект, и камера сообщает вам имя этого объекта. Да, Google Lens на смартфонах Android делает то же самое, используя обработку изображений. Это дает компьютеру возможность обнаруживать и распознавать объекты и предпринимать соответствующие действия. Обработка изображений имеет множество приложений, таких как обнаружение и распознавание лиц, распознавание отпечатков пальцев, дополненная реальность, оптическое распознавание текста, сканирование штрих-кода и многие другие. Существует множество программ для обработки изображений, среди которых MATLAB является наиболее подходящим для начинающих.
MATLAB может выполнять множество операций расширенной обработки изображений, но в этой статье (чтобы не перегружать ее информацией) мы рассмотрим основные операции работы с изображениями в Matlab, такие как преобразование RGB в серый, поворот изображения, двоичное преобразование и т. д. Кроме того, вы можете создавать автоматизированные программы для удаления шума, преобразования изображений, фильтрацию с использованием функций — все это также описано в данной статье.
Также на нашем сайте мы рассматривали взаимодействие MATLAB с платформой, ознакомиться с данными проектами вы можете по следующей ссылке.
В MATLAB, как всегда, есть два способа выполнить любой алгоритм обработки изображений: один — напрямую ввести команду в редакторе/командном окне, а другой — создать графический интерфейс для того же самого. Здесь мы покажем вам оба метода выполнения основных операций обработки изображений в MATLAB.
1. Обработка изображений с использованием окна редактора MATLAB
Теперь напишем код для выполнения некоторых базовых операций обработки изображений в окне редактора. Скопируйте и вставьте приведенный ниже код в окно редактора.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
a = imread('F:\circuit digest\image processing using matlab\camerman.jpg'); subplot(2,3,1); imshow(a); b = rgb2gray(a); subplot(2,3,2); imshow(b); c = im2bw(a); subplot(2,3,3); imshow(c); d = imadjust(b); subplot(2,3,4); imshow(d); e = a; e=rgb2gray(e); subplot(2,3,5); imhist(e); imfinfo('F:\circuit digest\image processing using matlab\beard-man.jpg') [height, width, colour_planes] = size(a) %colormap('spring') |
В переменной ‘a’ мы импортируем изображение с помощью команды imread(‘filename’) , а затем создаем график из строки ‘2’ и столбца ‘3’ с помощью subplot(row, column, position) и отображаем импортированное изображение в позиции ‘1’. Чтобы показать изображение, мы используем команду imshow(‘filename’).
Ниже приведено несколько команд для выполнения базовой обработки загруженного изображения:
- В переменной «b» мы преобразуем изображение RGB в изображение с интенсивностью оттенков серого с помощью команды rgb2gray(‘filename’) и отображаем его на графике в позиции «2».
- В переменной «c» мы преобразуем изображение в двоичное изображение или, можно сказать, в формат «0» (черный) и «1» (белый), используя команду im2bw(‘filename’) и отображая его на графике в позиции «3».
- В переменной «d» мы корректируем или сопоставляем значения интенсивности изображения в оттенках серого с помощью команды imadjust (‘filename’) и отображаем ее на графике в позиции «4».
- В переменной «e» мы строим гистограмму изображения в оттенках серого с помощью команды imhist(‘filename’) и отображаем ее на графике в позиции «5». Для построения гистограммы вам всегда необходимо преобразовать изображение в оттенки серого, и тогда вы сможете увидеть гистограмму этого графического файла.
- Команда Imfinfo(‘filename with location’) используется для отображения информации о графическом файле.
- Команда [height, width, colour_planes] = size(‘filename’) используется для отображения размера и цветовых плоскостей конкретного графического файла.
- colormap(‘spring’) используется для изменения типа цветовой карты графического файла. Здесь в своем коде я установил эту команду как комментарий, но вы можете использовать ее, удалив знак процента. В MATLAB есть много типов цветов, таких как Jet, HSV, Hot, Cool, Summer, Autumn, Winter, Grey, Bone, Copper, Pink, Lines и Spring.
Подобно этому, в MATLAB имеется ряд команд, которые можно использовать для выполнения различных задач. Вы можете ознакомиться с функциями обработки изображений в MATLAB, перейдя по ссылке.
2. Обработка изображений с помощью графического интерфейса MATLAB
Создание графического пользовательского интерфейса MATLAB для обработки изображений
Для создания графического пользовательского интерфейса (Graphical User Interface, GUI) для обработки изображений запустите GUI, введя следующую команду в командном окне .
1 |
guide |
Откроется всплывающее окно, затем выберите новый blank GUI (шаблон графического интерфейса), как показано на изображении ниже.
Теперь нам нужно выбрать количество кнопок (каждая кнопка будет выполнять разные задачи) и одну ось для отображения изображения.
Чтобы изменить размер или форму кнопки Pushbutton или Axes, просто щелкните по ней, и вы сможете перетаскивать углы кнопки. Двойным щелчком по любой из них вы сможете изменить цвет, строку, тег и другие параметры этой конкретной кнопки. После настройки она будет выглядеть так
Вы можете настроить кнопки по своему усмотрению. Теперь, когда вы сохраняете это, в окне редактора MATLAB генерируется код . Отредактируйте сгенерированный код, чтобы задать задачу для разных кнопок. Ниже мы отредактировали код MATLAB.
Код графического интерфейса MATLAB для обработки изображений
Полный код MATLAB для обработки изображений с использованием графического интерфейса MATLAB приведен в конце этого проекта. Кроме того, мы включаем сюда для загрузки файл графического интерфейса (.fig) и файл кода (.m), используя которые вы можете настроить размер кнопок или осей в соответствии с вашими требованиями. Мы отредактировали сгенерированный код, как описано ниже.
В функции «uploadimage» скопируйте и вставьте приведенный ниже код, чтобы вставить файл с ПК. Здесь команда uigetfile(‘image extension type’) используется для импорта изображения в графический интерфейс MATLAB. Прочитайте этот файл с помощью команды imread() , а затем отобразите его с помощью команды imshow() на axes1, используя axes(handles.axes1) . Теперь с помощью команды setappdata() сохраните переменную в графическом интерфейсе, чтобы переменная была доступна из одной части графического интерфейса в другой его части.
1 2 3 4 5 |
a=uigetfile('.jpg') a=imread(a); оси (handles.axes1); imshow(а); setappdata (0,'a',a) |
Теперь в каждой функции вы увидите команду getappdata(), которая используется для извлечения данных, хранящихся с помощью setappdata() в графическом интерфейсе.
Здесь мы объясним восемь наиболее часто используемых функций при обработке изображений.
N п/п | Команда | Название кнопки | Задача, которая должна быть выполнена |
1. | uigetfile() | Загрузить изображение | Нажмите, чтобы импортировать изображение с диска |
2. | rgb2gray() | RGB в серый | Нажмите, чтобы преобразовать изображение RGB в оттенки серого |
3. | im2bw() | Преобразовать в двоичное изображение | Нажмите, чтобы преобразовать изображение в двоичный формат |
4. | — | Перезагрузить | Нажмите, чтобы восстановить исходное изображение |
5. | imhist() | Гистограмма | Нажмите, чтобы увидеть гистограмму изображения |
6. | imcomplement() | Дополнить изображение | Нажмите, чтобы проверить дополнительное изображение |
7. | edge(filename,method) | Обнаружение края | Нажмите, чтобы обнаружить края изображения |
8. | imrotate(filename,angle) | Вращение по часовой стрелке | Нажмите, чтобы повернуть изображение по часовой стрелке. |
9. | imrotate(filename,angle) | Вращение против часовой стрелки | Нажмите, чтобы повернуть изображение против часовой стрелки. |
1. Преобразовать RGB-изображение в оттенки серого
В функции «rgb2gray» скопируйте и вставьте приведенный ниже код, чтобы преобразовать изображение RGB в оттенки серого с помощью команды rgb2gray() .
1 2 3 4 |
a=getappdata(0,'a'); agray=rgb2gray(a); axes(handles.axes1); imshow(agray); |
2. Преобразование в двоичное изображение
В функции «im2bw» скопируйте и вставьте приведенный ниже код, чтобы преобразовать изображение в двоичное изображение, или вы можете сделать это в формате «0» (черный) и «1» (белый), используя команду im2bw() .
1 2 3 4 |
a=getappdata(0,'a'); abw=im2bw(a); axes(handles.axes1); imshow(abw); |
3. Сброс до исходного изображения
В функции ’reset’ скопируйте и вставьте приведенный ниже код, чтобы сбросить отредактированное изображение до исходного.
1 2 3 |
a=getappdata(0,'a'); axes(handles.axes1); imshow(a); |
4. Построение гистограммы изображения
В функции ‘histogram’ скопируйте и вставьте приведенный ниже код, чтобы построить гистограмму изображения в оттенках серого с помощью команды imhist(‘filename’) и отобразить ее на оси 1. Для построения гистограммы вам всегда необходимо преобразовать изображение в оттенки серого, и тогда вы сможете увидеть гистограмму этого графического файла.
1 2 3 4 5 |
a=getappdata(0,'a'); ahist=a; ahist=rgb2gray(ahist); axes(handles.axes1); imhist(ahist); |
5. Преобразовать в дополнительное изображение
В функции «complementimage» скопируйте и вставьте приведенный ниже код, чтобы увидеть дополнение вставленного графического файла с помощью команды imcomplement() .
1 2 3 4 5 |
a=getappdata(0,'a'); acomp=a; acomp=imcomplement(acomp); axes(handles.axes1); imshow(acomp); |
6. Обнаружение краев с использованием метода Кэнни
В функции «edge» скопируйте и вставьте приведенный ниже код, чтобы обнаружить и найти края в изображении в оттенках серого, используя команду Edge(‘filename’,’method’) . В качестве метода вы можете выбрать один из этих трех: Кэнни, Прюитта и монтаж . Мы используем метод Кэнни для обнаружения краев. Кроме того, вы не можете обнаружить край непосредственно из исходного изображения. Сначала вам нужно преобразовать его в оттенки серого, а затем вы сможете обнаружить края.
1 2 3 4 5 6 |
a=getappdata(0,'a'); aedge=a; aedge=rgb2gray(aedge); aedge=edge(aedge,'Canny')' axes(handles.axes1); imshow(aedge); |
7. Повернуть изображение по часовой стрелке
В функции ’clockwise’ скопируйте и вставьте приведенный ниже код, чтобы повернуть изображение по часовой стрелке, используя команду imrotate(filename,’angle’).
1 2 3 4 5 |
a=getappdata(0,'a'); aclock=a; aclock=imrotate(aclock,270); axes(handles.axes1); imshow(aclock); |
8. Поворот изображения против часовой стрелки
В функции ’anticlockwise’ скопируйте и вставьте приведенный ниже код, чтобы повернуть изображение против часовой стрелки, используя команду imrotate(filename,‘angle’).
1 2 3 4 5 |
a=getappdata(0,'a'); aclock=a; aclock=imrotate(aclock,90); axes(handles.axes1); imshow(aclock); |
Запуск кода MATLAB GUI для обработки изображений
Теперь нажмите кнопку ‘RUN’ чтобы запустить отредактированный код в файле .m.
MATLAB может потребоваться несколько секунд для ответа, не нажимайте никаких кнопок графического интерфейса, пока MATLAB не отобразит сообщение о занятости в нижнем левом углу, как показано ниже.
Когда все будет готово, импортируйте изображение с ПК, нажав кнопку ‘Upload Image’ («Загрузить изображение»). Теперь вы сможете конвертировать или поворачивать изображение, нажав соответствующую кнопку. В таблице выше показано, какую задачу мы выполняем при нажатии любой конкретной кнопки:
Результат нажатия каждой кнопки показан на следующем изображении.
Работу каждой кнопки в более наглядном виде вы можете посмотреть в следующем видео.
Вы даже можете выполнять расширенную обработку изображений с помощью набора инструментов обработки изображений, который можно приобрести на официальном сайте MATHWORKS. Некоторые операции расширенного уровня перечислены ниже:
- Геометрические операции;
- Блокирующие операции;
- Линейная фильтрация и проектирование фильтров;
- Преобразования;
- Анализ и улучшение изображений;
- Операции с бинарными изображениями.