ฉันจะเปลี่ยนสูตรเพื่อตรวจจับบาร์โค้ดในทุกมุมได้อย่างไร - MATLAB


14

ฉันจะเปลี่ยนสูตรเพื่อตรวจจับบาร์โค้ดในทุกมุมได้อย่างไร

สูตร

รูปภาพต้นฉบับ รูปภาพที่ดำเนินการ

 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

คำตอบ:


8

หากตัวกรองที่คุณใช้งานได้ดีพอสำหรับคุณคุณสามารถใช้imrotateเพื่อสร้างอิมเมจต้นฉบับที่มีการหมุนหลายเวอร์ชันและใช้ตัวกรองที่คุณมีในแต่ละอัน (ต้องแน่ใจว่าใช้bilinearเพื่อให้ได้อนุพันธ์ที่เหมาะสม


ขอบคุณสำหรับคำแนะนำ. ฉันจะสร้างหลายเวอร์ชันที่หมุนได้อย่างไร? ขออภัยฉันใหม่กับ MatLab

ฉันจัดการเพื่อให้ได้บาร์โค้ดในแนวตั้งหรือแนวนอน อย่างไรก็ตามสูตรสามารถตรวจจับบาร์โค้ดแนวนอนเท่านั้น ฉันสามารถเปลี่ยนสูตรเพื่อให้ทั้งแนวตั้งและแนวนอนสามารถตรวจจับบาร์โค้ดได้
Kim

mathworks.com/matlabcentral/fileexchange/31727-barcode-readerคุณสามารถตรวจสอบลิงค์นี้ได้
vini

7

สมการของคุณเน้นพื้นที่ที่ขนาดของการไล่ระดับสีในทิศทาง X สูงกว่าในทิศทาง Y อย่างสม่ำเสมอ เพื่อให้การทำงานนี้เป็นไปในทุกทิศทางคุณอาจต้องการพื้นที่ที่ขนาดของการไล่ระดับสีในทิศทางใดก็ได้

ลองใช้สิ่งต่อไปนี้:

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

ไม่ใช่ว่านี่จะเน้นทุก ๆ ขอบ แต่ตัวกรอง low-pass จะหมายความว่าคุณต้องมีขอบหลายอันที่อยู่ติดกัน


ขอบคุณสำหรับการเข้ารหัส! แต่ฉันไม่รู้ว่าจะใส่รหัสไหนเมื่อฉันลองเปลี่ยนสูตรทุกอย่างเป็นสีเขียว

ลองรุ่นที่อัปเดตของฉัน
Nzbuu

แต่ตอนนี้ภาพทั้งหมดเปลี่ยนเป็นสีแดง !!
Kim

ฉันจัดการเพื่อให้ได้บาร์โค้ดในแนวตั้งหรือแนวนอน อย่างไรก็ตามสูตรสามารถตรวจจับบาร์โค้ดแนวนอนเท่านั้น ฉันสามารถเปลี่ยนสูตรเพื่อให้ทั้งแนวตั้งและแนวนอนสามารถตรวจจับบาร์โค้ดได้
คิม

ฉันทดสอบ furmule นี้ '' B = double (sqrt (dIx. ^ 2 + dIy. ^ 2)> 0) "มันใช้งานไม่ได้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.