1. Trang chủ
  2. » Luận Văn - Báo Cáo

NHẬN DẠNG GIỐNG LÚA THÔNG QUA HÌNH DẠNG VÀ MÀU SẮC

79 297 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 79
Dung lượng 4,44 MB
File đính kèm NGUY_N M_NH TU_N - CH_ THÀNH NGHI.rar (4 MB)

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NÔNG LÂM THÀNH PHỐ HỒ CHÍ MINH KHĨA LUẬN TỐT NGHIỆP NHẬN DẠNG GIỐNG LÚA THƠNG QUA HÌNH DẠNG VÀ MÀU SẮC Họ tên sinh viên: CHẾ THÀNH NGHI NGUYỄN MẠNH TUẤN Ngành: CƠ ĐIỆN TỬ Niên khóa: 2014 - 2018 Tháng năm 2018 HỆ THỐNG NHẬN DẠNG GIỐNG LÚA THƠNG QUA HÌNH DẠNG VÀ MÀU SẮC TÁC GIẢ NGUYỄN MẠNH TUẤN - CHẾ THÀNH NGHI Khóa luận tốt nghiệp đệ trình đáp ứng yêu cầu cấp Kỹ sư ngành Cơ Điện Tử Giáo viên hướng dẫn: Th.s TRẨN THỊ KIM NGÀ Tháng 06 năm 2018 LỜI CẢM ƠN Em xin trân trọng cảm ơn tất quý thầy cô trường Đại học Nông Lâm TP.Hồ Chí Minh q Thầy Cơ khoa Cơ Khí - Công Nghệ trang bị cho em kiến thức quý báu giúp đỡ em suốt trình học tập trường Em xin chân thành cảm ơn thầy cô môn Cơ Điện Tử giúp đỡ chúng em nhiệt tình thời gian thực đề tài Em xin bày tỏ biết ơn chân thành cô Trần Thị Kim Ngà tận tình hướng dẫn em suốt q trình làm Khóa luận tốt nghiệp Đặc biệt, em xin cảm ơn quý thầy cô hội đồng dành thời gian nhận xét góp ý để luận văn em hoàn thiện Cuối cùng, em xin gửi lời cảm ơn đến người thân bạn bè động viên, ủng hộ tạo cho em điều kiện thuận lợi suốt q trình hồn thành khóa luận TPHCM, ngày….tháng 06 năm 2018 Sinh viên thực NGUYỄN MẠNH TUẤN CHẾ THÀNH NGHI TÓM TẮT Đề tài nghiên cứu “nhận dạng giống lúa thơng qua hình dạng màu sắc” thực trường Đại Học Nông Lâm Thành Phố Hồ Chí Minh, thời gian từ tháng đến tháng năm 2018 Để thực đề tài, nhóm nghiên cứu tiến hành tìm hiểu số giống lúa trồng phổ biến khu vực đồng sông Cửu Long Tây Nguyên Sau trình tìm hiểu, nghiên cứu chọn lọc nhóm chọn năm giống lúa với đặc trưng hình dạng, màu sắc trội giống Năm giống lúa chọn là: OM4500, IR4625, đài thơm 8, lúa thơm RVT, HT1 Sau chọn năm giống lúa nhóm tiến hành nghiên cứu, chế tạo mơ hình hộp thu ảnh lựa chọn webcam thu ảnh phù hợp, qua trình tìm hiểu tiếp thu số nguồn ý kiến nhóm chọn Webcam Logitech C310 với phân giải 5.0 MP Tuy nhiên với kích thước hạt lúa thực tế khác nhỏ việc trích xuất đặc trưng gặp khó khăn để thuận lợi cho việc trích xuất trên, nhóm lắp thêm thấu kính lồi (kính lúp) với độ phóng đại 2x Đảm bảo ảnh thu có chất lượng tốt, giúp cho việc trích xuất đặc trưng trở nên thuận lợi xác phục vụ cho trình nhận dạng giống lúa Với kiến thức trang bị xử lý ảnh điều khiển nhóm tiến hành dùng phần mềm Matlab giao tiếp với phần cứng board Arduino thông qua phần mềm Arduino IDE để nhận dạng hiển thị tên giống lúa lên LCD Phần mềm Matlab với khả tính tốn nhanh dễ sử dụng việc xử lý ảnh hạt lúa trích xuất đặc trưng hạt lúa, Matlab hổ trợ thiết kế GUIDE giao diện điều khiển nhận dạng hiển thị Sau trích xuất đặc trưng hình dạng màu sắc giống nhóm tiến hành lưu lại đặc trưng để tạo sở liệu, đồng thời tìm hiểu, nghiên cứu sử dụng Neural Network Tool Matlab để huấn luyện sở liệu tạo, Neural Network Tool gói cơng cụ cho phép việc huấn luyện, xây dựng mạng nơ ron nhân tạo nhằm nhận dạng năm giống lúa nêu MỤC LỤC LỜI CẢM ƠN .ii TÓM TẮT iii MỤC LỤC iv DANH SÁCH CÁC CHỮ VIẾT TẮT viii DANH SÁCH CÁC HÌNH ix DANH SÁCH CÁC BẢNG xi Chương MỞ ĐẦU 1.1 Đặt vấn đề 1.2 Mục đích 1.3 Những nội dung thực .2 Chương TỔNG QUAN .3 2.1 Một số nghiên cứu liên quan 2.2 Một số khái niệm xử lý ảnh .3 2.2.1 Phần tử ảnh .3 2.2.2 Mức xám ảnh 2.3 Ảnh 2.3.1 Ảnh nhị phân 2.3.2 Ảnh xám 2.3.3 Ảnh màu 2.4 Độ phân giải 2.5 Tổng quan hệ thống xử lý ảnh 2.5.1 Các thiết bị thu nhận ảnh 2.5.2 Khái niệm camera 2.5.3 Phân loại camera .7 2.5.4 Thu nhận ảnh số hóa 10 2.5.5 Lưu trữ ảnh 10 2.5.6 Phân tích ảnh 10 2.5.7 Hệ định 14 2.6 Phần mềm Matlab ứng dụng xử lý ảnh 15 2.6.1 Khái niệm Matlab 15 2.6.2 Giao diện Matlab 15 2.6.3 Khả ứng dụng Matlab 16 2.6.4 ToolBox hỗ trợ việc xử lý ảnh .16 2.7 Phần mềm Solidworks ứng dụng thiết kế mơ hình 16 2.7.1 Phần mềm Solidworks 16 2.7.2 Giao diện Solidworks 17 2.7.3 Khả ứng dụng Solidworks 17 2.8 Lý thuyết mạng neural nhân tạo 18 2.8.1 Giới thiệu mạng neural 18 2.8.2 Mơ hình neural nhân tạo 19 2.8.2.1 Cấu tạo neural sinh học 19 2.8.2.2 Cấu tạo neural nhân tạo 21 2.8.2.3 Các kiểu hàm kích hoạt 22 2.8.2.4 Các loại mạng neural 22 2.8.3 Luật học Perceptron 24 2.8.3.1 Khái niệm .24 2.8.3.2 Luật học Perceptron .24 2.9 Ứng dụng Neural Networks Toolbox tạo sở liệu 26 2.10 Các thiết bị điện tử .28 2.10.1 Modul I2C 28 2.10.2 Arduino Uno R3 29 2.10.3 Liquid Crystal Display (LCD) 29 2.10.4 Sơ đồ kết nối điều khiển LCD 30 Chương PHƯƠNG TIỆN VÀ PHƯƠNG PHÁP NGHIÊN CỨU 31 3.1 Thời gian thực đề tài 31 3.2 Đối tượng thiết bị nghiên cứu 32 3.2.1 Đối tượng nghiên cứu 32 3.2.2 Thiết bị nghiên cứu .32 3.3 Phương pháp nghiên cứu .32 Chương KẾT QUẢ VÀ THẢO LUẬN 33 4.1 Thiết kế sơ đồ khối toàn hệ thống 33 4.1.1 Sơ đồ khối .33 4.1.2 Hộp thu ảnh 33 4.1.3 Camera sử dụng 34 4.1.4 Kính lúp 35 4.1.5 Thiết kế mơ hình hộp thu ảnh 35 4.1.5.1 Vỏ hộp ảnh cửa hộp 36 4.1.5.2 Đế hộp miếng đỡ kính lúp 36 4.1.5.3 Hộp chứa vi điều khiển 37 4.1.5.6 Hộp ảnh 38 4.1.4.7 Hình ảnh thực tế hộp ảnh 39 4.2 Xử lý ảnh .40 4.2.1 Sơ đồ khối trình xử lý .40 4.2.2 Cơ sở liệu 40 4.2.3 Quá trình xử lý ảnh .41 4.2.3.1 Thu ảnh 41 4.2.3.2 Chuyển ảnh xám 42 4.2.3.3 Chuyển ảnh nhị phân tách biên hạt lúa 42 4.2.3.4 Trích xuất đặc trưng hình dạng màu sắc 43 4.2.3.5 Các kết tính đặc trưng hình dạng màu sắc 45 4.2.3.6 Lưu đồ giải thuật trình xử lý ảnh .46 4.3 Mạng neural nhân tạo 46 4.4 Nhận dạng 48 4.4.1 Lưu đồ giải thuật trình nhận dạng 49 4.4.2 Nhận dạng giống lúa .49 4.5 Kết khảo nghiệm thực tế .51 Chương KẾT LUẬN VÀ ĐỀ NGHỊ .52 5.1 Kết đạt 52 5.2 Hướng phát triển đề tài 52 TÀI LIỆU THAM KHẢO PHỤ LỤC  Code MATLAB xử lý ảnh train liệu  Code MATLAB nhận dạng giống lúa  Code MATLAB nhận dạng 12  Code Arduino hiển thị LCD .13 DANH SÁCH CÁC CHỮ VIẾT TẮT MATLAB Matrix Laboratory GUI Graphical User Interface COM Component Object Model IP Internet Protocol NNTOOL Neural Network Tool LCD Liquid Crystal Display CCIR Consultive Commottee for International Radino CCD Charge Coupled Device CMOS Complimentary Metal-Oxide Semiconductor HLS Hue Lightness Saturation CIE Commision Internationael de l’Éclairage HSV Hue Saturation Value RGB Red Green Blue DANH SÁCH CÁC HÌN Hình 2.1 Điểm ảnh Hình 2 Ma trận biểu diễn ảnh nhị phân Hình Ma trận biểu diễn ảnh xám Hình Ma trận biểu diễn mức xám thành phần RED .5 Hình Ma trận biểu diễn mức xám thành phần GREEN Hình Ma trận biểu diễn mức xám thành phần BLUE .6 Hình Mơ hình xử lý ảnh .7 Hình Camera có dây .8 Hình Camera khơng dây .9 Hình 10 IP Camera Hình 11 Mơ hình không gian màu RGB 11 Hình 12 Mơ hình màu HLS 12 Hình 13 Mơ hình màu Lab 12 Hình 14 Biến đổi Fourier 13 Hình 15 Giao diện Matlab .15 Hình 16 Giao diện Solidworks 17 Hình 17 Mơ hình mạng neural sinh học 18 Hình 18 Mơ hình nơ-ron sinh học 19 Hình 19 Mơ hình neural nhân tạo 21 Hình 21 Mạng neural đơn mức 23 Hình 20 Mạng neural đa mức 23 Hình 22 Huấn luyện liệu 28 Hình 23 Modul I2C .28 Hình 24 Board Arduino uno R3 29 Hình 25 Màn hình hiển thị LCD 30 Hình 26 Sơ đồ kết nối 30 Y Hình Phân bố thời gian thực đề tài .31 Hình Sơ đồ khối 33 Chương KẾT LUẬN VÀ ĐỀ NGHỊ Quá trình thực kết hợp với lý thuyết sở tìm hiểu được, đề tài đạt số kết sau: 5.1 Kết đạt Chế tạo mơ hình thu ảnh hạt lúa giống Xây dựng chương trình xử lý ảnh để trích đặc trưng hình dạng màu sắc giống lúa Xây dựng thuật toán nhận dạng giống lúa Khảo nghiệm, đánh giá độ xác mơ hình 5.2 Hướng phát triển đề tài Chất lượng hình ảnh phụ thuộc vào độ phân giải camera Trong đề tài lần sử dụng camera Logitech C310 (HD) 5MP, nhiên ảnh chụp gần camera khơng có khả tự lấy nét nên đòi hỏi camera phù hợp có chất lượng cao Do thời gian giới hạn nên việc hiển thị kết nhận dạng chưa tối ưu, việc sử dụng TFT LCD thiết kế giao diện điều khiển trực tiếp tối ưu hóa mơ hình tối đa Việc xử lý ảnh Matlab chậm rườm rà, nên sử dụng Open CV kết hợp với Rapsberry để mơ hình có khả tự động hóa cao Việc sưu tầm giống lúa hạn chế, có điều kiện tăng số lượng giống lúa làm sở liệu giúp khả nhận dạng nhiều xác TÀI LIỆU THAM KHẢO  Tài liệu tiếng Việt:  Nguyễn Hoàng Hải, Nguyễn Khắc Kiểm, Nguyễn Trung Dũng Trần Hà Đức, 2003 Lập trình MATLAB dành cho sinh viên kỹ thuật NXB Khoa Học Kỹ Thuật, Hà Nội, 308 trang  Tài liệu tiếng Anh:  Image Acquisition Toolbox  Image Processing Toolbox  Neural Networks Toolbox  Tài liệu Internet  Datesheet linh kiện điện tử (arduino, i2c, LCD) http://www.alldatasheet.com/  Trang chủ Matlab https://www.mathworks.com/  Code arduino tham khảo https://www.arduino.cc/ PHỤ LỤC  Code MATLAB xử lý ảnh huấn luyện liệu function varargout = trainnn(varargin) global Q; global i; global T1; global T2; global p; T1=double(zeros(18,50)); T2=double(zeros(5,50)); i=0; global cam; cam = webcam('Logitech'); preview(cam); set(handles.pushbutton1,'enable','off'); set(handles.pushbutton2,'enable','off'); set(handles.pushbutton3,'enable','off'); set(handles.pushbutton4,'enable','off'); set(handles.pushbutton6,'enable','off'); function popupmenu2_Callback(hObject, eventdata, handles) global p; set(handles.pushbutton1,'enable','on'); set(handles.pushbutton2,'enable','on'); set(handles.pushbutton3,'enable','on'); set(handles.pushbutton4,'enable','on'); set(handles.pushbutton6,'enable','on'); p=get(handles.popupmenu2,'value'); function pushbutton1_Callback(hObject, eventdata, handles) global Q; global cam; I = snapshot(cam); axes(handles.axes1); imshow(I); anhxam=rgb2gray(I); anhnhiphan=im2bw(anhxam,graythresh(anhxam)); loc=edge(anhnhiphan,'canny',graythresh(anhxam)); xuly1=bwareaopen(loc,20); se = strel('disk',1); xuly2=imclose(xuly1,se); r=I(:,:,1); r=double(r); [x1,z1]=size(r); R = sum(r,1); Sr = sum(R,2); TBr = Sr/(x1*z1); maxR = max( max(r)); minR = min(min(r)); stdR = std(std(r)); g=I(:,:,2); g=double(g); [x2,z2]=size(g); G = sum(g,1); Sg = sum(G,2); TBg = Sg/(x2*z2); maxG = max( max(g)); minG = min(min(g)); stdG = std(std(g)); b=I(:,:,3); b=double(b); [x3,z3]=size(b); B = sum(b,1); Sb = sum(B,2); TBb = Sb/(x3*z3); maxB = max( max(b)); minB = min(min(b)); stdB = std(std(b)); for mm = 1:size(xuly2,1) for nn = 1:size(xuly2,2) if ((xuly2(mm,nn) == 1)) D(mm,nn,:) = [0 255 0]; % green outline in shapes end end end axes(handles.axes2); imshow(D); [laythongso num] = bwlabel(xuly2,8); thongso = regionprops(laythongso,'all'); dtich =double( uint16(zeros(1,num))); chuvi = double(uint16(zeros(1,num))); dai = double(uint16(zeros(1,num))); rong =double(uint16(zeros(1,num))); tyledairong = double(uint16(zeros(1,num))); dotron=double(uint8(zeros(1,num))); for i = : num dtich(i) = thongso(i).FilledArea; chuvi(i) = thongso(i).Perimeter; dai(i) = thongso(i).MajorAxisLength; rong(i) = thongso(i).MinorAxisLength; dotron(i) = (4*dtich(i)*pi)/(chuvi(i).^2); tyledairong(i) = dai(i)/rong(i); end dtichTB = sum(dtich,2)/num; chuviTB= sum(chuvi,2)/num; daiTB= sum(dai,2)/num; rongTB = sum(rong,2)/num; dotronTB = sum(dotron,2)/num; tyledairongTB = sum(tyledairong,2)/num; set(handles.edit1,'String',{strcat('Dien tich TB =',num2str( dtichTB)),strcat( 'Chu vi TB =', num2str(chuviTB)), strcat('Chieu dai TB =', num2str(daiTB)),strcat('Chieu rong TB = ', num2str(rongTB)), strcat('Do tron TB =' , num2str(dotronTB)),strcat('Ty le dai rong TB =', num2str(tyledairongTB)), strcat('Max R =', num2str(maxR)),strcat('Max G =', num2str(maxG)),strcat('Max B =', num2str(maxB)), strcat('Min R =', num2str(minR)),strcat('Min G =', num2str(minG)),strcat('Min B =', num2str(minB)), strcat('Std R =', num2str(stdR)),strcat('Std G =', num2str(stdG)),strcat('Std B =', num2str(stdB)), strcat('Trung binh R =', num2str(TBr)),strcat('Trung binh G =', num2str(TBg)),strcat('Trung binh B =', num2str(TBb))}); Q = [dtichTB;chuviTB;daiTB;rongTB;dotronTB;tyledairongTB;maxR;maxG;maxB;minR;mi nG;minB;stdR;stdG;stdB;TBr;TBg;TBb] function pushbutton2_Callback(hObject, global T1; global T2; save('T1'); save('T2'); xlswrite('x',T1); xlswrite('y',T2); nntool; function pushbutton3_Callback(hObject, global i; global Q; global T1; global T2; global p; i=i+1; Q=double(Q); p = get(handles.popupmenu2,'value'); switch p case A=[1;0;0;0;0]; case A=[0;1;0;0;0]; case A=[0;0;1;0;0]; case A=[0;0;0;1;0]; case A=[0;0;0;0;1]; end T1(:,i) = Q T2(:,i) = A function pushbutton4_Callback(hObject, closepreview close all clear all function pushbutton6_Callback(hObject, closepreview; clear all; close trainnn; doannhandang; eventdata, handles) eventdata, handles) eventdata, handles) eventdata, handles)  Code MATLAB nhận dạng giống lúa function doannhandang_OpeningFcn(hObject, eventdata, handles, varargin) global Q; global cam1; cam1=webcam('Logitech'); cam1.Resolution='640x480'; preview(cam1); global s; delete(instrfind({'Port'},{'all'})); s = serial('COM3'); s.BytesAvailableFcnMode = 'byte'; s.BytesAvailableFcnCount = 5; s.BytesAvailableFcn = {@BytesAvailable_callback,handles}; fopen(s); function pushbutton1_Callback(hObject, eventdata, handles) global Q; load netlua network1 T1 T2; t = sim(network1,Q); t= compet(t); set(handles.edit19,'String',num2str(nhandang(t))); function pushbutton2_Callback(hObject, eventdata, handles) global cam1; global Q; I=snapshot(cam1); axes(handles.axes1); imshow(I); anhxam=rgb2gray(I); anhnhiphan=im2bw(anhxam,graythresh(anhxam)); loc=edge(anhnhiphan,'canny',graythresh(anhxam)); xuly1=bwareaopen(loc,20); se = strel('disk',1); xuly2 = imclose(xuly1,se); r=I(:,:,1); r=double(r); [x1,z1]=size(r); R = sum(r,1); Sr = sum(R,2); TBr = Sr/(x1*z1); maxR = max( max(r)); minR = min(min(r)); stdR = std(std(r)); g=I(:,:,2); g=double(g); [x2,z2]=size(g); G = sum(g,1); Sg = sum(G,2); TBg = Sg/(x2*z2); maxG = max( max(g)); minG = min(min(g)); stdG = std(std(g)); b=I(:,:,3); b=double(b); [x3,z3]=size(b); B = sum(b,1); Sb = sum(B,2); TBb = Sb/(x3*z3); maxB = max( max(b)); minB = min(min(b)); stdB = std(std(b)); for mm = 1:size(xuly2,1) for nn = 1:size(xuly2,2) if ((xuly2(mm,nn) == 1)) X(mm,nn,:) = [0 255 0]; % green outline in shape end end end axes(handles.axes2); imshow(X); [laythongso num] = bwlabel(xuly2,8); thongso = regionprops(laythongso,'all'); dtich =double( uint16(zeros(1,num))); chuvi = double(uint16(zeros(1,num))); dai = double(uint16(zeros(1,num))); rong =double(uint16(zeros(1,num))); tyledairong = double(uint16(zeros(1,num))); dotron=double(uint8(zeros(1,num))); for i = : num dtich(i) = thongso(i).FilledArea; chuvi(i) = thongso(i).Perimeter; dai(i) = thongso(i).MajorAxisLength; rong(i) = thongso(i).MinorAxisLength; dotron(i) = (4*dtich(i)*pi)/(chuvi(i).^2); tyledairong(i) = dai(i)/rong(i); end dtichTB = sum(dtich,2)/num; chuviTB= sum(chuvi,2)/num; daiTB= sum(dai,2)/num; rongTB = sum(rong,2)/num; dotronTB = sum(dotron,2)/num; tyledairongTB = sum(tyledairong,2)/num; set(handles.edit1,'String',num2str(maxR));set(handles.edit4,'String',num2st r(minR));set(handles.edit7,'String',num2str(TBr));set(handles.edit10,'Strin g',num2str(stdR)); set(handles.edit2,'String',num2str(maxG));set(handles.edit5,'String',num2st r(minG));set(handles.edit8,'String',num2str(TBg));set(handles.edit11,'Strin g',num2str(stdG)); set(handles.edit3,'String',num2str(maxB));set(handles.edit6,'String',num2st r(minB));set(handles.edit9,'String',num2str(TBb));set(handles.edit12,'Strin g',num2str(stdB)); set(handles.edit13,'String',num2str(dtichTB));set(handles.edit16,'String',n um2str(rongTB)); set(handles.edit14,'String',num2str(chuviTB));set(handles.edit17,'String',n um2str(tyledairongTB)); set(handles.edit15,'String',num2str(daiTB));set(handles.edit18,'String',num 2str(dotronTB)); Q = [dtichTB;chuviTB;daiTB;rongTB;dotronTB;tyledairongTB;maxR;maxG;maxB;minR;mi nG;minB;stdR;stdG;stdB;TBr;TBg;TBb]; function pushbutton3_Callback(hObject, eventdata, handles) closepreview; clear all; trainnn; function pushbutton4_Callback(hObject, eventdata, handles) global s; closepreview; fclose(s); close doannhandang ; clear all; function pushbutton6_Callback(hObject, eventdata, handles) set(handles.edit1,'String','');set(handles.edit4,'String','');set(handles.e dit7,'String','');set(handles.edit10,'String',''); set(handles.edit2,'String','');set(handles.edit5,'String','');set(handles.e dit8,'String','');set(handles.edit11,'String',''); set(handles.edit3,'String','');set(handles.edit6,'String','');set(handles.e dit9,'String','');set(handles.edit12,'String',''); set(handles.edit13,'String','');set(handles.edit16,'String',''); set(handles.edit14,'String','');set(handles.edit17,'String',''); set(handles.edit15,'String','');set(handles.edit18,'String',''); set(handles.edit19,'String',''); axes(handles.axes1); cla reset; axes(handles.axes2); function pushbutton9_Callback(hObject, eventdata, handles) global s; global p2; if (p2==1) fopen(s); end if (p2==2) fwrite(s,get(handles.edit19,'String')); end function popupmenu2_Callback(hObject, eventdata, handles) global p2; p2=get(handles.popupmenu2,'value'); function BytesAvailable_callback(hObject, eventdata,handles) global s; global cam1; global Q; kiemtrahocki=fscanf(s,'%d') if (kiemtrahocki == 1) I=snapshot(cam1); figure imshow(I); anhxam=rgb2gray(I); anhnhiphan=im2bw(anhxam,graythresh(anhxam)); loc=edge(anhnhiphan,'canny',graythresh(anhxam)); xuly1=bwareaopen(loc,20); se = strel('disk',1); xuly2 = imclose(xuly1,se); r=I(:,:,1); r=double(r); [x1,z1]=size(r); R = sum(r,1); Sr = sum(R,2); TBr = Sr/(x1*z1); maxR = max( max(r)); minR = min(min(r)); stdR = std(std(r)); g=I(:,:,2); g=double(g); [x2,z2]=size(g); G = sum(g,1); Sg = sum(G,2); TBg = Sg/(x2*z2); maxG = max( max(g)); minG = min(min(g)); stdG = std(std(g)); b=I(:,:,3); b=double(b); [x3,z3]=size(b); B = sum(b,1); Sb = sum(B,2); TBb = Sb/(x3*z3); maxB = max( max(b)); minB = min(min(b)); stdB = std(std(b)); for mm = 1:size(xuly2,1) for nn = 1:size(xuly2,2) if ((xuly2(mm,nn) == 1)) X(mm,nn,:) = [0 255 0]; % green outline in shape end end end figure hold on imshow(X); [laythongso num] = bwlabel(xuly2,8); thongso = regionprops(laythongso,'all'); dtich =double( uint16(zeros(1,num))); chuvi = double(uint16(zeros(1,num))); dai = double(uint16(zeros(1,num))); rong =double(uint16(zeros(1,num))); tyledairong = double(uint16(zeros(1,num))); dotron=double(uint8(zeros(1,num))); for i = : num dtich(i) = thongso(i).FilledArea; chuvi(i) = thongso(i).Perimeter; dai(i) = thongso(i).MajorAxisLength; rong(i) = thongso(i).MinorAxisLength; dotron(i) = (4*dtich(i)*pi)/(chuvi(i).^2); tyledairong(i) = dai(i)/rong(i); end dtichTB = sum(dtich,2)/num; chuviTB= sum(chuvi,2)/num; daiTB= sum(dai,2)/num; rongTB = sum(rong,2)/num; dotronTB = sum(dotron,2)/num; tyledairongTB = sum(tyledairong,2)/num; set(handles.edit1,'String',num2str(maxR));set(handles.edit4,'String',num2st r(minR));set(handles.edit7,'String',num2str(TBr));set(handles.edit10,'Strin g',num2str(stdR)); set(handles.edit2,'String',num2str(maxG));set(handles.edit5,'String',num2st r(minG));set(handles.edit8,'String',num2str(TBg));set(handles.edit11,'Strin g',num2str(stdG)); set(handles.edit3,'String',num2str(maxB));set(handles.edit6,'String',num2st r(minB));set(handles.edit9,'String',num2str(TBb));set(handles.edit12,'Strin g',num2str(stdB)); set(handles.edit13,'String',num2str(dtichTB));set(handles.edit16,'String',n um2str(rongTB)); set(handles.edit14,'String',num2str(chuviTB));set(handles.edit17,'String',n um2str(tyledairongTB)); set(handles.edit15,'String',num2str(daiTB));set(handles.edit18,'String',num 2str(dotronTB)); Q = [dtichTB;chuviTB;daiTB;rongTB;dotronTB;tyledairongTB;maxR;maxG;maxB;minR;mi nG;minB;stdR;stdG;stdB;TBr;TBg;TBb]; end if (kiemtrahocki == 2) load netlua network1 T1 T2; t = sim(network1,Q); t= compet(t); set(handles.edit19,'String',num2str(nhandang(t))); fwrite(s,get(handles.edit19,'String')); end if (kiemtrahocki == 3) set(handles.edit1,'String','');set(handles.edit4,'String','');set(handles.e dit7,'String','');set(handles.edit10,'String',''); set(handles.edit2,'String','');set(handles.edit5,'String','');set(handles.e dit8,'String','');set(handles.edit11,'String',''); set(handles.edit3,'String','');set(handles.edit6,'String','');set(handles.e dit9,'String','');set(handles.edit12,'String',''); set(handles.edit13,'String','');set(handles.edit16,'String',''); set(handles.edit14,'String','');set(handles.edit17,'String',''); set(handles.edit15,'String','');set(handles.edit18,'String',''); set(handles.edit19,'String',''); axes(handles.axes1); cla reset; axes(handles.axes2); cla reset; end  Code MATLAB hàm nhận dạng function gionglua = nhandang(w) pos = find(w==1) if (pos==1) gionglua='Thom RVT'; end if (pos==2) gionglua='HT1'; end if (pos==3) gionglua='IR 4625'; end if (pos==4) gionglua='OM 4500'; end if (pos==5) gionglua='Dai thom 8'; end  Code Arduino hiển thị LCD #include ; #include ; LiquidCrystal_I2C lcd(0x3F,16,2); const int nutnhan1 = 3; const int nutnhan2 = 4; const int nutnhan3 = 6; int nn1 = 0; int nn2 = 0; int nn3 = 0; int a = 0; int b = 0; int c = 0; void setup() { Serial.begin(9600); lcd.init(); lcd.backlight(); lcd.clear(); lcd.setCursor(1,0); lcd.print("NHAN DANG LUA"); pinMode(nutnhan1,INPUT_PULLUP); pinMode(nutnhan2,INPUT_PULLUP); pinMode(nutnhan3,INPUT_PULLUP); } void loop() { nn1 = digitalRead(nutnhan1); nn2 = digitalRead(nutnhan2); nn3 = digitalRead(nutnhan3); Serial.println(a); delay(100); Serial.println(b); delay(50); Serial.println(c); delay(50); if (nn1 == LOW){ a = 1; lcd.clear(); lcd.setCursor(3,0); lcd.print("DA THU ANH");} else{ a = 0; } if (nn2 == LOW){ b = 2; lcd.clear(); lcd.print("Loading "); } else { b = 0; } if (nn3 == LOW){ c = 3; lcd.clear(); lcd.setCursor(1,0); lcd.print("NHAN DANG LUA"); } else { c = 0; } if (Serial.available()) { delay(1000); lcd.clear(); lcd.setCursor(3,0); lcd.print("GIONG LUA"); lcd.setCursor(4,1); while (Serial.available() > 0){ char du_lieu = Serial.read(); lcd.print(du_lieu); } } } ... đích Đề tài nhận dạng giống lúa thơng qua hình dạng màu sắc với mục đích nhận dạng năm giống lúa khác nhau: OM4500, IR4625, đài thơm 8, lúa thơm RVT, HT1 Nhằm thay phương pháp nhận dạng thủ cơng,... trợ việc nhận dạng cách xác hơn, giúp tiết kiệm thời gian đảm bảo xác giống lúa, yêu cầu sản xuất Từ thực tế nhóm đề tài xây dựng mơ hình nhận dạng giống lúa thơng qua hình dạng màu sắc 1.2... chuẩn màu xanh dương  Tìm hiểu mạng nơ ron nhân tạo ứng dụng NNtool để nhận dạng năm giống lúa  Thiết kế mơ hình nhận dạng giống lúa, mạch điều khiển GUI Matlab để hiển thị kết giống lúa lên

Ngày đăng: 26/09/2019, 20:48

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w