Bagaimana saya bisa mengubah formula untuk mendeteksi barcode di setiap sudut? - MATLAB

14

Bagaimana saya bisa mengubah formula untuk mendeteksi barcode di setiap sudut?

Rumus

Gambar asli Gambar yang Diproses

 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
sumber

Jawaban:

8

Jika filter yang Anda miliki berfungsi cukup baik untuk Anda, Anda cukup menggunakan imrotateuntuk membuat beberapa versi gambar sumber yang diputar, dan menggunakan filter yang Anda miliki di masing-masingnya (pastikan menggunakan bilinearuntuk mendapatkan turunan yang masuk akal)

Niki Estner
sumber
Terima kasih atas sarannya. bagaimana saya bisa membuat beberapa versi yang dirotasi ?? Maaf, saya baru di MatLab
Saya berhasil mendapatkan barcode ke vertikal atau horizontal. Namun formula hanya dapat mendeteksi barcode horisontal. Dapatkah saya mengubah formula sehingga vertikal dan horizontal dapat mendeteksi barcode.
Kim
7

Persamaan Anda menyoroti area di mana besarnya gradien dalam arah X secara konsisten lebih tinggi daripada di arah Y. Untuk membuat ini bekerja di semua arah, maka Anda mungkin ingin area di mana besarnya gradien di segala arah tinggi.

Coba gunakan yang berikut ini:

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

Bukan berarti ini pada dasarnya akan menyorot setiap sisi, tetapi filter low-pass akan berarti Anda perlu beberapa sisi saling berdekatan.

Nzbuu
sumber
Terima kasih atas kodenya! Tapi saya tidak tahu di mana harus meletakkan kode ketika saya mencoba mengganti formula, semuanya menjadi hijau.
Coba versi saya yang diperbarui.
Nzbuu
Tapi sekarang seluruh gambar berubah menjadi Merah !!
Kim
Saya berhasil mendapatkan barcode ke vertikal atau horizontal. Namun formula hanya dapat mendeteksi barcode horisontal. Dapatkah saya mengubah formula sehingga vertikal dan horizontal dapat mendeteksi barcode.
Kim
Saya menguji furmule ini '' B = ganda (sqrt (dIx. ^ 2 + dIy. ^ 2)> 0) "itu tidak berfungsi