MÔ PHỎNG NHẬN DIỆN MÃ VẠCH TRÊN SẢN PHẨM MỤC LỤC DANH MỤC CÁC HÌNH VẼ V DANH MỤC CÁC BẢNG BIỂU .VI DANH MỤC CÁC TỪ VIẾT TẮT VII CHƯƠNG ẢNH SỐ 1.1 ẢNH SỐ LÀ GÌ? 1.2 XỬ LÝ ẢNH VỚI MATLAB 1.3 CÁC HÀM XỬ LÝ ẢNH TRONG MATLAB CHƯƠNG MÃ VẠCH TRÊN SẢN PHẨM 15 2.1 LỊCH SỬ HÌNH THÀNH VÀ PHÁT TRIỂN MÃ VẠCH 15 2.2 MÃ VẠCH LÀ GÌ? 16 2.2.1 Phân loại mã vạch 16 2.2.2 Cấu tạo mã vạch 19 CHƯƠNG NỘI DUNG CỦA ĐỀ TÀI 21 3.1 MỤC ĐÍCH .21 3.2 SƠ ĐỒ KHỐI 21 3.3 SƠ ĐỒ GIẢI THUẬT 22 CHƯƠNG KẾT QUẢ MÔ PHỎNG 23 4.1 TẠO GIAO DIỆN GUI .23 4.2 MÔ PHỎNG 24 CHƯƠNG KẾT LUẬN 26 5.1 KẾT LUẬN .26 5.2 HƯỚNG PHÁT TRIỂN .26 TÀI LIỆU THAM KHẢO 27 PHỤ LỤC A 28 DANH MỤC CÁC HÌNH VẼ HÌNH 1-1: CÁC GIAI ĐOẠN XỬ LÝ ẢNH HÌNH 1-2: CÁC GIAI ĐOẠN XỬ LÝ ẢNH TRONG MATLAB .3 HÌNH 2-1: VÍ DỤ MÃ VẠCH UPC 17 HÌNH 2-2: MÃ VẠCH EAN-13 .18 HÌNH 2-3: QUY TẮC MÃ VẠCH CỦA SỐ - 20 HÌNH 3-1: SƠ ĐỒ KHỐI 21 HÌNH 3-2: SƠ ĐỒ GIẢI THUẬT 22 HÌNH 4-1: GIAO DIỆN GUI BAN ĐẦU .23 HÌNH 4-2: GIAO DIỆN GUI KHI CHẠY .23 HÌNH 4-3: HÌNH ẢNH ĐƯỢC ĐƯA VÀO TỪ DATA BASE .24 HÌNH 4-4: HÌNH ẢNH QUA BỘ XỬ LÝ 24 HÌNH 4-5: KẾT QUẢ XUẤT RA MÀN HÌNH .24 HÌNH 4-6: HÌNH ẢNH ĐƯỢC ĐƯA VÀO TỪ CAMERA MÁY TÍNH 25 HÌNH 4-7: KẾT QUẢ XUẤT RA MÀ HÌNH 25 DANH MỤC CÁC BẢNG BI BẢNG 2-1: GIÁ TRỊ SỐ 0-9 THEO BỘ MÃ A,B,C .18 BẢNG 2-2: VẠCH BIÊN VÀ VẠCH GIỮA 19 Y DANH MỤC CÁC TỪ VIẾT TẮT CCIR CGA CMYK EAN RGB UPC Campaign for Comprehensive Immigration Reform Color Graphic Adaptor) Cyan – Magenta – Yellow - Key European Article Number Hệ màu Red – Green - Blue Universal Product Code Trang 1/41 CHƯƠNG ẢNH SỐ 1.1 Ảnh số gì? Ảnh số tập hợp hữu hạn các điểm ảnh với mức xám phù hợp dùng để mô tả ảnh gần với ảnh thật Số điểm ảnh xác định độ phân giải của ảnh, ảnh có độ phân giải cao thể rõ nét các đặc điểm của tấm hình, làm cho tấm ảnh trở nên thực sắc nét a Điểm ảnh (Picture Element) Điểm ảnh (Pixel) một phần tử của ảnh số tại tọa độ (x, y) với độ xám hoặc màu nhất định Kích thước khoảng cách giữa các điểm ảnh đó được chọn thích hợp cho mắt người cảm nhận sự liên tục về không gian mức xám ( hoặc màu) của ảnh số gần ảnh thật Mỗi phần tử ma trận được gọi một phần tử ảnh b Mức xám của ảnh Mức xám kết quả của sự biến đổi tương ứng giá trị độ sáng của điểm ảnh với gía trị nguyên dương Thông thường nó xác định [0, 255] tùy thuộc vào giá trị mà mỗi điểm ảnh được biểu diễn Các thang giá trị mức xám thông thường: 16, 32, 64, 128, 256 Mức 256 mức phở dụng từ ky thuật máy tính dùng byte (8 bit) để biểu diễn mức xám Mức xám dùng một byte biểu diễn : 28 = 256 mức, tức từ đến 255 c Độ phân giải của ảnh Độ phân giải của ảnh (Resolution) của ảnh mật độ điểm ảnh được ấn định một ảnh số được hiển thị Khoảng cách giữa các điểm ảnh phải được chọn cho mắt người vẫn thấy được sự liên tục của ảnh Việc lựa chọn khoảng cách thích hợp tạo nên một mật độ phân bố, đó chính độ phân giải được phân bố theeo trục x y không gian chiều Ví dụ: Độ phân giải của ảnh hình CGA (Color Graphic Adaptor) mợt lưới điểm theo chiều ngang hình: 320 điểm chiều dọc*200 điểm ảnh (320*200) Rõ ràng cùng hình CGA 12” ta nhận thấy mịn hình CGA 17” MÔ PHỎNG NHẬN DIỆN MÃ VẠCH TRÊN SẢN PHẨM Trang 2/41 đợ phân giải 320*200 Vì cùng mợt mật đợ diện tích mà hình rợng đợ mịn ( độ liên tục của các điểm) kém d Các cách phân loại ảnh Ảnh nhị phân: Giá trị xám của tất cả các điểm ảnh chỉ nhận giá trị hoặc vậy mỗi điểm ảnh ảnh nhị phân được biểu diễn bởi bit Ảnh xám: Giá trị xám nằm [0, 255] vậy mỗi điểm ảnh ảnh nhị phân được biểu diễn bởi byte Ảnh màu: - Hệ màu RGB: Một pixel được biểu diễn giá trị (R, G, B) đó R, G, B một giá trị xám được biểu biểu diễn byte Khi đó ta có một ảnh 24 bits P(x, y) = (R, G, B) – Hệ màu CMY: phần bù của hệ màu RGB (C, M, Y) = (1, 1, 1) – (R, G, B) Hay C+R=M+G=Y+B=1 => Hệ màu thường được dùng máy in – Hệ màu CMYK đó K độ đậm nhạt của màu K= min(C, M, Y) P(x, y) = (C-K, M-K, V-K, K) e Các giai đoạn xử lý ảnh Hình 1-1: Các giai đoạn xử lý ảnh MƠ PHỎNG NHẬN DIỆN MÃ VẠCH TRÊN SẢN PHẨM Trang 3/41 1.2 Xử lý ảnh với Matlab a Xử lý ảnh Đầu tiên, hình ảnh từ thế giới bên ngồi được các thiết bị thu nhận, ghi hình ảnh camera, máy chụp hình, máy quét, Trước đây, ảnh thu qua Camera các ảnh tương tự (loại Camera ống kiểu CCIR) Giờ đây, với sự phát triển của công nghệ, ảnh màu hoặc đen trắng được lấy từ Camera, sau đó nó được chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo Ngoài ra, ảnh có thể tiếp nhận từ vệ tinh, b Các giai đoạn xử lý ảnh Hình 1-2: Các giai đoạn xử lý ảnh matlab - Thu nhận ảnh (Image Acquisition): Ảnh được thu từ các nguồn máy ảnh, máy quay phim, máy quét, ảnh vệ tinh…Ảnh có thể ảnh màu hoặc trắng đen, chất lượng ảnh phụ tḥc vào thiết bị thu nhận hình ảnh - Tiền xử lý (Image Processing): Sau ảnh được thu vào được xử lý để chất lượng ảnh tốt lên qua việc điều chỉnh độ chiếu sáng, hiệu chỉnh giá trị độ sáng giữa nền đối tượng, giảm nhỏ thành phần nhiễu, điều chỉnh bọ lọc khuếch đại - Phân đoạn (Segmentation): tách ảnh đầu vào thành các vùng đói tượng khác - Biểu diễn ảnh (Image Representation): Đầu ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh (ảnh phân đoạn) cộng với mã liên kết với MÔ PHỎNG NHẬN DIỆN MÃ VẠCH TRÊN SẢN PHẨM Trang 4/41 các vùng lận cận Các số liệu được biến đổi thành các dạng thích hợp cho việc xử lý tiếp theo máy tính, sau đó ảnh được chọn các tích chất để thể hay gọi trích chọn đặc trưng (Feature Selection) gắn với việc tách các đặc tính của ảnh dưới dạng các thông tin định lượng hoặc làm sở để phân biệt lớp đối tượng với đối tượng khác phạm vi ảnh nhận được - Nhận dạng nội suy ảnh (Image Recognition and Interpretation): nhận dạng quá trình xác định ảnh cách so sánh với mẫu chuẩn được chọn hoặc lưu từ trước Nội suy phán đoán ảnh theo ý nghĩa sở nhận dạng Các đối tượng nhận dạng phổ biến được áp dụng khoa học công nghệ: nhận dạng ký tự( chữ viết tay, chữ in, chữ ký điện tử), nhận dạng văn bản, nhận dạng hình ảnh ( vân tay, mặt người, mã vạch, ) - Cơ sở tri thức (Knowledge Base): Một đối tượng khá phức tạp về đường nét, độ sáng tối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu Trong nhiều khâu xử lý phân tích ảnh cần đơn giản hóa các phương pháp toán học đảm bảo tiện lợi cho xử lý giống quy trình tiếp nhận xử lý ảnh theo cách của người, ở các sở tri thức được phát huy - Mô tả phát huy: Ảnh sau được số hóa được chuyển sang khu vực lưu trữ phục vụ cho các công đoạn tiếp theo Nếu lưu trữ trực tiếp từ ảnh thơ dung lượng lưu trữ rất lớn, vậy cần mơ tả, biểu diễn cho dung lượng lưu trữ thấp nhất, để tiết kiệm bộ nhớ tiết kiệm thời gian làm việc c Các kiểu ảnh Matlab Ảnh được định chỉ số (Indexed Images) Một ảnh chỉ số bao gồm một ma trận dữ liệu X ma trận bản đồ màu map Ma trận dữ liệu có thể có kiểu thuộc lớp uint8, uint16 hoặc kiểu double Ma trận bản đồ màu một mảng mx3 kiểu double bao gồm các giá trị dấu phẩy MÔ PHỎNG NHẬN DIỆN MÃ VẠCH TRÊN SẢN PHẨM Trang 5/41 động nằm giữa Mỗi hàng của bản đồ chỉ các giá trị red, green blue của một màu đơn Một ảnh chỉ số sử dụng ánh xạ trực tiếp giữa giá trị của pixel ảnh tới giá trị bản đồ màu Màu sắc của mỗi pixel ảnh được tính toán cách sử dụng giá trị tương ứng của X ánh xạ tới một giá trị chỉ số của map Giá trị chỉ hàng đầu tiên, giá trị chỉ hàng thứ hai bản đồ màu … Một bản đồ màu thường được chứa cùng với ảnh chỉ số được tự động nạp cùng với ảnh sử dụng hàm imread để đọc ảnh Tuy nhiên, không bị giới hạn sử dụng bản đồ màu mặc định, có thể sử dụng bất kì bản đồ màu Ảnh cường đợ (Intensity Images) Một ảnh cường độ một ma trận dữ liệu ảnh I mà giá trị của nó đại diện cho cường độ một số vùng đó của ảnh Matlab chứa một ảnh cường độ một ma trận đơn, với mỗi phần tử của ma trận tương ứng với một pixel của ảnh Ma trận có thể thuộc lớp double, uint8 hay uint16 Trong ảnh cường độ hiếm được lưu với bản đồ màu, Matlab sử dụng bản đồ màu để hiển thị chúng Những phần tử ma trận cường độ đại diện cho các cường độ khác hoặc độ xám Những điểm có cường độ thường được đại diện màu đen cường độ 1,255 hoặc 65535 thường đại diện cho cường độ cao nhất hay màu trắng Ảnh nhị phân (Binary Images) Trong một ảnh nhị phân, mỗi pixel chỉ có thể chứa một hai giá trị nhị phân hoặc Hai giá trị tương ứng với bật hoặc tắt (on hoặc off) Một ảnh nhị phân được lưu trữ một mảng logic của Ảnh RGB (RGB Images) Một ảnh RGB – thường được gọi true-color, được lưu trữ Matlab dưới dạng một mảng dữ liệu có kích thước chiều mxnx3 định nghĩa các giá trị màu red, green blue cho mỗi pixel riêng biệt Màu của mỡi pixel được MƠ PHỎNG NHẬN DIỆN MÃ VẠCH TRÊN SẢN PHẨM Trang 27/41 TÀI LIỆU THAM KHẢO Tiếng Việt: [1] L M Bá, N T Thủy, “Nhập môn xử lý ảnh,” Trường Đại học Bách Khoa Hà Nội, 2008 [2] http://baohothuonghieu.com/banquyen/tin-chi-tiet/cau-tao-ma-so-ma- vach/204.html Tiếng Anh: [3] R.C Gonzalez, and R E Woods, “Digital Image Processing,” vol 2, Prentice Hall, 2002 [4] R.C Gonzalez, R E Woods, “Digital Image Processing using Matlab” [5] https://www.mathworks.com/ [6] https://en.wikipedia.org/wiki/Barcode MÔ PHỎNG NHẬN DIỆN MÃ VẠCH TRÊN SẢN PHẨM Trang 28/41 PHỤ LỤC A Dựa yêu cầu đặt của đề tài, ta xây dựng nên đoạn code cần thiết function varargout = GRADUATE_PROJECT(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @GRADUATE_PROJECT_OpeningFcn, 'gui_OutputFcn', @GRADUATE_PROJECT_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end function GRADUATE_PROJECT_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); function varargout = GRADUATE_PROJECT_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function edit1_Callback(hObject, eventdata, handles) function edit1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function Vertical_edit_Callback(hObject, eventdata, handles) function Vertical_edit_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function Obelique_edit_Callback(hObject, eventdata, handles) function Obelique_edit_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end MÔ PHỎNG NHẬN DIỆN MÃ VẠCH TRÊN SẢN PHẨM Trang 29/41 function Result_Callback(hObject, eventdata, handles) doc=get(handles.Horizontal_edit,'String'); ngang=get(handles.Vertical_edit,'String'); cheo=get(handles.Obelique_edit,'String'); doc=str2num(doc); ngang=str2num(ngang); cheo=str2num(cheo); linengang=doc+1; linedoc=ngang+1; linecheo=cheo+1; S = handles.S; I=rgb2gray(S); I = imadjust(I); I=im2bw(I); hang=size(I,1); cot=size(I,2); for i=1:(linengang-1) x=[0 cot]; y=[i*(hang/linengang) i*(hang/linengang)]; line(x,y,'Color','m'); end for i=1:(linedoc-1) y=[0 hang]; x=[i*(cot/linedoc) i*(cot/linedoc)]; line(x,y,'Color','y'); end for i=1:(linecheo-1) dt=round(i*((hang+cot)/linecheo)); x=[0 dt]; y=[dt 0]; line(x,y,'Color','b'); end for i=1:(linecheo-1) dt=round(i*((hang+cot)/linecheo)); x=[cot-dt cot]; y=[0 dt]; line(x,y,'Color','g'); end %+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++ %theo cac duong ngang biendung1=0; for i=1:(linengang-1) biendung1=biendung1+1; x=[0 cot]; y=[i*(hang/linengang) i*(hang/linengang)]; %line(x,y); c=ngangtp(i,linengang,hang,cot,I); td=solandoi(c); if (td < 28)|(td==11) continue; MÔ PHỎNG NHẬN DIỆN MÃ VẠCH TRÊN SẢN PHẨM Trang 30/41 end s=tongmoivach(c,td); if length(s)==11 continue; end [k,g]=nhieutrenduoi(s); mau=s(k); q=s./mau; p=round(q); mau1=s(k+1); q1=s./mau1; p1=round(q1); sokytu=round((td-k-g)/10); sovach=td-k-g; sodata=round((td-k-g-19)/6); if (td-g-k)==57 & p(k)==1 & p(k+1)==1 & p(k+2)==1 result=ean13(p,k) line(x,y,'Color','r','LineWidth',4); if result==[1 6] c=ngangpt(i,linengang,hang,cot,I); td=solandoi(c); s=tongmoivach(c,td); [k,g]=nhieutrenduoi(s); mau=s(k); q=s./mau; p=round(q); result=ean13(p,k) line(x,y,'Color','r','LineWidth',4); end break; elseif rem(sovach,10)==7 & p(k)==1 & p(k+1)~=1 & p(k+2)==1 & (p(k+3)==1)&(p(k+4)~=1)&(p(k+5)==1)&(p(k+6)~=1)&(p(k+7)==1)&(p(k+8 )==1) result=code39(sokytu,p,k); line(x,y,'Color','r','LineWidth',4); break; elseif rem(sovach,10)==7 & p(k)==1 & p(k+1)==1 & p(k+2)~=1 & (p(k+3)==1)&(p(k+4)~=1)&(p(k+5)==1)&(p(k+6)==1)&(p(k+7)~=1)&(p(k+8 )==1) c=ngangpt(i,linengang,hang,cot,I); td=solandoi(c); s=tongmoivach(c,td); [k,g]=nhieutrenduoi(s); mau=s(k); q=s./mau; p=round(q); sokytu=round((td-k-g)/10); result=code39(sokytu,p,k); line(x,y,'Color','r','LineWidth',4); break; elseif p1(k)==2 & p1(k+1)==1 & p1(k+2)==1 & p1(k+3)==2 & p1(k+4)==3 & p1(k+5)==2 MÔ PHỎNG NHẬN DIỆN MÃ VẠCH TRÊN SẢN PHẨM Trang 31/41 result=code128C(sodata,p1,k); line(x,y,'Color','r','LineWidth',4); break; elseif p1(k)==2 & p1(k+1)==1 & p1(k+2)==1 & p1(k+3)==1 & p1(k+4)==3 & p1(k+5)==3 & p1(k+6)==2 c=ngangpt(i,linengang,hang,cot,I); td=solandoi(c); s=tongmoivach(c,td); [k,g]=nhieutrenduoi(s); mau1=s(k+1); q1=s./mau1; p1=round(q1); result=code128C(sodata,p1,k); line(x,y,'Color','r','LineWidth',4); break; end end %+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++ %theo cac duong doc biendung2=0; for i=1:(linedoc-1) if biendung1