Jak mogę zmienić formułę, aby wykrywać kod kreskowy pod każdym kątem? - MATLAB

14

Jak mogę zmienić formułę, aby wykrywać kod kreskowy pod każdym kątem?

Formuła

Oryginalny obraz Przetworzony obraz

 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
źródło

Odpowiedzi:

8

Jeśli filtr, który masz działa wystarczająco dobrze dla Ciebie, możesz po prostu użyć, imrotateaby utworzyć kilka obróconych wersji obrazu źródłowego i użyć filtra, który masz na każdym z nich (upewnij się, że używasz, bilinearaby uzyskać sensowne pochodne)

Niki Estner
źródło
Dzięki za radę. jak mogę utworzyć kilka obróconych wersji? Przepraszam, jestem nowy w MatLabie
Udaje mi się ustawić kod kreskowy na pionowy lub poziomy. Jednak formuła może wykrywać tylko poziomy kod kreskowy. Czy mogę zmienić formułę, aby zarówno pionowy, jak i poziomy mogły wykryć kod kreskowy.
Kim
7

Twoje równanie podkreśla obszary, w których wielkość gradientu w kierunku X jest stale wyższa niż w kierunku Y. Aby to działało we wszystkich kierunkach, prawdopodobnie potrzebujesz obszarów, w których wielkość gradientu w dowolnym kierunku jest wysoka.

Spróbuj użyć następujących opcji:

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

Nie znaczy to, że po prostu podświetli każdą krawędź, ale filtr dolnoprzepustowy oznacza, że ​​potrzebujesz wielu krawędzi blisko siebie.

Nzbuu
źródło
Dzięki za kodowanie! Ale nie wiem, gdzie umieścić kod, gdy próbuję zastąpić formułę, wszystko poszło na zielono.
Wypróbuj moją zaktualizowaną wersję.
Nzbuu,
Ale teraz cały obraz zmienia kolor na czerwony !!
Kim
Udaje mi się ustawić kod kreskowy na pionowy lub poziomy. Jednak formuła może wykrywać tylko poziomy kod kreskowy. Czy mogę zmienić formułę, aby zarówno pionowy, jak i poziomy mogły wykryć kod kreskowy.
Kim
Testuję ten furmule '' B = double (sqrt (dIx. ^ 2 + dIy. ^ 2)> 0) "to nie działa.