Изучение методов обработки изображений в контурном анализе
Скачать 1.68 Mb.
|
О Т Ч Е Т по лабораторной работе №4 по дисциплине «Методы и алгоритмы обработки данных и изображений» на тему Изучение методов обработки изображений в контурном анализе. Студент гр. А-01м-16 Белов Е.Ю. Преподаватель Бородкин А.А. Москва 2016 Загрузить в рабочую среду Matlab файл с цветным изображением VariantX.jpg, где X – номер варианта. Изучить изображение и выполнить с помощью функций Matlab его предварительную обработку Исходное изображение: Изучив изображение можно сделать вывод о том, что нао применять медианную фильтрацию, т.к. шумом являются белые точки. Результат медианной фильтрации: Результат обработки изображения: Преобразовать изображение в бинарное. Выделить на изображении номер автомобиля и сохранить его в отдельный файл. С помощью функций увеличения и поворота изображения получили изображение номера автомобиля: На изображении с номером автомобиля найти и выделить все контуры символов. Контуры отмечены красным: Написать алгоритм эквализации контуров. Проверить его работу на найденных в п.3. контурах. Реализация: clear; [image map] = imread('rect1.jpg'); I = rgb2gray(image); BW1= edge(I); BW = dither(BW1); imshow(BW); B=bwboundaries(BW,'holes'); Xvect(1)=0; Yvect(1)=0; for k = 1:1 boundary = B{k,1}; for i = 1:length(boundary)-1 Xvect(k,i)=boundary(i+1,1)-boundary(i,1); Yvect(k,i)=boundary(i+1,2)-boundary(i,2); Vect(k,i)=Xvect(k,i)+j*Yvect(k,i); end end k1=length(Vect); r=1; p=50; eps=0; for i=1:k1 eps=eps+abs(Vect(1,i)); end eps = eps/p; n=1; ost=Vect(1,n); while r<=p if eps<=abs(ost) e(r)=ost/abs(ost); ost=ost-e(r); r=r+1; else t=0; sum=0; while eps>abs(ost)+sum t=t+1; sum=0; for j1=1:t sum=sum+abs(Vect(1,n+j1)); end end abs_isp=abs(eps)-abs(ost)-sum; isp=Vect(1,n+t)*abs_isp/abs(Vect(1,n+t)); % isp=Vect(1,n+t)-sum+ %betta = subspace(sum,Vect(1,n+t)); %gamma = asin(abs(sum)*sin(betta)/eps); %alpha = pi - (betta+gamma); % if(alpha==pi || alpha==0) % abs_DC = sqrt(eps*eps + abs(sum)* abs(sum) - 2*abs(sum)*eps*1); % else % abs_DC = sqrt(eps*eps + abs(sum)* abs(sum) + 2*abs(sum)*eps*cos(alpha)); % end % DC = Vect(1,n+t)*abs_DC/abs(Vect(1,n+t)); %isp = Vect(1,n+t)-DC; sum1=0+0*j; for i1=1:t-1 sum1=sum1+Vect(1,n+i1); end e(r)=ost+isp+sum1; ost=Vect(1,n+t)-isp; r=r+1; n=n+t; end end boundary = B{1,1}; figure; k1=length(e); for ii = 1:k1 v(ii)=0; for i = 1:k1 iii=ii-1; if iii+i>k1 iii=iii-k1; end v(ii)=v(ii)+real(e(i))*real(e(iii+i))+imag(e(i))*imag(e(iii+i))+j*(imag(e(i))*real(e(iii+i))-real(e(i))*imag(e(iii+i))); end v1(ii)=abs(v(ii)); end plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 2); sumX=0; sumY=0; sumX1=0; sumY1=0; koord(1,1)=0; koord(1,2)=0; koord1(1,1)=0; koord1(1,2)=0; for i=2:length(e) sumX=sumX+real(e(i-1)); sumY=sumY+imag(e(i-1)); koord(i,1)=sumX; koord(i,2)=sumY; end summa=Vect(1); for i=2:length(Vect) sumX1=sumX1+real(Vect(i-1)); sumY1=sumY1+imag(Vect(i-1)); koord1(i,1)=sumX1; koord1(i,2)=sumY1; summa=summa+Vect(i); end %koord(length(e)+1,1)=koord(1,1); %koord(length(e)+1,2)=koord(1,2); figure plot(koord(:,1), koord(:,2),'-b'); hold on plot(koord1(:,1), koord1(:,2),'-r'); Проверка на фигурах: Написать алгоритм нахождения ВКФ контуров. Проверить его работу на эквализованных контурах из п.4. Реализация АКФ: k1=length(e); for ii = 1:k1 v(ii)=0; for i = 1:k1 iii=ii-1; if iii+i>k1 iii=iii-k1; end v(ii)=v(ii)+real(e(i))*real(e(iii+i))+imag(e(i))*imag(e(iii+i))+j*(imag(e(i))*real(e(iii+i))-real(e(i))*imag(e(iii+i))); end v1(ii)=abs(v(ii)); end Реализация ВКФ: k1=length(e2); for ii = 1:k1 v2(ii)=0; for i = 1:k1 iii=ii-1; if iii+i>k1 iii=iii-k1; end v2(ii)=v2(ii)+real(e2(i))*real(e2(iii+i))+imag(e2(i))*imag(e2(iii+i))+j*(imag(e2(i))*real(e2(iii+i))-real(e2(i))*imag(e2(iii+i))); end v12(ii)=abs(v2(ii)); end |