Comment puis-je changer la formule pour détecter le code-barres sous tous les angles?
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
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:
Non pas que cela mettra en évidence chaque bord, mais le filtre passe-bas signifiera que vous avez besoin de plusieurs bords rapprochés.
la source