1.1.1. Lý do chọn đề tài: Xét điều kiện cụ thể ở nước ta công cuộc công nghiệp hóa hiện đại hóa sử dụng ngày càng nhiều thiết bị hiện đại để điều khiển tự động các quá trình sản xuất, gia công, chế biến sản phẩm dẫn tới việc hình thành các hệ thống sản xuất linh hoạt. Mặt khác, xuất phát từ những đợt đi thực tế tại các nhà máy, các khu công nghiệp và tham quan các doanh nghiệp sản xuất đã thấy khâu tự động hóa trong quá trình sản xuất một trong những khâu tự động trong dây chuyền sản xuất tự động hóa là phân loại sản phẩm. Đặc biệt là phân loại sản phẩm theo màu sắc.
MỤC LỤC LỜI CẢM ƠN I LỜI CAM ĐOAN II MỤC LỤC i DANH SÁCH THUẬT NGỮ iv DANH SÁCH HÌNH ẢNH v MỞ ĐẦU CHƯƠNG 1: TỔNG QUAN 1.1 Lý mục đích chọn đề tài: 1.1.1 Lý chọn đề tài: 1.1.2 Đối tượng nghiên cứu: 1.1.3 Mục đích nghiên cứu: 1.1.4 Nhiệm vụ nghiên cứu: 1.1.5 Phương pháp nghiên cứu: 1.1.6 Ý nghĩa thực tiễn đề tài: 1.2 Tổng quan đề tài nghiên cứu: 1.2.1 Giới thiệu sơ lược hệ thống phân loại sản phẩm: 1.2.1.1 Một số ứng dụng hệ thống phân loại sản phẩm: 1.2.1.2 Các đề tài phân loại sản phẩm thực hiện: 1.2.2 Phân tích lựa chọn phương án thiết kế: 1.2.3 Hướng nghiên cứu cho đề tài luận văn: 10 CHƯƠNG 2: THIẾT KẾ MƠ HÌNH 11 2.1 Mơ hình tổng quan hệ thống phân loại sản phẩm: 11 2.2 Thiết kế khí mơ hình phân loại sản phẩm theo màu sắc: 11 2.2.1 Tính tốn lý thuyết thiết kế băng tải: 11 2.2.2 Thiết kế khí băng tải: 15 i 2.2.2.1 Chọn động cơ: 15 2.2.2.2 Chọn truyền: 16 2.2.2.3 Vật liệu chế tạo băng tải 18 2.2.3 Thiết kế mơ hình cấp ngun liệu: 20 2.2.3.1 Máy bơm nén khí cao áp mini 12V R5548: 20 2.2.3.2 Van khí nén xi lanh: 21 2.2.3.3 Van điện từ khí nén 5/2: 22 2.2.3.4 Van tiết lưu: 23 2.2.4 Thiết kế khí Solidworks: 24 2.2.5 Mơ hình khí thực tế: 26 2.3 Thiết kế mạch điện: 28 2.3.1 Arduino Uno R3: 28 2.3.2 Động Servo MG90S: 30 2.3.3 Mạch cầu H – L289N: 31 2.3.4 Module Relay 5V: 33 2.3.5 Thiết bị thu nhận ảnh (Webcam HD C270 Logitech): 34 2.4 Mơ hình hồn chỉnh: 35 CHƯƠNG 3: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG 37 3.1 Xử lý ảnh: 37 3.1.1 Giới thiệu chung hệ thống xử lý ảnh: 37 3.1.2 Xét bước cần thiết xử lý ảnh: 39 3.1.3 Những vấn đề hệ thống xử lý ảnh: 41 3.1.4 Hệ tọa độ màu: 42 3.1.5 Ảnh RGB thao tác Toolbox Matlab: 44 3.1.6 Các công đoạn xử lý ảnh mơ hình: 47 ii 3.2 Thiết kế giao diện người dùng Matlab: 49 3.2.1 Matlab: 49 3.2.1.1 Giới thiệu tổng quan phần mềm Matlab: 49 3.2.1.2 Cấu trúc liệu MATLAB, ứng dụng: 51 3.2.2 Giao diện GUI Matlab: 51 3.2.2.1 Giới thiệu giao diện người dùng: 51 3.2.2.2 Các thao tác với GUI: 53 3.2.2.3 Mô tả chức công cụ GUI: 54 3.2.3 Thiết kế giao diện người dùng: 57 CHƯƠNG 4: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 62 4.1 Kết quả: 62 4.1.1 Kết thực tế mơ hình: 62 4.1.2 Kết nghiên cứu đạt được: 69 4.2 Hạn chế: 69 4.3 Hướng phát triển đề tài: 69 TÀI LIỆU THAM KHẢO 71 PHỤ LỤC 72 Code nhận dạng xử lý ảnh điều khiển động 72 iii DANH SÁCH THUẬT NGỮ PWM Pulse Width Modulation (Điều chế độ rộng xung) RGB Red Green Blue (Ba màu gốc mơ hình màu) DC Direct Current (Dòng điện chiều) AC Alternating Current (Dòng điện xoay chiều) GUI Graphical User Interface (Giao diện người dùng đồ họa) iv DANH SÁCH HÌNH ẢNH Hình 1.1: Hệ thống tự phân loại hàng hóa Lazada Hình 1.2: Hệ thống tự động hóa dùng để xếp, phân loại (busbars) Hình 1.3: Dây chuyền phân loại sữa Vinamilk Hình 1.4: Dây chuyền phân loại quýt theo kích cỡ Hình 1.5: Dây chuyền sản xuất, phân loại kiểm tra lỗi gạch ống Hình 1.6: Mơ hình thực tế hệ thống phân loại sản phẩm theo chiều cao Hình 1.7: Mơ hình thực tế hệ thống phân loại sản phẩm theo hình dáng Hình 1.8: Mơ hình thực tế hệ thống phân loại sản phẩm theo màu sắc (sử dụng cảm biến màu) Hình 2.1: Mơ hình phân loại sản phẩm theo màu sắc 11 Hình 2.2: Sơ đồ lực cản chuyển động 14 Hình 2.3: Động điện DS400 16 Hình 2.4: Truyền động đai 17 Hình 2.5: Cơ cấu truyền động đai thực tế mơ hình 17 Hình 2.6: Sơ đồ truyền động đai 17 Hình 2.7: Hai pulley GT2 (20 60 răng) bước 2mm 18 Hình 2.8: Dây đai 18 Hình 2.9: Nhơm định hình 20 x 20 19 Hình 2.10: Dây băng tải 19 Hình 2.11: Ốc vít 19 Hình 2.12: Pin 9V 20 Hình 2.13: Máy bơm nén khí cao áp mini 12V R5548 20 Hình 2.14: Cấu tạo xi lanh khí nén 21 Hình 2.15: Van khí nén 5/2 23 Hình 2.16: Kí hiệu van đảo chiều 23 Hình 2.17: Van tiết lưu 23 Hình 2.18: Mơ hình thiết kế băng tải 24 Hình 2.19: Cách bố trí mơ hình băng tải 3D 24 v Hình 2.20: Mơ hình thiết kế phân loại sản phẩm theo màu sắc 3D 25 Hình 2.21: Mơ hình thiết kế cấp liệu 25 Hình 2.22: Bản vẽ thiết kế mơ hình phân loại sản phẩm theo màu sắc 26 Hình 2.23: Mơ hình cấp liệu 26 Hình 2.24: Mơ hình băng tải (nhìn từ xuống) 27 Hình 2.25: Mơ hình băng tải (nhìn theo chiều ngang) 27 Hình 2.26: Sơ đồ hệ thống điều khiển 28 Hình 2.27: Arduino Uno 29 Hình 2.28 Động Servo MG90S 31 Hình 2.29: Cách kết nối dây Servo 31 Hình 2.30: Mạch cầu H – L289N 32 Hình 2.31: Các chân mạch cầu H –L289N 33 Hình 2.32: Relay 5V 34 Hình 2.33: Webcam HD C270 Logitech 34 Hình 2.34: Ảnh chụp từ Webcam HD C270 Logitech 35 Hình 2.35: Mơ hình tổng quan hệ thống phân loại màu sắc 35 Hình 2.36: Cách bố trí mơ hình phân loại sản phẩm theo màu sắc 36 Hình 3.1: Ứng dụng xử lý ảnh nhận diện biển số xe 38 Hình 3.2: Ứng dụng xử lý ảnh Robot 38 Hình 3.3: Ứng dụng xử lý ảnh y tế 39 Hình 3.4: Sơ đồ xử lý ảnh 39 Hình 3.5: Các bước xử lý ảnh 39 Hình 3.6: Hệ tọa độ RGB 43 Hình 3.7: Ảnh chụp từ camera 47 Hình 3.8 Ảnh sau trừ số màu sắc 48 Hình 3.9: Ảnh cường độ khử nhiễu 48 Hình 3.10: Ảnh sau xử lý 49 Hình 3.11: Phần mềm Matlab 49 Hình 3.12: Giao diện phần mềm Matlab bắt đầu chạy ứng dụng 50 Hình 3.13: Sơ đồ mơ tả cách thức hoạt động GUI thao tác giao diện 52 vi Hình 3.14: Cửa sổ GUIDE Quick Start mở GUI 53 Hình 3.15: Cửa sổ GUIDE Quick Start 54 Hình 3.16: Giao diện tùy chỉnh GUI 54 Hình 3.17: Hộp thoại Inspector 56 Hình 3.18: Cách tạo file.m 57 Hình 3.19: Thiết kế giao diện người dùng cho mơ hình 57 Hình 3.20: Thay đổi giá trị ô String Select Function 58 Hình 3.21 Các thao tác thay đổi màu sắc 59 Hình 3.22: Giao diện người dùng thiết kế hồn chỉnh 59 Hình 4.1: Kết chạy thực nghiệm phân loại sản phẩm màu đỏ 62 Hình 4.2: Kết chạy thực nghiệm phân loại sản phẩm màu xanh dương 63 Hình 4.3: Kết chạy thực nghiệm phân loại sản phẩm màu xanh 63 Hình 4.4: Kết chạy thực nghiệm phân loại màu xanh xanh dương 64 Hình 4.4: Kết chạy thực nghiệm phân loại màu đỏ với màu xanh dương 64 Hình 4.5: Kết thực nghiệm nhận dạng ba màu (đỏ, xanh dương, xanh lá) 65 Hình 4.6: Kết thực nghiệm nhận dạng đa dạng hình dáng 65 Hình 4.7: Kết thực nghiệm nhận dạng xác sản phẩm cần phân loại 66 Hình 4.8: Kết thực nghiệm phân loại cà chua (màu đỏ) 67 Hình 4.9: Kết thực nghiệm phân loại cà chua (màu xanh) 67 Hình 4.10: Kết thực nghiệm phân loại chanh xanh 68 Hình 4.11: Kết thực nghiệm phân loại chanh vàng 68 vii MỞ ĐẦU Ngày nay, với phát triển mạnh mẽ khoa học công nghệ, sống người có thay đổi ngày tốt hơn, mặt khác nhu cầu nâng cao chất lượng sản phẩm làm tăng mức độ phức tạp q trình gia cơng Với xu phát triển đó, vấn đề đặt nhu cầu người thay đổi nhanh, nhu cầu sản xuất sản phẩm thay đổi liên tục Mỗi lần thay đổi việc sản xuất sản phẩm lần phải thay đổi lại toàn máy móc thiết bị, dẫn đến hệ thống sản xuất dễ bị lỗi thời Yêu cầu thiết đặt để dây chuyền sản xuất linh hoạt với nhiều chủng loại sản phẩm khác mà không cần phải thay thế, làm lại thiết bị máy móc Vì vậy, kỹ thuật điều khiển cần có sở tảng khoa học vững chắc, đảm bảo cho việc điều khiển cách nhanh chóng, xác đạt hiệu suất cao với dây chuyền sản xuất phức tạp Điều dẫn tới việc hình thành hệ thống sản xuất linh hoạt, cho phép tự động hóa mức độ cao sản xuất hàng loạt nhỏ vừa sở sử dụng máy CNC, robot cơng nghiệp Trong có khâu quan trọng ảnh hưởng đến chất lượng sản phẩm hệ thống phân loại sản phẩm Và cụ thể phân loại sản phẩm theo màu sắc Tuy nhiên hầu hết dây chuyền phân loại sản phẩm theo màu sắc áp dụng cảm biến màu để phân loại Giá thành cảm biến màu công nghiệp lớn, tốc độ xử lý chậm nhận diện nhiều màu sắc đa dạng bao bì sản phẩm Điều dẫn đến đòi hỏi phương pháp phân loại sản phẩm màu khác thay cho cảm biến màu công nghiệp vừa đáp ứng đầy đủ nhược điểm phương thức xử lý cũ Đó nhận dạng xử lý ảnh qua camera Nhận thức tầm quan trọng vận dụng kiến thức học em chọn để thực đề tài “NGHIÊN CỨU ỨNG DỤNG XỬ LÝ ẢNH PHÂN LOẠI SẢN PHẨM THEO MÀU SẮC” CHƯƠNG 1: TỔNG QUAN 1.1 Lý mục đích chọn đề tài: 1.1.1 Lý chọn đề tài: Xét điều kiện cụ thể nước ta cơng cơng nghiệp hóa đại hóa sử dụng ngày nhiều thiết bị điều khiển tự động trình sản xuất, gia cơng, chế biến sản phẩm dẫn tới việc hình thành hệ thống sản xuất linh hoạt Mặt khác, xuất phát từ đợt thực tế nhà máy, khu công nghiệp tham quan doanh nghiệp sản xuất thấy khâu tự động hóa trình sản xuất khâu tự động dây chuyền sản xuất tự động hóa phân loại sản phẩm Đặc biệt phân loại sản phẩm theo màu sắc Tuy nhiên doanh nghiệp vừa nhỏ việc tự động hóa hồn tồn chưa áp dụng khâu phân loại mà sử dụng nhân cơng, nhiều cho suất thấp chưa đạt hiệu Từ nhu cầu sản xuất thực tế trình học tập, nghiên cứu trường Đại học Kỹ thuật – Công nghệ Cần Thơ góp ý hướng dẫn thầy Đường Khánh Sơn Em chọn đề tài “NGHIÊN CỨU ỨNG DỤNG XỬ LÝ ẢNH PHÂN LOẠI SẢN PHẨM THEO MÀU SẮC” 1.1.2 Đối tượng nghiên cứu: Đối tượng nghiên cứu hệ thống phân loại sản phẩm theo màu sắc dây chuyền sản xuất tự động nhà máy xí nghiệp nước ta nay, nhà máy nhỏ, hộ gia đình hay dây chuyền sau thu hoạch, gia công sản xuất… 1.1.3 Mục đích nghiên cứu: - Tự động hóa q trình sản xuất dây chuyền Cụ thể thiết kế hệ thống dây chuyền phân loại sản phẩm theo màu thiết bị phân loại camera Đồng thời mơ hình giải vấn đề tăng khả kiểm sốt lỗi dây chuyền, phân tích màu phân loại nhà máy sản xuất sơn, gạch men, công ty dược phẩm, công ty chế biến nơng sản sau thu hoạch, đóng gói sản phẩm Vận dụng xử lý ảnh vào trình sản xuất tự động nhằm tạo suất, chất lượng giảm thiểu tối đa sức người sản xuất công nghiệp - Củng cố lại kiến thức lý thuyết học tập nghiên cứu trường - Đây luận văn tốt nghiệp để em hoàn thành chương trình học tập, nghiên cứu trường Khẳng định lực để sau trường trở thành kỹ sư có đóng góp nhiều cho công nghiệp nước nhà xã hội 1.1.4 Nhiệm vụ nghiên cứu: Với giới hạn đề tài: “NGHIÊN CỨU ỨNG DỤNG XỬ LÝ ẢNH PHÂN LOẠI SẢN PHẨM THEO MÀU SẮC” Em sâu vào nghiên cứu vấn đề sau đây: - Tìm hiểu thiết kế mơ hình hồn chỉnh phân loại sản phẩm theo màu sắc dùng camera - Tìm hiểu linh kiện (Arduino Uno, Servo MG90S, Servo GS90, mạch cầu H – L289N, mạch giảm áp DC LM2596 3A, ), vật liệu chế tạo băng tải (vật liệu khí chế tạo khung hệ thống sản phẩm, vật liệu làm băng tải, trục quay…), cấu, động cơ, camera…sử dụng mơ hình - Tìm hiểu xử lý ảnh dùng Matlab, cách xử lý nhiễu màu, điều khiển động mạch cầu H, lập trình C cho Arduino, giao tiếp máy tính Arduino Tạo giao diện người dùng Matlab để quan sát hệ thống trình vận hành cho hệ thống 1.1.5 Phương pháp nghiên cứu: Thu thập, tìm hiểu thơng tin đề tài, mơ hình thực tế có liên quan tới hệ thống phân tích, đánh giá nhằm lấy sở tạo tiền đề để thiết kế mơ hình phân loại sản phẩm theo màu sắc lập trình cho hệ thống 1.1.6 Ý nghĩa thực tiễn đề tài: Hiện nhiều nhà máy doanh nghiệp sản xuất áp dụng hệ thống phân loại sản phẩm theo màu sắc lạc hậu, chưa theo kịp với xu phát triển đáp ứng nhu cầu sản xuất nước thị trường quốc tế Chính em xin thực đề tài: “NGHIÊN CỨU ỨNG DỤNG XỬ LÝ ẢNH PHÂN LOẠI SẢN PHẨM THEO MÀU SẮC” với mong muốn đưa giải pháp nhằm cải thiện trình sản xuất cho giảm chi phí nhân cơng, tăng suất mà đảm bảo chất lượng sản phẩm, giảm giá thành sản phẩm để cạnh tranh thị trường - Áp dụng công nghệ camera giám sát phân tích màu nhà máy sản xuẩ sơn, gạch men, công ty dược phẩm, công ty chế biến nông sản - Áp dụng vào công nghệ nhận biết màu để giám sát sinh trưởng phát triển thực vật 70 TÀI LIỆU THAM KHẢO Tài liệu tham khảo tiếng Việt: [1] Hồ Văn Sung, Xử lý ảnh số - Lý thuyết thực hành với Matlab (2009), Nhà xuất Khoa học Kỹ thuật [2] Nguyễn Quang Hoan, Giáo trình Xử lý ảnh (Năm 2006), Học viện công nghệ bưu viễn thơng [3] Nguyễn Trọng Hiệp - Nguyễn Văn Lẫm, Thiết kế chi tiết máy (Năm 1999), Nhà xuất Giáo Dục [4] Phạm Đức, Máy vận chuyển liên tục (Năm 2010), Nhà xuất Giao Thông Vận Tải Tài liệu tham khảo tiếng Anh: [5] Andreas Koschan and Mongi Abidi, Detection and Classification of Edges in Color Images (2005) [6] J S Park University of Incheon, MATLAB GUI (Graphical User Interface) Tutorial for Beginners (2007) Các đề tài tham khảo: [7] Công ty TNHH Ứng dụng phát triển cơng nghệ ECAPRO, Mơ hình phân loại sản phẩm theo hình dáng [8] Lê Thị Thu Ngân, Mơ hình phân loại sản phẩm theo chiều cao (Năm 2018), Đại học Kỹ thuật – Công nghệ Cần Thơ, [9] Lưu Hiếu Nghĩa, Mơ hình phân loại sản phẩm theo màu sắc, Đại học Tôn Đức Thắng Các website tham khảo: [10].https://www.academia.edu/6938037/Xu_ly_anh_tren_matlab [11].https://www.mathworks.com/help/supportpkg/arduinoio/ug/controlservo-motors.html [12].https://www.mathworks.com/search/site_search.html?suggestion=&c% 5B%5D=entire_site&q=detect+tracking+color [13].https://quanmach.com/dieu-khien-toc-motor-dc-bang-pwm.html 71 PHỤ LỤC Code nhận dạng xử lý ảnh điều khiển động function varargout = untitled(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @untitled_OpeningFcn, 'gui_OutputFcn', @untitled_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 % End initialization code - DO NOT EDIT % - Executes just before Min is made visible function untitled_OpeningFcn(hObject, eventdata, handles, varargin) % Choose default command line output for Min handles.output = hObject; global vid axes(handles.axes2); vid = videoinput('winvideo', 1); set(vid,'ReturnedColorSpace','rgb'); triggerconfig(vid,'manual'); set(vid,'FramesPerTrigger',1 ); set(vid,'TriggerRepeat', Inf); himage=image(zeros(480,640,3),'parent',handles.axes2); preview(vid,himage); % Update handles structure guidata(hObject, handles); Timer(handles); % - Outputs from this function are returned to the command line 72 function varargout = untitled_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function Timer(handles) while find(get(0,'children')==handles.figure1) nows = fix(clock); timerStr = [num2str(nows(4)),':', num2str(nows(5)),':', num2str(nows(6))]; set(handles.text11,'String',timerStr); pause(1); end % - Executes on button press in start function start_Callback(hObject, eventdata, handles) % hObject handle to start (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global popSwitch global vid global a i=0; j=0; d=0; e=0; m=0; c=0; f=0; k=0; z=0; a=arduino('COM6'); s = servo(a, 'D6'); s1 = servo (a, 'D9'); start(vid); frame=1; %Infinite while loop Out=[]; while(1) if popSwitch == trigger(vid); %Get Image im=getdata(vid,1); if frame == red=im(:,:,1); Green=im(:,:,2); Blue=im(:,:,3); 73 Out(:,:,1)=red; Out(:,:,2)=Green; Out(:,:,3)=Blue; Out=uint8(Out); end if frame > red=im(:,:,1); Green=im(:,:,2); Blue=im(:,:,3); red1=Out(:,:,1); Green1=Out(:,:,2); Blue1=Out(:,:,3); redDiff = imabsdiff(red,red1); %get absolute diffrence between both images greenDiff = imabsdiff(Green,Green1); %get absolute diffrence between both images blueDiff = imabsdiff(Blue,Blue1); %get absolute diffrence between both images redSumRow= sum(redDiff,1); %calculate SAD greenSumRow= sum(greenDiff,1); %calculate SAD blueSumRow= sum(blueDiff,1); %calculate SAD redSAD= sum(redSumRow)/ 307200; greenSAD= sum(greenSumRow)/ 307200; blueSAD= sum(blueSumRow)/ 307200; Final=(redSAD+greenSAD+blueSAD)/3; disp(Final); if Final > set(handles.text11,'String','Change Detected') else set(handles.text11,'String','No Change') end end elseif popSwitch == trigger(vid); data = getdata(vid,1); % Now to track red objects in real time % we have to subtract the red component % from the grayscale image to extract the red components in the image diff_im = imsubtract(data(:,:,1), rgb2gray(data)); %Use a median filter to filter out noise diff_im = medfilt2(diff_im, [3 3]); % Convert the resulting grayscale image into a binary image 74 diff_im = im2bw(diff_im,0.24); % Remove all those pixels less than 300px diff_im = bwareaopen(diff_im,300); % Label all the connected components in the image bw = bwlabel(diff_im, 8); % Here we the image blob analysis % We get a set of properties for each labeled region stats = regionprops(bw, 'BoundingBox', 'Centroid'); if length(stats) > angle =0.4 writePosition(s1, angle); current_pos = readPosition(s1); current_pos = current_pos*180; fprintf('Current motor position is %d degrees\n', current_pos); num = 1; else set(handles.edit4,'String',0) angle =0.1 writePosition(s1, angle); current_pos = readPosition(s1); current_pos = current_pos*180; fprintf('Current motor position is %d degrees\n', current_pos); num=0; end if(num~=c) i=i+1; c = num; end if(i==2) f=f+1 i=0; end r = num2str(f); set(handles.edit4,'String',f) % Display the image imshow(data) hold on %This is a loop to bound the red objects in a rectangular box 75 for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), ' Y: ', num2str(round(bc(2))))); set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow'); end hold off elseif popSwitch == trigger(vid); data = getdata(vid,1); % Now to track Green objects in real time % we have to subtract the red component % from the grayscale image to extract the red components in the image diff_im = imsubtract(data(:,:,2), rgb2gray(data)); %Use a median filter to filter out noise diff_im = medfilt2(diff_im, [3 3]); % Convert the resulting grayscale image into a binary image diff_im = im2bw(diff_im,0.02); % Remove all those pixels less than 300px diff_im = bwareaopen(diff_im,300); % Label all the connected components in the image bw = bwlabel(diff_im, 8); % Here we the image blob analysis % We get a set of properties for each labeled region stats = regionprops(bw, 'BoundingBox', 'Centroid'); if length(stats1) > num1 = 1; else set(handles.edit5,'String',0) num1 = 0; end if(num1~=d) j=j+1; d = num1; 76 end if(j==2) k=k+1 j=0; end g = num2str(k); set(handles.edit5,'String',k) % Display the image imshow(data) hold on %This is a loop to bound the red objects in a rectangular box for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; rectangle('Position',bb,'EdgeColor','g','LineWidth',2) plot(bc(1),bc(2), '-m+') a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), ' Y: ', num2str(round(bc(2))))); set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow'); end hold off elseif popSwitch == trigger(vid); data = getdata(vid,1); % Now to track Blue objects in real time % we have to subtract the red component % from the grayscale image to extract the red components in the image diff_im = imsubtract(data(:,:,3), rgb2gray(data)); %Use a median filter to filter out noise diff_im = medfilt2(diff_im, [3 3]); % Convert the resulting grayscale image into a binary image diff_im = im2bw(diff_im,0.2); % Remove all those pixels less than 300px diff_im = bwareaopen(diff_im,300); % Label all the connected components in the image bw = bwlabel(diff_im, 8); 77 % Here we the image blob analysis % We get a set of properties for each labeled region stats = regionprops(bw, 'BoundingBox', 'Centroid'); if length(stats) > angle =0.55 writePosition(s, angle); current_pos = readPosition(s); current_pos = current_pos*180; fprintf('Current motor position is %d degrees\n', current_pos); num2 = 1; else set(handles.edit6,'String',0) angle =0.2 writePosition(s, angle); current_pos = readPosition(s); current_pos = current_pos*180; fprintf('Current motor position is %d degrees\n', current_pos); num2=0; end if(num2~=e) z=z+1; e = num2; end if(z==2) m=m+1 z=0; end b = num2str(m); set(handles.edit6,'String',m) % Display the image imshow(data) hold on %This is a loop to bound the red objects in a rectangular box for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; rectangle('Position',bb,'EdgeColor','b','LineWidth',2) plot(bc(1),bc(2), '-m+') a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), ' num2str(round(bc(2))))); Y: ', 78 set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow'); end hold off elseif popSwitch == trigger(vid); data = getdata(vid,1); set(handles.text16,'String','RGB DETECTING') diff_im = imsubtract(data(:,:,1), rgb2gray(data)); %Use a median filter to filter out noise diff_im = medfilt2(diff_im, [3 3]); % Convert the resulting grayscale image into a binary image diff_im = im2bw(diff_im,0.24); % Remove all those pixels less than 300px diff_im = bwareaopen(diff_im,300); % Label all the connected components in the image bw = bwlabel(diff_im, 8); % Here we the image blob analysis % We get a set of properties for each labeled region stats = regionprops(bw, 'BoundingBox', 'Centroid'); if length(stats) > angle =0.4 writePosition(s1, angle); current_pos = readPosition(s1); current_pos = current_pos*180; fprintf('Current motor position is %d degrees\n', current_pos); num = 1; else set(handles.edit4,'String',0) angle =0.1 writePosition(s1, angle); current_pos = readPosition(s1); current_pos = current_pos*180; fprintf('Current motor position is %d degrees\n', current_pos); num=0; end if(num~=c) i=i+1; 79 c = num; end if(i==2) f=f+1 i=0; end r = num2str(f); set(handles.edit4,'String',f) % Display the image %imshow(data) % Now to track Blue objects in real time % we have to subtract the red component % from the grayscale image to extract the red components in the image diff_im1 = imsubtract(data(:,:,2), rgb2gray(data)); %Use a median filter to filter out noise diff_im1 = medfilt2(diff_im1, [3 3]); % Convert the resulting grayscale image into a binary image diff_im1 = im2bw(diff_im1,0.15); % Remove all those pixels less than 300px diff_im1 = bwareaopen(diff_im1,10000); % Label all the connected components in the image bw1 = bwlabel(diff_im1, 8); % Here we the image blob analysis % We get a set of properties for each labeled region stats1 = regionprops(bw1, 'BoundingBox', 'Centroid'); if length(stats1) > num1 = 1; else set(handles.edit5,'String',0) num1 = 0; end if(num1~=d) j=j+1; d = num1; end if(j==2) k=k+1 j=0; 80 end g = num2str(k); set(handles.edit5,'String',k) diff_im2 = imsubtract(data(:,:,3), rgb2gray(data)); %Use a median filter to filter out noise diff_im2 = medfilt2(diff_im2, [3 3]); % Convert the resulting grayscale image into a binary image diff_im2 = im2bw(diff_im2,0.24); % Remove all those pixels less than 300px diff_im2 = bwareaopen(diff_im2,15000); % Label all the connected components in the image bw2 = bwlabel(diff_im2, 8); % Here we the image blob analysis % We get a set of properties for each labeled region stats2 = regionprops(bw2, 'BoundingBox', 'Centroid'); if length(stats2) > angle =0.55 writePosition(s, angle); current_pos = readPosition(s); current_pos = current_pos*180; fprintf('Current motor position is %d degrees\n', current_pos); num2 = 1; else set(handles.edit6,'String',0) angle =0.2 writePosition(s, angle); current_pos = readPosition(s); current_pos = current_pos*180; fprintf('Current motor position is %d degrees\n', current_pos); num2=0; end if(num2~=e) z=z+1; e = num2; end if(z==2) m=m+1 z=0; end b = num2str(m); set(handles.edit6,'String',m) 81 % Display the image imshow(data) hold on %This is a loop to bound the red objects in a rectangular box for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), ' Y: ', num2str(round(bc(2))))); set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow'); end for object1 = 1:length(stats1) bb1 = stats1(object1).BoundingBox; bc1 = stats1(object1).Centroid; rectangle('Position',bb1,'EdgeColor','g','LineWidth',2) plot(bc1(1),bc1(2), '-m+') a1=text(bc1(1)+15,bc1(2), strcat('X1: ', num2str(round(bc1(1))), ' Y1: ', num2str(round(bc1(2))))); set(a1, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow'); end for object2 = 1:length(stats2) bb2 = stats2(object2).BoundingBox; bc2 = stats2(object2).Centroid; rectangle('Position',bb2,'EdgeColor','b','LineWidth',2) plot(bc2(1),bc2(2), '-m+') a2=text(bc2(1)+15,bc2(2), strcat('X2: ', num2str(round(bc2(1))), ' Y2: ', num2str(round(bc2(2))))); set(a2, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow'); end hold off end 82 disp(frame); frame=frame+1; if frame == 1500 break end end % - Executes on button press in stop function stop_Callback(hObject, eventdata, handles) global vid stop(vid); flushdata(vid); clear all; close all function edit4_Callback(hObject, eventdata, handles) % - Executes during object creation, after setting all properties function edit4_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit5_Callback(hObject, eventdata, handles) % - Executes during object creation, after setting all properties function edit5_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit6_Callback(hObject, eventdata, handles) % - Executes during object creation, after setting all properties function edit6_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % - Executes on selection change in popupmenu1 83 function popupmenu2_Callback(hObject, eventdata, handles) global popSwitch sw = get(handles.popupmenu2,'value'); popSwitch = sw; assignin('base','popSwitch',sw); % - Executes during object creation, after setting all properties function popupmenu2_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % - Executes on button press in Startmotor function Startmotor_Callback(hObject, eventdata, handles) global a; writePWMVoltage(a,'D3',2); writeDigitalPin(a,'D4',1); writeDigitalPin(a,'D5',0); % - Executes on button press in stopmotor function Stopmotor_Callback(hObject, eventdata, handles) global a; writePWMVoltage(a,'D3',0) writeDigitalPin(a,'D4',1); writeDigitalPin(a,'D5',0); 84 ... trọng ảnh hưởng đến chất lượng sản phẩm hệ thống phân loại sản phẩm Và cụ thể phân loại sản phẩm theo màu sắc Tuy nhiên hầu hết dây chuyền phân loại sản phẩm theo màu sắc áp dụng cảm biến màu để phân. .. Em chọn đề tài “NGHIÊN CỨU ỨNG DỤNG XỬ LÝ ẢNH PHÂN LOẠI SẢN PHẨM THEO MÀU SẮC” 1.1.2 Đối tượng nghiên cứu: Đối tượng nghiên cứu hệ thống phân loại sản phẩm theo màu sắc dây chuyền sản xuất tự động... chuyển sản phẩm Để phân loại sản phẩm theo màu sắc băng tải, ta sử dụng cảm biến màu Khi sản phẩm cần phân loại qua cảm biến phát màu Sử dụng hai servo để phân loại sản phẩm vào thùng chứa sản phẩm