Jak mogę zmienić formułę, aby wykrywać kod kreskowy pod każdym kątem?
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
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:
Nie znaczy to, że po prostu podświetli każdą krawędź, ale filtr dolnoprzepustowy oznacza, że potrzebujesz wielu krawędzi blisko siebie.
źródło