Wie kann ich die Formel ändern, um den Barcode in jedem Winkel zu erkennen? - MATLAB

14

Wie kann ich die Formel ändern, um den Barcode in jedem Winkel zu erkennen?

Formel

Original Bild Verarbeitetes Bild

 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
quelle

Antworten:

8

Wenn der Filter, den Sie haben, gut genug für Sie funktioniert, können Sie einfach imrotatemehrere gedrehte Versionen des Quellbilds erstellen und den Filter verwenden, den Sie für jedes von ihnen haben (stellen Sie sicher, dass bilinearSie sinnvolle Ableitungen erhalten).

Niki Estner
quelle
Danke für den Hinweis. Wie kann ich mehrere gedrehte Versionen erstellen? Sorry, ich bin neu in MatLab
Ich schaffe es, den Barcode vertikal oder horizontal zu bekommen. Die Formel kann jedoch nur horizontalen Barcode erkennen. Kann ich die Formel so ändern, dass sowohl vertikal als auch horizontal der Barcode erkannt wird?
Kim
mathworks.com/matlabcentral/fileexchange/31727-barcode-reader Sie können diesen Link überprüfen
vini
7

Ihre Gleichung hebt Bereiche hervor, in denen die Größe des Gradienten in X-Richtung konstant höher ist als in Y-Richtung. Damit dies in alle Richtungen funktioniert, benötigen Sie wahrscheinlich Bereiche, in denen der Gradient in einer beliebigen Richtung hoch ist.

Versuchen Sie Folgendes:

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

Dies hebt im Grunde nicht jede Kante hervor, aber der Tiefpassfilter bedeutet, dass Sie mehrere Kanten nahe beieinander benötigen.

Nzbuu
quelle
Danke für die Codierung! Aber ich weiß nicht, wo ich den Code platzieren soll, als ich versuche, die Formel zu ersetzen, wurde alles grün.
Probieren Sie meine aktualisierte Version.
Nzbuu
Aber jetzt färbt sich das ganze Bild rot !!
Kim
Ich schaffe es, den Barcode vertikal oder horizontal zu bekommen. Die Formel kann jedoch nur horizontalen Barcode erkennen. Kann ich die Formel so ändern, dass sowohl vertikal als auch horizontal der Barcode erkannt wird?
Kim
Ich teste diese Furmule '' B = double (sqrt (dIx. ^ 2 + dIy. ^ 2)> 0) "es funktioniert nicht.