Лабораторная работа №3, страница 4
Описание файла
PDF-файл из архива "Лабораторная работа №3", который расположен в категории "". Всё это находится в предмете "системы распознавания образов" из 10 семестр (2 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 4 страницы из PDF
Скрипт детектирования линий в нормальной форме%%%%----------------------------------------------Пример кода для л/р №3"Обработка границ, детектирование прямых и отрезков"Часть 3 - поиск прямых в нормальной форме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('Границы единичной толщины'); %только дляотладки[h,w]=size(A);RMAX=round(sqrt(w^2+h^2))+1;FMAX=360;H=zeros(RMAX,FMAX);%Преобразование Хафа в нормальной формеfor x=1:wfor y=1:hif E(y,x)==1for f=1:360ro=x*cosd(f)+y*sind(f);R=round(ro)+1;if (R>=1)&&(R<=RMAX)H(R,f)=H(R,f)+1;endendendendendfigure,imshow(-H,[]),title('Пространство поиска');for pass=1:5Hmax=max(H(:));[Rbest,Fbest]=find(H==Hmax);Rbest=Rbest(1);Fbest=Fbest(1);ro=Rbest-1;if abs(sind(Fbest))>1/sqrt(2)for x=1:wy=(ro-x*cosd(Fbest))/sind(Fbest);y=round(y);if (y>=1)&&(y<=h)A(y,x)=0;endendelsefor y=1:hx=(ro-y*sind(Fbest))/cosd(Fbest);x=round(x);if (x>=1)&&(x<=w)A(y,x)=0;endendendd=5;H(Rbest-d:Rbest+d,Fbest-d:Fbest+5)=0;endfigure,imshow(A),title('Найденные прямые');Приложение 4.
Скрипт детектирования отрезков%%%%----------------------------------------------Пример кода для л/р №3"Обработка границ, детектирование прямых и отрезков"Часть 4 - поиск отрезковclear;close all;A=imread('pentagon.bmp');%Загружаем изображение пятиугольника[h,w,p]=size(A);if p==3, A=rgb2gray(A);end %Преобразуем цветное в полутоновое сероеE=edge(A); %Границы единичной толщины[h,w]=size(A);RMAX=round(sqrt(w^2+h^2))+1;FMAX=360;H=zeros(RMAX,FMAX);%Расширенное пространствоXmin=H+w;Ymin=H+h;Xmax=H;Ymax=H;%Преобразование Хафа в нормальной формеfor x=1:wfor y=1:hif E(y,x)==1for f=1:360ro=x*cosd(f)+y*sind(f);R=round(ro)+1;if (R>=1)&&(R<=RMAX)H(R,f)=H(R,f)+1;%Здесь добавляем поиск крайних координатXmin(R,f)=min(x,Xmin(R,f));Ymin(R,f)=min(y,Ymin(R,f));Xmax(R,f)=max(x,Xmax(R,f));Ymax(R,f)=max(y,Ymax(R,f));endendendendendfigure,imshow(-H,[]),title('Пространство поиска');B=zeros(size(A))+255; %вспомогательное изображение для отрисовки отрезковfor pass=1:5Hmax=max(H(:));[Rbest,Fbest]=find(H==Hmax);Rbest=Rbest(1);Fbest=Fbest(1);ro=Rbest-1;if abs(sind(Fbest))>1/sqrt(2)for x=Xmin(Rbest,Fbest):Xmax(Rbest,Fbest) %Здесь изменим границы циклаy=(ro-x*cosd(Fbest))/sind(Fbest);y=round(y);if (y>=1)&&(y<=h)B(y,x)=0; %Здесь рисуем на вспомогательном изображенииendendelsefor y=Ymin(Rbest,Fbest):Ymax(Rbest,Fbest) %Здесь изменим границы циклаx=(ro-y*sind(Fbest))/cosd(Fbest);x=round(x);if (x>=1)&&(x<=w)B(y,x)=0; %Здесь рисуем на вспомогательном изображенииendendendd=5;H(Rbest-d:Rbest+d,Fbest-d:Fbest+5)=0;endfigure,imshow(B),title('Найденные отрезки');%Отметим найденные отрезки красным цветомB=uint8(B); %функции bitor/bitand принимают аргументы только одинакового типаR=bitor(A,imcomplement(B)); %красная плоскость - добавим точки отрезкаG=bitand(A,B);%зеленая - уберемB=bitand(A,B);%синяя - тоже уберемC=cat(3,R,G,B);%склеим плоскости в одну матрицуfigure,imshow(C),title('Найденные отрезки');.