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

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).


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


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.


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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.