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

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)


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.


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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.