¿Cómo puedo cambiar la fórmula para detectar el código de barras en cada ángulo? - MATLAB

14

¿Cómo puedo cambiar la fórmula para detectar el código de barras en cada ángulo?

Fórmula

Imagen original Imagen procesada

 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
fuente

Respuestas:

8

Si el filtro que tiene funciona lo suficientemente bien para usted, simplemente puede usarlo imrotatepara crear varias versiones rotadas de la imagen de origen, y usar el filtro que tiene en cada una de ellas (asegúrese de usarlo bilinearpara obtener derivados sensibles)

Niki Estner
fuente
Gracias por el consejo. ¿Cómo puedo crear varias versiones rotadas? Lo siento, soy nuevo en MatLab
Me las arreglo para llevar el código de barras a vertical u horizontal. Sin embargo, la fórmula solo puede detectar códigos de barras horizontales. ¿Puedo cambiar la fórmula para que tanto vertical como horizontal puedan detectar el código de barras?
Kim
7

Su ecuación resalta áreas donde la magnitud del gradiente en la dirección X es consistentemente más alta que en la dirección Y. Para que esto funcione en todas las direcciones, entonces probablemente desee áreas donde la magnitud del gradiente en cualquier dirección sea alta.

Intenta usar lo siguiente:

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

No es que esto básicamente resalte cada borde, pero el filtro de paso bajo significará que necesita varios bordes muy juntos.

Nzbuu
fuente
Gracias por la codificación! Pero no sé dónde poner el código cuando trato de reemplazar la fórmula, todo se volvió verde.
Prueba mi versión actualizada.
Nzbuu
¡Pero ahora toda la imagen se vuelve de color rojo!
Kim
Me las arreglo para llevar el código de barras a vertical u horizontal. Sin embargo, la fórmula solo puede detectar códigos de barras horizontales. ¿Puedo cambiar la fórmula para que tanto vertical como horizontal puedan detectar el código de barras?
Kim
Pruebo este furmule '' B = double (sqrt (dIx. ^ 2 + dIy. ^ 2)> 0) "no funciona.