Как я могу изменить формулу, чтобы обнаружить штрих-код под каждым углом? - MATLAB

14

Как я могу изменить формулу, чтобы обнаружить штрих-код под каждым углом?

формула

Исходное изображение Обработанное изображение

 rgb = imread('barcode4.jpg');
% Resize Image
rgb = imresize(rgb,0.33);
figure(),imshow(rgb);
% Convert from RGB to Gray
Igray = double(rgb2gray(rgb));
% Calculate the Gradients
[dIx, dIy] = gradient(Igray);
B = abs(dIx) - abs(dIy);
% Low-Pass Filtering
H = fspecial('gaussian', 20, 10);
C = imfilter(B, H);
C = imclearborder(C);
figure(),imagesc(C);colorbar
Ким
источник

Ответы:

8

Если у вас есть достаточно хорошо работающий фильтр, вы можете просто использовать его imrotateдля создания нескольких повернутых версий исходного изображения и использовать фильтр, который у вас есть для каждой из них (обязательно используйте bilinearдля получения разумных производных)

Ники Эстнер
источник
Спасибо за совет. Как я могу создать несколько повернутых версий? Извините, я новичок в MatLab
Мне удается получить штрих-код по вертикали или горизонтали. Однако формула может обнаружить только горизонтальный штрих-код. Могу ли я изменить формулу так, чтобы как вертикальный, так и горизонтальный могли обнаружить штрих-код.
Ким
mathworks.com/matlabcentral/fileexchange/31727-barcode-reader вы можете проверить эту ссылку
vini
7

Ваше уравнение выделяет области, где величина градиента в направлении X постоянно выше, чем в направлении Y. Чтобы это работало во всех направлениях, вам, вероятно, нужны области, где величина градиента в любом направлении велика.

Попробуйте использовать следующее:

B = double(sqrt(dIx.^2 + dIy.^2) > 0)

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

Nzbuu
источник
Спасибо за кодировку! Но я не знаю, куда поместить код, поскольку я пытаюсь заменить формулу, все стало зеленым.
Попробуйте мою обновленную версию.
Нзбуу
Но теперь все изображение становится красным в цвете!
Ким
Мне удается получить штрих-код по вертикали или горизонтали. Однако формула может обнаружить только горизонтальный штрих-код. Могу ли я изменить формулу так, чтобы как вертикальный, так и горизонтальный могли обнаружить штрих-код.
Ким
Я тестирую эту фурмулю '' B = double (sqrt (dIx. ^ 2 + dIy. ^ 2)> 0) ", это не работает.