Вычислить вертикальные градиенты для локализации номерного знака

Я новичок в MATLAB и пытаюсь реализовать следующий шаг локализации номерных знаков:

Вертикальное вычисление градиента

Вот мой прогресс до сих пор.

Код:

[rows,cols] = size(img);
image_gradient = zeros(rows,cols);

for i =1:1:rows
    for j =1:1:cols-1
        image_gradient(i,j) = abs( img(i,j+1) - img(i,j) );
    end
end

figure,imshow(image_gradient);title('Gradient');

Выход:

Результат вычисления градиента

Я буду действительно благодарен, если кто-то может подсказать мне, что я делаю здесь неправильно.

1 ответ

Решение

Чтобы начать, вы должны понимать, что освещение - это боль в задней части. И вы поймете это, продолжая изучать новые алгоритмы.

Глядя на ваш первый набор изображений, вы можете видеть, что пластина является заметной частью изображения. Номерные знаки предназначены для того, чтобы придать контраст между персонажами и фоном. Более того, весь фон довольно гладкий. Когда вы смотрите на изображение внизу, там много артефактов и резких переходов интенсивности. Это должно объяснить, почему ваш градиент шумит.

Что вы пытаетесь сделать, это операция фильтрации (или Convolution) с использованием фильтра, который выглядит следующим образом [-1 1], Посмотрите функции Matlab conv2 а также filter,

Чтобы уменьшить шум, вы должны выполнить операцию усреднения вместе с градиентом. Это уменьшит восприимчивость к шуму. Таким образом, ваш последний фильтр будет выглядеть примерно так [-1 1;-1 1;-1 1], Убедитесь, что значения ваших фильтров нормализованы, если вы используете другие сложные фильтры.

Обнаружить номерные знаки непросто с помощью предлагаемого способа. Это определенно должно помочь вам начать. Но вам действительно нужно начать читать еще несколько алгоритмов.

Другие вопросы по тегам