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

pmi432 / LR07 / 2read / из Журавеля / 13. Распознавание номерных знаков автомобилей

.pdf
Скачиваний:
80
Добавлен:
18.03.2015
Размер:
201.76 Кб
Скачать

Image Processing Toolbox. . . .

. 1

MATLAB.Exponenta

 

Семинары

Тренинги

Лицензирование

Материалы

 

Подписка

 

Форум

Регистрация

Matlab

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Toolboxes

 

 

 

 

Запрос цены

 

Пробная версия

 

Запрос демонстрации

 

Simulink

 

 

 

 

 

 

 

 

 

 

 

Blocksets

 

 

 

 

 

 

 

 

 

Вход

 

 

 

 

 

 

 

 

 

 

Полезное

 

 

 

 

 

 

 

 

 

 

 

 

Обработка сигналов и изображений\ Image Processing Toolbox

И.М.Журавель "Краткий курс теории обработки изображений"

В оглавление книги \ К предыдущему разделу \ К следующему разделу

Распознавание номерных знаков автомобилей

Рассмотрим некоторые вопросы, которые могут возникнуть при решении задачи распознавания номерных знаков автомобилей. Для этого сформируем исходное изображение и считаем его в рабочее пространство MATLAB.

I=imread('inputimage.bmp');

figure,imshow(I);

Для упрощения дальнейших расчетов и программной реализации преобразуем полноцветное исходное изображений в полутоновое. Существует много методов перехода от полноцветного изображения к полутоновому. В системе MATLAB есть функция rgb2gray, которая реализует это преобразование.

I=rgb2gray(I); figure, imshow(I);

Одним из недостатков функции rgb2gray является то, что она не всегда корректно выполняет преобразование полноцветного изображения в полутоновое. Например, на полутоновом изображении, в отличие от полноцветного, отсутствуют фары красного цвета. В данном случае это не является принципиальным, поскольку для нас важно как обрабатывается изображение номера, но все же для корректности будем использовать другой подход.

I=I(:,:,1);

I=rgb2gray(I);

http://matlab.exponenta.ru/imageprocess/book2/61.php

08.11.2012 23:37:31

Image Processing Toolbox. . . .

. 2

Это изображение обработано более корректно, поскольку не было утеряно никаких деталей на изображении.

Теперь, как и при решении большинства других задач, необходимо провести предварительную обработку исходных изображений. Этот этап особенно важен при решении задач распознавания. От качества решения этапа предварительной обработки во многом будет зависеть эффективность решения задачи распознавания в целом.

К наиболее распространенным дефектам, которые могут присутствовать на исходных изображениях, относятся шум и низкий уровень контрастности. Продемонстрируем некоторые способы подавления шума и повышения контрастности исходных изображений с помощью встроенных функций MATLAB. Для этого сформируем сначала исходное изображение с наличием шума. В качестве примера рассмотрим импульсный шум.

I=imnoise(I,'salt & pepper', 0.005); figure, imshow(I);

Для устранения импульсных выбросов используем медианную фильтрацию, которую выполним с помощью функции median.

for i=1:N;

for j=1:M-2; I(i,j)=median(median(I(i,j:j+2)));

end;

end;

figure, imshow(I);

Результат обработки представлен на изображении внизу.

http://matlab.exponenta.ru/imageprocess/book2/61.php

08.11.2012 23:37:31

Image Processing Toolbox. . . .

. 3

Рассмотрим пример повышения контрастности исходного изображения. Для демонстрации этого примера сформируем размытое изображение.

Используем функцию imfilter для повышения контрастности размытого изображения.

h = fspecial('unsharp') h =

-0.1667 -0.6667 -0.1667 -0.6667 4.3333 -0.6667 -0.1667 -0.6667 -0.1667

I = imfilter(I,h); figure, imshow(I);

http://matlab.exponenta.ru/imageprocess/book2/61.php

08.11.2012 23:37:31

Image Processing Toolbox. . . .

. 4

После проведения предварительной обработки приступаем к определению расположения номерных знаков изображения. Для этого сначала необходимо определить общее количество объектов на изображении.

[L num]=bwlabel(L,8);

Таким образом, определены все объекты, которые размещены на изображении. После этого приступаем к вычислению признаков этих объектов.

feats=imfeature(L,'Centroid','Extent',8);

Extent=zeros(num);

CentX=zeros(num);

CentY=zeros(num); for i=1:1:num;

Extent(i)=feats(i).Extent; CentX(i)=feats(i).Centroid(1); CentY(i)=feats(i).Centroid(2);

end;

Приведем результаты вычислений некоторых признаков для всех объектов изображения. В качестве примера был выбран коэффициент заполнения, который равен отношению площади объекта к площади ограничивающего прямоугольника.

Extent =

 

 

 

 

 

 

 

 

 

 

 

 

0.7328

0

0

0

0

0

0

0

0

0

0

0

0

0.8268

0

0

0

0

0

0

0

0

0

0

0

0

1.0000

0

0

0

0

0

0

0

0

0

0

0

0

1.0000

0

0

0

0

0

0

0

0

0

0

0

0

0.8752

0

0

0

0

0

0

0

0

0

0

0

0

0.5959

0

0

0

0

0

0

0

0

0

0

0

0

0.8325

0

0

0

0

0

0

0

0

0

0

0

0

1.0000

0

0

0

0

0

0

0

0

0

0

0

0

1.0000

0

0

0

0

0

0

0

0

0

0

0

0

1.0000

0

0

0

0

0

0

0

0

0

0

0

0

1.0000

0

0

0

0

0

0

0

0

0

0

0

0

1.0000

0

0

0

0

0

0

0

0

0

0

0

0

0.9028

0

0

0

0

0

0

0

0

0

0

0

0

Для объекта, который представляет изображение номерного знака, параметр “Extent” будет равен заранее известному числу. Поскольку соотношение сторон номерных постоянно, то этот параметр также будет постоянным. Вероятность присутствия на изображении объекта, который описывался бы тем же значением параметра “Extent”, небольшая. Но для повышения достоверности локализации можно использовать еще и другие параметры.

Таким образом, зная числовое значение параметра “Extent”, можно определить номер объекта интереса. Путь это значение будет равно 0,8325. Этому значению соответствуют координаты (7, 1). Зная эти координаты, из CentX и CentY можно определить координаты расположения номерных знаков на изображении.

CentX =

 

 

 

 

 

 

 

 

 

 

 

 

129.1411

0

0

0

0

0

0

0

0

0

0

0

0

29.4241

0

0

0

0

0

0

0

0

0

0

0

0

50.0000

0

0

0

0

0

0

0

0

0

0

0

0

63.5000

0

0

0

0

0

0

0

0

0

0

0

0

132.8050

0

0

0

0

0

0

0

0

0

0

0

0

85.6120

0

0

0

0

0

0

0

0

0

0

0

0

126.6611

0

0

0

0

0

0

0

0

0

0

0

0

139.0000

0

0

0

0

0

0

0

0

0

0

0

0

146.5000

0

0

0

0

0

0

0

0

0

0

0

0

146.5000

0

0

0

0

0

0

0

0

0

0

0

0

189.5000

0

0

0

0

0

0

0

0

0

0

0

0

204.0000

0

0

0

0

0

0

0

0

0

0

0

0

226.4205

0

0

0

0

0

0

0

0

0

0

0

0

CentY =

 

 

 

 

 

 

 

 

 

 

 

 

127.0666

0

0

0

0

0

0

0

0

0

0

0

0

118.2042

0

0

0

0

0

0

0

0

0

0

0

0

121.0000

0

0

0

0

0

0

0

0

0

0

0

0

143.5000

0

0

0

0

0

0

0

0

0

0

0

0

102.7486

0

0

0

0

0

0

0

0

0

0

0

0

115.7129

0

0

0

0

0

0

0

0

0

0

0

0

154.4911

0

0

0

0

0

0

0

0

0

0

0

0

154.0000

0

0

0

0

0

0

0

0

0

0

0

0

152.5000

0

0

0

0

0

0

0

0

0

0

0

0

156.0000

0

0

0

0

0

0

0

0

0

0

0

0

143.5000

0

0

0

0

0

0

0

0

0

0

0

0

121.0000

0

0

0

0

0

0

0

0

0

0

0

0

119.3692

0

0

0

0

0

0

0

0

0

0

0

0

Таким образом, координаты размещения центра масс интересующего нас объекта, т.е. номерных знаков, равны

CentX(7,1)

ans =

126.6611

CentY(7,1)

ans =

154.4911

Выделим изображение номерного знака на изображении.

Для этого необходимо заранее знать значение Extent, которое свойственно изображению номерного знака. Как было сказано выше, это значение будет постоянно, поскольку форма номерного знака не изменяется и равно 0.8325.

[x y]=find(Extent==0.8325);

Таким образом, можно определить координаты центра масс объекта, т.е. номерного знака, изображению которого свойственно значение Extent = 0,8325 . После этого локализируем изображение номерного знака.

http://matlab.exponenta.ru/imageprocess/book2/61.php

08.11.2012 23:37:31

Image Processing Toolbox. . . .

. 5

xi=round(CentX(x,y));

yj=round(CentY(x,y));

Известно, что после использования выражения [L num]=bwlabel(L,8), каждый объект на изображении L будет отображаться одинаковым значением яркости L(yj,xi). Однако локализация изображения номерного знака по яркости только одного элемента L(yj,xi) не всегда дает хороший результат. Дело в том, что на изображении номерного знака присутствуют также другие объекты, например, цифры и буквы, которые будут обозначены другим, отличным от L(yj,xi) , значением яркости. Поэтому для повышения достоверности локализации изображения номерного знака вместо одного значения L(yj,xi), целесообразно использовать также и несколько окрестных элементов [L(yj,xi), L(yj+6,xi), L(yj-6,xi)].

for i=1:N; disp(i); for j=1:M;

if L(i,j)==median([L(yj,xi),L(yj+6,xi),L(yj-6,xi)]); L(i,j)=ORIG(i,j);

else L(i,j)=0;

end;

end;

end;

figure, imshow(L);

После локализации номерных знаков на изображении, можно приступить к их распознаванию.

Существуют различные подходы к решению задачи распознавания объектов. Некоторые из них рассмотрены в материалах "Распознавание объектов на основе вычисления их признаков", "Распознавание объектов на основе вычисления коэффициента корреляции".

В оглавление книги \ К предыдущему разделу \ К следующему разделу

I Всероссийская научная конференция «Проектирование научных и инженерных приложений в среде MATLAB» (май 2002 г.) II Всероссийская научная конференция «Проектирование научных и инженерных приложений в среде MATLAB» (май 2004 г.)

III Всероссийская научная конференция «Проектирование научных и инженерных приложений в среде MATLAB» (октябрь 2007 г.) IV Всероссийская научная конференция «Проектирование научных и инженерных приложений в среде MATLAB» (май 2009 г.)

V Всероссийская научная конференция «Проектирование научных и инженерных приложений в среде MATLAB» (май 2011 г.)

На первую страницу \ Сотрудничество \ MathWorks \ Softline \ Контакты \ Вакансии

Информация на сайте была обновлена 21.04.12

Copyright 2001–2012 Softline Co

Наши баннеры

 

подарки – подарочные сертификаты

http://matlab.exponenta.ru/imageprocess/book2/61.php

08.11.2012 23:37:31