2016-02-24 8 views
0

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

Vertical Gradient Computation

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

Код:

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

Выход:

Output of gradient computation

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

+0

Почему вы говорите, что делаете что-то неправильно? Это может быть вопрос масштабирования полученного изображения. Попробуйте использовать образец изображения с вашим алгоритмом и посмотрите, есть ли у вас что-то подобное. – ScheissSchiesser

+0

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

ответ

3

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

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

Что вы пытаетесь сделать, это операция фильтрации (или свертка) с использованием фильтра, который выглядит так: [-1 1]. Посмотрите функции matlab conv2 и filter.

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

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

+0

Большое спасибо за время и внимание к моей проблеме. То, что я понял из ответа, состоит в том, что ** нет ошибки в коде ** и причина отсутствия _noisy output_ - это переходы интенсивности _sharp во входном изображении. Поэтому я должен применять 'conv2' для сглаживания изображения перед вычислением градиентов. Пожалуйста, уточните термин «нормализация» с точки зрения фильтра. –

+0

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

+0

Хмм, Большое спасибо за ответ, я применил «вертикальный градиент», а затем «горизонтальный градиент» на выходе вычисления «вертикальный градиент», а теперь мой изображение выглядит очень похоже на выходной образец. –

 Смежные вопросы

  • Нет связанных вопросов^_^