Como posso alterar a fórmula para detectar o código de barras em todos os ângulos?
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
Sua equação destaca áreas nas quais a magnitude do gradiente na direção X é consistentemente mais alta do que na direção Y. Para fazer isso funcionar em todas as direções, é provável que você queira áreas em que a magnitude do gradiente em qualquer direção seja alta.
Tente usar o seguinte:
Não que isso destaque basicamente todas as arestas, mas o filtro passa-baixo significa que você precisa de várias arestas juntas.
fonte