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

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)


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.