Як я можу змінити формулу, щоб виявити штрих-код у кожному куті? - 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) "це не працює.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.