Comment puis-je changer la formule pour détecter le code-barres sous tous les angles? - MATLAB

14

Comment puis-je changer la formule pour détecter le code-barres sous tous les angles?

Formule

Image originale Image traitée

 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
Kim
la source

Réponses:

8

Si le filtre que vous avez fonctionne assez bien pour vous, vous pouvez simplement utiliser imrotatepour créer plusieurs versions pivotées de l'image source et utiliser le filtre que vous avez sur chacune d'elles (assurez-vous de l'utiliser bilinearpour obtenir des dérivés sensibles)

Niki Estner
la source
Merci pour le conseil. comment puis-je créer plusieurs versions tournées ?? Désolé, je suis nouveau sur MatLab
J'arrive à obtenir le code-barres vertical ou horizontal. Cependant, la formule ne peut détecter que le code-barres horizontal. Puis-je changer la formule pour que les deux verticales et horizontales puissent détecter le code-barres.
Kim
7

Votre équation met en évidence les zones où la magnitude du gradient dans la direction X est toujours plus élevée que dans la direction Y. Pour que cela fonctionne dans toutes les directions, vous souhaiterez probablement des zones où la magnitude du gradient dans toutes les directions est élevée.

Essayez d'utiliser les éléments suivants:

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

Non pas que cela mettra en évidence chaque bord, mais le filtre passe-bas signifiera que vous avez besoin de plusieurs bords rapprochés.

Nzbuu
la source
Merci pour le codage! Mais je ne sais pas où mettre le code alors que j'essaie de remplacer la formule, tout est devenu vert.
Essayez ma version mise à jour.
Nzbuu
Mais maintenant, l'image entière devient rouge!
Kim
J'arrive à obtenir le code-barres vertical ou horizontal. Cependant, la formule ne peut détecter que le code-barres horizontal. Puis-je changer la formule pour que les deux verticales et horizontales puissent détecter le code-barres.
Kim
Je teste cette furmule '' B = double (sqrt (dIx. ^ 2 + dIy. ^ 2)> 0) "ça ne marche pas.