Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Применение MATLAB для решения аналитических задач моделирования. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
Разработка пользовательского интерфейса
121
Пункт меню с сочетаниями клавиш и обратным вызовом
Добавьте пункт меню с сочетаниями клавиш в строку меню и опре-
делите обратный вызов, который выполняется при выборе пункта меню.
Сначала создайте файл программы с именем importmenu.m. Внутри
файла программы:
• Создайте фигуру.
• Добавьте меню под названием «Импорт». Создайте мнемоническое
сочетание клавиш для меню, указав «& Import» в качестве текстовой метки.
• Создайте пункт меню и укажите мнемонические сочетания кла-
виш и сочетания клавиш.
Определите обратный вызов MenuSelectedFcn, который выполняет-
ся, когда пользователь щелкает элемент меню или использует мнемониче­ские сочетания клавиш или сочетания клавиш.
Вы можете взаимодействовать с меню и пунктом меню с помощью
клавиатуры следующими способами:
Выберите меню «Импорт», нажав Alt+I.
• Выберите пункт меню «Текстовый файл» и перезвоните, нажав
Alt+I+T.
• Выберите пункт меню «Текстовый файл» и выполните обратный
вызов с помощью акселератора Ctrl+T.
При выборе пункта меню «Текстовый файл» открывается диалого-
вое окно «Выбрать файл для открытия» с полем расширения, отфильтро­ванным для текстовых файлов.
При выборе пункта меню «Текстовый файл» открывается диалого-
вое окно «Выбрать файл для открытия» с полем расширения, отфильтро­ванным для текстовых файлов.
При работе над проектом, связанным с обработкой видео, мы ча­сто сталкиваемся с созданием пользовательского интерфейса. Это может быть необходимо для визуализации и/или демонстрации влияния наших алгоритмов на входной видеопоток. Этот пример иллюстрирует, как со­здать окно фигуры с двумя осями для отображения двух видеопотоков. Он также показывает, как настраивать кнопки и соответствующие им обратные вызовы.
Пример написан как функция с основным телом вверху и вспомо­гательными подпрограммами в виде вложенных функций.
Применение Matlab для решения аналитических задач моделирования
122
function VideoInCustomGUIExample() Инициализируйте программу для чтения видео. videoSrc = vision.VideoFileReader( 'vipmen.avi' , 'ImageColorSpace' ,
'Intensity' );
Создайте окно фигуры и две оси для отображения входного видео и
обработанного видео (рис. 53).
Рис. 53. Интерфейс для видео
Рис. 54. Интерфейс для видео
[hFig, hAxes] = createFigureAndAxes();
Разработка пользовательского интерфейса
123
Добавьте кнопки для управления воспроизведением видео (рис. 54).
insertButtons(hFig, hAxes, videoSrc);
Взаимодействие с новым пользовательским интерфейсом
Теперь, когда графический интерфейс создан, мы можем нажать кнопку воспроизведения, чтобы запустить основной цикл обработки ви­део, определенный в функции getAndProcessFrame ниже.
% Инициализировать отображение по первому кадру видео
frame = getAndProcessFrame(videoSrc, 0);
% Отображение входного видеокадра на оси
showFrameOnAxis(hAxes.axis1, frame);
showFrameOnAxis(hAxes.axis2, zeros(size(frame)+60,'uint8'));
Обратите внимание, что каждый видеокадр центрирован по оси. Если размер оси больше размера кадра, границы видеокадра заполняются фоновым цветом. Если размер оси меньше размера кадра, добавляются полосы прокрутки.
Создание фигур, осей, заголовков
Создайте окно фигуры и две оси с заголовками для отображения двух видео.
function [hFig, hAxes] = createFigureAndAxes()
% Закрыть окно, открытое последним запуском
figTag = 'CVST_VideoOnAxis_9804532';
close(findobj('tag',figTag));
% Создать новое окно
hFig = figure('numbertitle', 'off', ...
'name', 'Video In Custom GUI', ...
'menubar','none', ...
'toolbar','none', ...
'resize', 'on', ...
'tag',figTag, ...
'renderer','painters', ...
'position',[680 678 480 240],...
'HandleVisibility','callback'); % скрыть дескриптор, чтобы предотвратить непреднамеренные изменения нашего пользовательского UI
Применение Matlab для решения аналитических задач моделирования
124
% Создать оси и заголовок hAxes.axis1 = createPanelAxisTitle(hFig,[0.1 0.2 0.36
0.6],'Original Video'); % [X Y W H] hAxes.axis2 = createPanelAxisTitle(hFig,[0.5 0.2 0.36
0.6],'Rotated Video'); end
Создание осей и заголовка
Ось создается на объекте-контейнере uipanel. Это дает вам больше
контроля над компоновкой графического интерфейса. Название видео создано с помощью uicontrol.
function hAxis = createPanelAxisTitle(hFig, pos, axisTitle) % Create panel hPanel = uipanel('parent',hFig,'Position',pos,'Units','Normalized'); % Create axis hAxis = axes('position',[0 0 1 1],'Parent',hPanel); hAxis.XTick = []; hAxis.YTick = []; hAxis.XColor = [1 1 1]; hAxis.YColor = [1 1 1]; % Установите заголовок видео с помощью uicontrol. uicontrol
используется для того, чтобы текст можно было расположить в контексте фигуры, а не оси.
titlePos = [pos(1)+0.02 pos(2)+pos(3)+0.3 0.3 0.07]; uicontrol('style','text',... 'String', axisTitle,... 'Units','Normalized',... 'Parent',hFig,'Position', titlePos,... 'BackgroundColor',hFig.Color); end
Вставка кнопки
Вставьте кнопки для воспроизведения, приостановки видео. function insertButtons(hFig,hAxes,videoSrc)
% Добавить кнопки для Start/Pause/Continue uicontrol(hFig,'unit','pixel','style','pushbutton','string','Start',... 'position',[10 10 75 25], 'tag','PBButton123','callback',... {@playCallback,videoSrc,hAxes});
Разработка пользовательского интерфейса
125
% Добавить кнопку для Exit uicontrol(hFig,'unit','pixel','style','pushbutton','string','Exit',... 'position',[100 10 50 25],'callback', ... {@exitCallback,videoSrc,hFig}); end
Обратный вызов кнопки воспроизведения
Эта функция обратного вызова поворачивает входной видеокадр и отображает исходный входной видеокадр и повернутый кадр на осях. Функ­ция showFrameOnAxis отвечает за отображение видеокадра по заданной пользователем оси. Эта функция определена в файле showFrameOnAxis.m.
function playCallback(hObject,~,videoSrc,hAxes)
try
% Check the status of play button
isTextStart = strcmp(hObject.String,'Start');
isTextCont = strcmp(hObject.String,'Continue');
if isTextStart
% Two cases: (1) starting first time, or (2) restarting
% Start from first frame
if isDone(videoSrc)
reset(videoSrc);
end
end
if (isTextStart || isTextCont)
hObject.String = 'Pause';
else
hObject.String = 'Continue';
end
% Поверните входной видеокадр и отобразите исходный и повернутый кадр или окно
angle = 0;
while strcmp(hObject.String, 'Pause') && ~isDone(videoSrc)
% Получить входной видеокадр и повернутый кадр
[frame,rotatedImg,angle] = getAndProcess­Frame(videoSrc,angle);
% Display input video frame on axis
showFrameOnAxis(hAxes.axis1, frame);
% Отображение повернутого видеокадра на оси
showFrameOnAxis(hAxes.axis2, rotatedImg);
Применение Matlab для решения аналитических задач моделирования
126
end % Когда видео достигает конца файла, отобразите «Старт»
на кнопке
if isDone(videoSrc) hObject.String = 'Start'; end catch ME % Повторно выдать сообщение об ошибке, если оно не свя-
зано с недопустимым дескриптором
if ~strcmp(ME.identifier, 'MATLAB:class:InvalidHandle') rethrow(ME); end end end
Алгоритм обработки видео
Эта функция определяет основной алгоритм, который вызывается
при нажатии кнопки воспроизведения.
function [frame,rotatedImg,angle] = getAndProcess-
Frame(videoSrc,angle)
% Чтение входного видеокадра frame = step(videoSrc); % Поверните входной видеокадр paddedFrame = padarray(frame, [30 30], 0, 'both'); rotatedImg = imrotate(paddedFrame, angle, 'bilinear', 'crop'); angle = angle + 1; end
Обратный вызов кнопки выхода
Эта функция обратного вызова освобождает системные объекты и
закрывает окно рисунка.
function exitCallback(~,~,videoSrc,hFig)
% Close the video file release(videoSrc); % Close the figure window close(hFig);
end
Разработка пользовательского интерфейса
127
ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ
Создайте проект с веб-интерфейсом и базой данных не менее, чем из 20 записей, для решения прикладной задачи в соответствии с вариан­том по списку (табл. 41). Создайте для проекта справочный m-файл с не­обходимой информацией об использованных функциях, алгоритмах, надстройках. Сохраните файл в формате HTML или Word на выбор.
Таблица 41
Варианты индивидуальных заданий
№
варианта
Задание
1
Задача нахождения кратчайшего пути
2
Применение графов в задачах управления
3
Транспортная проблема
4
Моделирование системы образования
5
Применение графов в задачах планирования производства
6
Моделирование системы транспорта
7
Полином Жегалкина
8
Построение регрессионных моделей
9
Обработка звуковых сигналов
10
Решение системы линейных уравнений
11
Обработка видеопотока
12
Построение матрицы достижимости
13
Детерминированные и ограниченно детерминированные функции
14
Задача коммивояжера
15
Логика предикатов с одной переменной
16
Нахождение корней полиномов
17
Экстремум функции двух переменных
18
Интеллектуальный анализ текста в формате HTML
19
Алгоритм Форда-Фалкерсона
20
Алгоритм расчёта вещественных корней полиномов
21
Гамильтоновы циклы
22
Интеллектуальный анализ текста в формате PDF
23
Проблема оптимизации в задачах управления
24
История семи мостов Кёнигсберга
25
Алгоритм Дейкстры
26
Экстремум функции одной переменной
27
Минимизация логических функций
Применение Matlab для решения аналитических задач моделирования
128
ЗАКЛЮЧЕНИЕ
В настоящее время матрицы применяются во многих областях по­мимо классической математики. Квантовая механика, математическое моделирование, анализ состояния экономических систем, а также многие другие сферы сейчас успешно поддаются автоматизации с применением инженерных программ.
Настоящее учебное пособие содержит не только теоретический ма­териал, но и задания для практической работы и самоконтроля. Несмотря на доступность синтаксиса среды MATLAB, важен комплексный подход к освоению материала. Авторы надеются, что настоящее учебное пособие даст читателю полезные знания, навыки и умения в области автоматиза­ции математических вычислений.
Инструментарий MATLAB базируется на использовании матриц как основы решения уравнений состояния динамических систем и объек­тов. Данное учебное пособие служит для знакомства как с языком про­граммирования, так и с пакетом прикладных программ для математиче­ского моделирования, включая среду Simulink для работы с динамиче­скими объектами и процессами.
Разработка пользовательского интерфейса
129
СПИСОК ЛИТЕРАТУРЫ
1. Российское хемометрическое общество. – URL: https://www. chemo-
metrics.ru/ru/
2. Уроки по программированию, DevOps и другим IT-технологиям. –
URL: https://coderlessons.com/
3. Вопросы. – URL: https://coderoad.ru/
4. Практические примеры для программирования. – URL: https:// code-
town.ru/
5. Обзор программ для символьной математики. – URL: https:// com-
press.ru/article.aspx?id=16152
6. Proceedings of the ACM on Programming Languages. – URL: https://
dl.acm.org/journal/pacmpl
7. База данных расширений файлов. – URL: https://fileext.info/
8. Сообщество Экспонента. – URL: https://hub.exponenta.ru/
9. Блог. – URL: http://koldunov.ru/
10. Официальный сайт Matlab. – URL: https://matlab.mathworks.com/
11. Высшая математика – просто и доступно. – URL: http://mathprofi.ru/
12. History of MATLAB Published by the ACM. – URL: https:// medi-
um.com/mathworks/history-of-matlab-published-by-the-acm­6582dc5268cb
13. Образовательный математический сайт. – URL: http://old. exponen-
ta.ru/soft/Matlab/
14. Линейная аппроксимация. – URL: https://prog-cpp.ru/mnk/
15. База знаний. – URL: http://radiomaster.ru/matlab/
16. Сайт кафедры ФТТ ПетрГУ. – URL:http://solidstate.karelia.ru/
17. Рабочий стол (desktop) системы MATLAB. – URL: https:// studo-
pedya.ru/1-38879.html
18. Text Mining with R. – URL: https://www.tidytextmining.com/
19. Блог поставщика услуг по разработке ПО – URL: https://www. wave-
access.ru/blog/
20. Белошапкин, В. В. Лекции по программированию [Текст] / В. В. Бе-
лошапкин Часть 2. Язык программирования Matlab, 2003.
21. Михайлов Е. MatLab. Руководство для начинающих, 2006. Евгений
Михайлов, Алексей Померанцев. Российское хемометрическое об­щество.
Список литературы
130
22. Коткин, Г. Л., Черкасский, В. С. Компьютерное моделирование фи-
зических процессов с использованием MATLAB: [Текст]: учеб. посо­бие / Г. Л. Коткин, В. С. Черкасский. – Новосибирск: Новосиб. ун-т.,
2001. 173 с.
23. Наместников, С. М. Основы программирования в MatLab. [Текст] /
С. М. Наместников // Сборник лекций: УлГТУ. – Ульяновск, 2011. – 55 с.
24. Основы программирования в среде компьютерных вычислений
MATLAB: метод. указания. Самар. гос. аэрокосм. ун-т.; сост. А. А. Федотов. – Самара, 2012. – 16 с.
25. Пустовалова, О. Г. Пакеты компьютерной алгебры. – URL: http://
edu.mmcs.sfedu.ru/course/view.php?id=310
26. Getting Started with MATLAB: в пер. с англ. Конюшенко В. В. Офи-
циальное руководство по Matlab.
27. Сайт Витебского государственного колледжа электротехники. –
URL: http://vgpl5.by/
28. Решение математических задач в системе компьютерной математики
в пакете Matlab. – URL: https://sites.google.com/site/vpaketematlab/
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]