¿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

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)


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.


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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.