Лабораторная работа №3, страница 3

PDF-файл Лабораторная работа №3, страница 3 Системы распознавания образов (84577): Лабораторная работа - 10 семестр (2 семестр магистратуры)Лабораторная работа №3: Системы распознавания образов - PDF, страница 3 (84577) - СтудИзба2021-01-16СтудИзба

Описание файла

PDF-файл из архива "Лабораторная работа №3", который расположен в категории "". Всё это находится в предмете "системы распознавания образов" из 10 семестр (2 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 3 страницы из PDF

Постарайтесь написать свой код и разобраться вособенностях используемых функций. Код приведен только для справки.РезультатыЧасть 2. Поиск прямых с помощью преобразования ХафаСоздайте новый скрипт и скопируйте в него загрузку изображения пятиугольника и детекторграниц. Это наша отправная точка.Зададим пространство поиска в виде матрицы H размером 1000х1000.KMAX=1000;BMAX=1000;H=zeros(KMAX,BMAX);Зададим также диапазоны изменения параметров прямой на изображении:kmax=5;bmax=1000;Это необходимо, поскольку параметры прямых на изображении могут изменяться в диапазонеплюс-минус бесконечности, а нам надо задать конечный диапазон, содержащий практическизначимые прямые.Для реализации преобразования Хафа нам потребуется преобразовывать параметры прямойk,b в индексы KI,BI матрицы H и обратно.

Для этого можно воспользоваться формулами пересчета:KI=round( (k+kmax)*(KMAX-1)/(2kmax)+1);BI=round( (b+bmax)*(BMAX-1) /(2bmax)+1);k=(KI-1)*(2kmax)/(KMAX-1) – kmax;b=(BI-1)*(2bmax)/(BMAX-1) – bmax.Множители (KMAX-1)/(2kmax) и т.д. лучше просчитать заранее.Теперь все готово для реализации поиска линий.Реализуйте следующий алгоритм:-Для каждой точки A, которая является точкой границы:-Перебираем все возможные индексы KI от 1 до KMAX,-Для KI вычисляем соответствующее k,-Для k вычисляем b=-k*x+y;-Для b вычисляем индекс BI,-Если индекс BI попадает в матрицу H,то увеличиваем элемент H(KI,BI) на единицу.Выведите матрицу H на экран в виде изображения.Если все сделано правильно, на экране увидим четыре отчетливых отклика – «бабочки».(Если не получилось – в первую очередь проверьте правильность индексации точекизображения: должно быть A(y,x) ).Отрисуем найденные линии.Найдите положение (KI*,BI*) наибольшего отклика.Пересчитайте индексы (KI*,BI*) в параметры (k*,b*) прямой на изображении.Далее будем перебирать все возможные x, и для каждого из них рассчитывать y=round(k*x+b).Если пара (x,y) попадает на изображение A, то рисуем ее в виде черной точки: A(x,y)=0.Отобразите найденную прямую и убедитесь, что прямая прошла точно через одну из сторонпятиугольника.Мы получили только одну линию.

Как найти остальные? Самый простой способ – удалитьмаксимум из пространства поиска и повторить поиск (на практике так делать не нужно! Можно,например, разбивать пространство на блоки, искать максимумы в каждом из блоков и сортировать повеличине).Обратите внимание, что максимум занимает несколько клеток. Поэтому удалить одну точкумаксимума недостаточно, нужно удалить целую область.Удалим область максимума и повторим поиск и отрисовку прямой четыре раза.

В результатеполучится пятиугольник с четырьмя найденными линиями.РезультатыЧасть 3. Поиск прямых в нормальной формеВ предыдущей части мы нашли только четыре прямых из пяти. Куда пропала пятая прямая?Дело в том, что стандартная форма прямой y=kx+b не подходит для описания вертикальных прямых:для них k убегает в бесконечность, а b не определено. Более того, если прямая близка к вертикальной,параметры k и b становятся слишком большими и попросту не попадают в наше пространство H.Как выйти из данной ситуации? Можно, конечно, повернуть изображение на 90 градусов иповторить поиск, однако по ряду причин это не самый лучший путь. Мы пойдем другим путем.Запишем уравнение прямой в нормальной форме: =x cos  + y sin .Здесь  – это длина нормали к прямой, а  – ее угол наклона.Тогда в дуальном пространстве будем получать не прямые, а синусоиды, и будем искать ихточки пересечения.Давайте реализуем этот метод.Создайте новый скрипт, скопируйте загрузку изображения и поиск границ.Зададим новое дуальное пространство.

По координате  оно будет иметь 360 отсчетов, поодному на градус, а по оси  размер равен диагонали изображения. Обратите внимание, что здесь насбудут интересовать только неотрицательные значения .[h,w]=size(A);RMAX=round(sqrt(w^2+h^2))+1;FMAX=360;H=zeros(RMAX,FMAX);Теперь реализуем сам алгоритм:-Для каждой точки A, которая является точкой границы:-Перебираем углы  от 1 до 360,-Для  вычисляем =x cos  + y sin ,-Преобразуем  в целочисленный индекс R=round()+1;-Если индекс R попадает в матрицу H,то увеличиваем элемент H(R, ) на единицу.Выведите матрицу H на экран в виде изображения.Если все сделано правильно, на экране увидим пучки синусоид, образующие пять отчетливыхоткликов в форме бабочек.Отрисуем найденные линии.Найдите положение (R*,F*) наибольшего отклика.Пересчитайте индекс R в параметр , вычитая единицу.Далее будем перебирать все возможные x, и для каждого из них рассчитывать y.

В соответствиис нормальной формой, y=(–x cos )/sin .Если пара (x,y) попадает на изображение A, то рисуем ее в виде черной точки: A(x,y)=0.Отобразите найденную прямую и убедитесь, что прямая прошла точно через одну из сторонпятиугольника.Чтобы найти остальные линии, удалим область максимума и повторим поиск и отрисовкупрямой пять раз. В результате получится пятиугольник со всеми линиями.Обратите внимание, что вертикальные линии получились очень тонкими.

Дело в том, что дляних значение  мало, и небольшому шагу по x соответствует большой шаг по y. Что же делать?Ничего страшного. Для отрисовки вертикальных нужно перебирать не х, а y. Добавьте отрисовкувертикальных линий.РезультатыЧасть 4. Поиск отрезковВ практических задачах нас будут интересовать не только и не столько прямые, сколькоотрезки.

Для поиска отрезков нам, помимо параметров прямой, потребуется найти также начало иконец отрезка. К счастью, преобразование Хафа позволяет это сделать достаточно просто.Создайте новый скрипт, и скопируйте в него содержимое предыдущего скрипта.Расширим пространство поиска, добавив в него плоскости для накопления максимальной иминимальной координаты:Xmin=zeros(RMAX,FMAX);Ymin=zeros(RMAX,FMAX);Xmax=zeros(RMAX,FMAX);Ymax=zeros(RMAX,FMAX);Теперь будем накапливать не только голоса H, отданные за каждую прямую, но также икрайние точки прямых.Скорректируем теперь цикл преобразования Хафа.

После того, как мы увеличили счетчикH(R,), нужно дополнительно проверить – не является ли текущая точка максимальной илиминимальной по x или по y. Тогда по окончании цикла у нас будет информация не только о количестветочек в каждой прямой, но также начальная и конечная точка на прямой, то есть отрезок.Внесите в код эти изменения.Теперь можно отобразить отрезки.

Сделать это достаточно просто: теперь координата x(или y)в цикле отрисовки должна меняться не от 1 до ширины (высоты), а от минимальной координаты домаксимальной.Сделайте эти исправления, запустите код.Куда исчезли наши линии?!Мы нарисовали черные отрезки поверх черного пятиугольника, и их теперь не видно.Чтобы исправить ситуацию, создадим новое чистое изображение B того же размера, что иисходное, и будем рисовать на нем.Если все сделано правильно, мы увидим пять отрезков, образующих пятиугольник (отрезкимогут не доходить до конца пятиугольника из-за скругленных краев и погрешности метода)(Если не получилось, проверяйте поиск максимума и минимума в цикле, скорее всегоошиблись, копируя четыре одинаковые строчки).Как проверить, правильно ли найдены отрезки?Нарисуем найденные отрезки поверх пятиугольника, например – красным цветом.

Для этого вкрасную плоскость добавим 255 на месте точек границ, а из синей и зеленой эти точки уберем:B=uint8(B);R=bitor(A,imcomplement(B));G=bitand(A,B);B=bitand(A,B);Теперь склеим цветовые плоскости в одну трехмерную матрицу:C=cat(3,R,G,B);Отобразим ее на экране.Видим, что все отрезки найдены верно.РезультатыВопросы и задания для самостоятельной работыОтветы на вопросы даются в письменном виде и включаются в отчет.Задания выполняются в письменном виде. Полученный результат и текст скрипта добавляютсяв отчет.Часть 1Сравните границы, которые находятся функциями:E1=edge(A,’Sobel’);E2=edge(A,’Canny’);В чем отличие этих вызовов? Чем обусловлены отличия результата?Часть 2Почему в дуальном пространстве имеется только 4 максимума-бабочки? Куда делась ещеодна? Как ее найти?Что произойдет, если строить пятую линию, для которой отсутствует максимум в дуальномпространстве?Ускорьте алгоритм, вынеся постоянные множители за пределы цикла.

Используя функции tic иtoc, определите прирост производительности.Часть 3Почему графики синусоид в дуальном пространстве отображены вверх ногами?Модифицируйте алгоритм: перенесите начало координат в центр изображения. Убедитесь, чтолинии детектируются верно. Как изменится в этом случае дуальное пространство?Ускорьте алгоритм: вынесите из цикла расчет синусов и косинусов (задайте таблицу синусов).Используя функции tic и toc, определите прирост производительности.Часть 4Ускорьте алгоритм, используя информацию о направлении градиента яркости. Погрешностьопределения градиента принять равной 10 градусов. Используя функции tic и toc, определите приростпроизводительности.ПриложенияПриложения содержат возможный вид программы (скрипта) для каждой из 4х частейлабораторной работы.Используйте код только в ознакомительных целях. Постарайтесь написать свой код.Это нужно для того, чтобы мы с вами научились разрабатывать и поэтапноотлаживать большие фрагменты кода.Код может содержать преднамеренные ошибки.Приложение 1.

Скрипт детектирования границclear;close all;A=imread('pentagon.bmp'); %Загружаем изображение пятиугольника[h,w,p]=size(A);if p==3, A=rgb2gray(A); end %Преобразуем цветное в полутоновое сероеfigure,imshow(A),title('Загруженное изображение');Sx=[-1 0 1;-2 0 2;-1 0 1]; %Маска фильтра СобелаSy=Sx';A=im2double(A);Dx=imfilter(A,Sx);Dy=imfilter(A,Sy);%Производная по х даст вертикальные границы%Производная по у даст вертикальные границыfigure,imshow(Dx,[]),title('Вертикальные границы');figure,imshow(Dy,[]),title('Горизонтальные границы');G=sqrt(Dx.^2+Dy.^2); %Модуль градиент яркостиgamma=atan2d(Dy,Dx); %Фаза градиента яркостиfigure,imshow(imcomplement(G),[]),title('Градиент яркости');E=edge(A); %Границы единичной толщиныfigure,imshow(imcomplement(E)),title('Границы единичной толщины');Приложение 2.

Скрипт детектирования линий в стандартной форме%%%%----------------------------------------------Пример кода для л/р №3"Обработка границ, детектирование прямых и отрезков"Часть 2 - поиск прямых в стандартной формеclear;close all;A=imread('pentagon.bmp');%Загружаем изображение пятиугольника[h,w,p]=size(A);if p==3, A=rgb2gray(A);end %Преобразуем цветное в полутоновое серое% figure,imshow(A),title('Загруженное изображение'); %только для отладкиE=edge(A); %Границы единичной толщины% figure,imshow(imcomplement(E)),title('Границы единичной толщины'); %только дляотладки%Пространство поискаKMAX=1000;BMAX=1000;H=zeros(KMAX,BMAX);%Ограничения на линииkmax=5;bmax=1000;%Размеры изображения[h,w]=size(A);%Преобразование Хафаfor x=1:wfor y=1:hif E(y,x)==1for KI=1:KMAXk=(KI-1)*(2*kmax)/(KMAX-1)-kmax;b=-x*k+y;BI=round( (b+bmax)*(BMAX-1) /(2*bmax)+1);if (BI>=1)&&(BI<=BMAX)H(KI,BI)=H(KI,BI)+1;endendendendendfigure,imshow(-H,[]),title('Пространство поиска');for Pass=1:4%Ищем максимальный откликHbest=max(H(:));[KIbest,BIbest]=find(H==Hbest);KIbest=KIbest(1);BIbest=BIbest(1);kbest=(KIbest-1)*(2*kmax)/(KMAX-1) - kmax;bbest=(BIbest-1)*(2*bmax)/(BMAX-1) - bmax;%Рисуем прямуюfor x=1:wy=round(kbest*x+bbest);if (y>=1)&&(y<=h)A(y,x)=0;endend%Ставим заплатку поверх найденного максимумаd=5;H(KIbest-d:KIbest+d,BIbest-d:BIbest+d)=0;endfigure,imshow(A),title('Найденные прямые');Приложение 3.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5301
Авторов
на СтудИзбе
417
Средний доход
с одного платного файла
Обучение Подробнее