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.