Come posso cambiare la formula per rilevare il codice a barre in ogni angolo? - MATLAB


14

Come posso cambiare la formula per rilevare il codice a barre in ogni angolo?

Formula

Immagine originale Immagine elaborata

 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

Risposte:


8

Se il filtro che hai funziona abbastanza bene per te, potresti semplicemente utilizzare imrotateper creare diverse versioni ruotate dell'immagine di origine e utilizzare il filtro che hai su ciascuno di essi (assicurati di utilizzare bilinearper ottenere derivati ​​sensibili)


Grazie per il consiglio. come posso creare più versioni ruotate ?? Siamo spiacenti, sono nuovo di MatLab

Riesco a ottenere il codice a barre in verticale o orizzontale. Tuttavia, la formula può rilevare solo codici a barre orizzontali. Posso modificare la formula in modo che sia il verticale che l'orizzontale possano rilevare il codice a barre.
Kim,


7

L'equazione evidenzia le aree in cui l'ampiezza del gradiente nella direzione X è costantemente superiore a quella nella direzione Y. Per farlo funzionare in tutte le direzioni, allora probabilmente vuoi aree in cui l'intensità del gradiente in qualsiasi direzione è alta.

Prova a utilizzare quanto segue:

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

Non che questo evidenzierà sostanzialmente ogni fronte, ma il filtro passa-basso significherà che hai bisogno di più bordi vicini tra loro.


Grazie per la codifica! Ma non so dove mettere il codice mentre provo a sostituire la formula, tutto è diventato verde.

Prova la mia versione aggiornata.
Nzbuu,

Ma ora l'intera immagine diventa di colore rosso !!
Kim

Riesco a ottenere il codice a barre in verticale o orizzontale. Tuttavia, la formula può rilevare solo codici a barre orizzontali. Posso modificare la formula in modo che sia il verticale che l'orizzontale possano rilevare il codice a barre.
Kim,

Ho testato questo furmule '' B = double (sqrt (dIx. ^ 2 + dIy. ^ 2)> 0) "non funziona.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.