Como posso alterar a fórmula para detectar o código de barras em todos os ângulos? - MATLAB

14

Como posso alterar a fórmula para detectar o código de barras em todos os ângulos?

Fórmula

Imagem original Imagem processada

 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
fonte

Respostas:

8

Se o filtro que você possui funciona bem o suficiente para você, você pode simplesmente usar imrotatepara criar várias versões rotacionadas da imagem de origem e usar o filtro existente em cada uma delas (certifique-se de usar bilinearpara obter derivadas sensíveis)

Niki Estner
fonte
Obrigado pelo conselho. como posso criar várias versões rotacionadas ?? Desculpe, eu sou novo no MatLab
Consigo colocar o código de barras na vertical ou na horizontal. No entanto, a fórmula pode detectar apenas o código de barras horizontal. Posso alterar a fórmula para que tanto a vertical quanto a horizontal possam detectar o código de barras.
Kim
7

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:

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

Não que isso destaque basicamente todas as arestas, mas o filtro passa-baixo significa que você precisa de várias arestas juntas.

Nzbuu
fonte
Obrigado pela codificação! Mas não sei onde colocar o código enquanto tento substituir a fórmula, tudo ficou verde.
Experimente minha versão atualizada.
Nzbuu
Mas agora toda a imagem fica vermelha !!
Kim
Consigo colocar o código de barras na vertical ou na horizontal. No entanto, a fórmula pode detectar apenas o código de barras horizontal. Posso alterar a fórmula para que tanto a vertical quanto a horizontal possam detectar o código de barras.
Kim
Eu testar este furmule '' B = double (sqrt (dix ^ 2 + DIY ^ 2)> 0..) "Não é trabalho.