MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

Обработка сигналов и изображений\ 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);

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

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

К наиболее распространенным дефектам, которые могут присутствовать на исходных изображениях, относятся шум и низкий уровень контрастности. Продемонстрируем некоторые способы подавления шума и повышения контрастности исходных изображений с помощью встроенных функций 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);

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

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

Используем функцию 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);

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

[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 . После этого локализируем изображение номерного знака.

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);

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

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

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


Поиск по сайту:

Система Orphus

Яндекс.Метрика