function varargout = Chuyen_he_mau(varargin) % bat dau viet chuong trinh gui_Singleton = 1; gui_State = struct(gui_Name, mfilename, ... gui_Singleton, gui_Singleton, ... gui_OpeningFcn, Chuyen_he_mau_OpeningFcn, ... gui_OutputFcn, Chuyen_he_mau_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 % thuc hien ngay truoc khi %chuyen_he_mau hien thi function Chuyen_he_mau_OpeningFcn(hObject, eventdata, handles, varargin) % OutputFcn.đây là hàm không có đối số đầu ra % hObject để xử lý hình ảnh % eventdata dành riêng để xác định phiên bản tiếp theo trong MATLAB % handles cấu trúc có xử lý dữ liệu người dùng (xem trong GUIDATA) % varargin đối số trong dòng lệnh nhắc (xem trong VARARGIN) handles.output = hObject; % cập nhật cấu trúc xử lý guidata(hObject, handles); function varargout = Chuyen_he_mau_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;
===========BÀI TẬP CHUYỂN HỆ MÀU============== function varargout = Chuyen_he_mau(varargin) % bat dau viet chuong trinh///////////////////////////// gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @Chuyen_he_mau_OpeningFcn, 'gui_OutputFcn', @Chuyen_he_mau_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 % thuc hien truoc %chuyen_he_mau hien thi function Chuyen_he_mau_OpeningFcn(hObject, eventdata, handles, varargin) % OutputFcn.đây hàm khơng có đối số đầu % hObject để xử lý hình ảnh % eventdata dành riêng để xác định phiên MATLAB % handles cấu trúc có xử lý liệu người dùng (xem GUIDATA) % varargin đối số dòng lệnh nhắc (xem VARARGIN) handles.output = hObject; % cập nhật cấu trúc xử lý guidata(hObject, handles); function varargout = Chuyen_he_mau_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; % lap trinh cho nut nhân open///////////////////////////////////////////////// function pushbutton_open_Callback(hObject, eventdata, handles) global Im % khai báo biến toàn cục % ham uigetfile dùng để mở hộp thoại ,cho phép người dùng lựa chon ảnh ( để trả tên %đường dẫn đến tệp bạn chọn) [filename,pathname] = uigetfile({'*.png'},'Please select an png image'); if ~isequal(filename,0) %so sánh file name không Info = imfinfo(fullfile(pathname,filename)); %hien thị thông tin ảnh if Info.BitDepth = = 24 % BitDepth số bit pixel Im = imread(fullfile(pathname,filename)); % đọc ảnh axes(handles.axes1) % hiển thị ảnh axes1 imshow(Im) % hiển thị hình ảnh else msgbox('Select the png image'); % tao hộp thoại với nội dung ‘ select the pnj image’ return end else return end % lâp trình cho nút nhấn CMY/////////////////////////////////////////////////////// function pushbutton_CMY_Callback(hObject, eventdata, handles) global Im % khai báo biến toàn cục CMY=uint8(zeros(size(Im))); % ép kiểu % cơng thức tính tốn ảnh CMY % cơng thức tinh tốn ảnh CMY for i=1:size(Im,1) for j=1:size(Im,2) CMY(i,j,1)=255-Im(i,j,1); % 255 - ảnh Red CMY(i,j,2)=255-Im(i,j,2); % 255- ảnh Green CMY(i,j,3)=255-Im(i,j,3); % 255- ảnh Blue end end cla axes(handles.axes1) % hiển thị ảnh lên axes1 imshow(CMY) % hiển thị ảnh CMY title('CMY model') % thêm vào tiêu đề với nội dung ‘ CMY model ’ % lập trình cho nút nhấn YUV.//////////////////////////////////////////////////////// function pushbutton_YUV_Callback(hObject, eventdata, handles) global Im % khai báo biến toàn cục YUV=uint8(zeros(size(Im))); % ép kiểu % cơng thức tính tốn để ảnh YUV/////////////////////////////////////////////////////////// % cơng thức tính tốn để ảnh YUV////////////////////////////////////////////////////////////////// for i=1:size(Im,1) for i=1:size(Im,1) for j=1:size(Im,2) YUV(i,j,1)=0.299*Im(i,j,1)+0.578*Im(i,j,2)+0.114*Im(i,j,3); % im ( i,j,1) ảnh Red YUV(i,j,2)=-0.147*Im(i,j,1)-0.289*Im(i,j,2)+0.436*Im(i,j,3); % im (i,j,2) ảnh Green YUV(i,j,3)=0.615*Im(i,j,1)-0.515*Im(i,j,2)-0.100*Im(i,j,3); % im (I,j,3) ảnh Blue end end end cla axes(handles.axes1) % hiển thị ảnh lên axes1 imshow(YUV) % hiển thị ảnh YUV title('YUV model') % thêm vào tiêu đề với nội dung ‘ YUV model’ % lập trình cho nút nhấn _YIQ.//////////////////////////////////////////////////////////////////////// function pushbutton_YIQ_Callback(hObject, eventdata, handles) global Im % khai báo biến toàn cục YIQ=uint8(zeros(size(Im))); % ép kiểu % cơng thức tính tốn cho ảnhYIQ//////////////////////////////////////// % cơng thức tính toán cho ảnh YIQ////////////////////////////////////// for i=1:size(Im,1) for j=1:size(Im,2) YIQ(i,j,1)=0.30*Im(i,j,1)+0.59*Im(i,j,2)+0.11*Im(i,j,3); % im ( i,j,1) ảnh Red YIQ(i,j,2)=0.60*Im(i,j,1)-0.27*Im(i,j,2)-0.322*Im(i,j,3); % im (i,j,2) ảnh Green YIQ(i,j,3)=0.21*Im(i,j,1)-0.52*Im(i,j,2)+0.31*Im(i,j,3); % im (I,j,3) ảnh Blue end end cla axes(handles.axes1) % hiển thị ảnh lên axes1 imshow(YIQ) % hiển thị ảnh YIQ title('YIQ model') % thêm vào tiêu đề với nội dung ‘ YIQ model’ % lập trình cho nút nhấn HSV//////////////////////////////////////////////// function pushbutton_HSV_Callback(hObject, eventdata, handles) global Im HSV=uint8(zeros(size(Im))); % ép kiểu HSV=rgb2hsv(Im); % chuyển đổi ảnh rgb sang ảnh hsv cla axes(handles.axes1) % hiển thị ảnh lên axes1 imshow(HSV) % hiển thị ảnh YIQ title('HSV model') % thêm vào tiêu đề với nội dung ‘ YIQ model’ % lập trình cho nút nhấn PAL///////////////////////////////////////////////////////////////// function pushbutton_PAL_Callback(hObject, eventdata, handles) global Im PAL=uint8(zeros(size(Im))); % ép kiểu % cơng thức tính ảnh PAL//////////////////////////////////////////////////////////////////// % cơng thức tính ảnh PAL/////////////////////////////////////////////////////////////// for i=1:size(Im,1) for j=1:size(Im,2) PAL(i,j,1)=0.299*Im(i,j,1)'+0.587*Im(i,j,2)'+0.114*Im(i,j,3)'; PAL(i,j,2)=0.492*(Im(i,j,3)'-PAL(i,j,1)); PAL(i,j,3)=0.877*(Im(i,j,1)'-PAL(i,j,1)); % im ( i,j,1) ảnh Red - im ( i,j,1)’ ảnh chuyển vị ảnh Red % im (i,j,2) ảnh Green im (i,j,2)’ ảnh chuyển vị ảnh Green % im (I,j,3) ảnh Blue im (I,j,3)’ ảnh chuyển vị ảnh blue end end cla axes(handles.axes1) imshow(PAL) title('PAL model') % hiển thị ảnh lên axes1 % hiển thị ảnh PAL % thêm vào tiêu đề với nội dung ‘ PAL model’ % lập trình nút nhấn cho _SECAM///////////////////////////////////////////////////// function pushbutton_SECAM_Callback(hObject, eventdata, handles) global Im % khai báo biến toàn cục SECAM=uint8(zeros(size(Im))); % ép kiểu % cơng thức tính cho ảnh SECAM////////////////////////////////////////////////////// % cơng thức tính cho ảnh SECAM///////////////////////////////////////////////////// for i=1:size(Im,1) for j=1:size(Im,2) SECAM(i,j,1)=0.299*Im(i,j,1)+0.587*Im(i,j,2)+0.114*Im(i,j,3); % im ( i,j,1) ảnh Red SECAM(i,j,2)=-0.450*Im(i,j,1)-0.883*Im(i,j,2)+1.333*Im(i,j,3); % im (i,j,2) ảnGreen SECAM(i,j,3)=-1.333*Im(i,j,1)+1.116*Im(i,j,2)+0.217*Im(i,j,3); % im (I,j,3) ảnh Blue end end cla axes(handles.axes1) % hiển thị ảnh lên axes1 imshow(SECAM) % hiển thị ảnh PAL title('SECAM model') % thêm vào tiêu đề với nội dung ‘ PAL model’ %lập trình cho nút nhấn_Exit/////////////////////////////////////////////////////////////// function pushbutton_Exit_Callback(hObject, eventdata, handles) closereq % lập trình cho nút nhấn _save///////////////////////////////////////////////////// function pushbutton_save_Callback(hObject, eventdata, handles) global Im [filename,pathname]=uiputfile({'*.jpg','JPEG Files(*.jpg)'; '*.bmp','Bitmap Files(*.bmp)';'*.gif','GIF Files(*.gif)'; '*.tif','TIFF Files(*.tif)'; '*.*','all image file'},'Do you want to save the selected image?','Result_Image/'); Imwrite (Im,[pathname,filename]); ==============BÀI TẬP ĐẾM SỐ LƯỢNG ĐỐI TƯỢNG =================== function varargout = Dem_SL_doi_tuong(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @Dem_SL_doi_tuong_OpeningFcn, 'gui_OutputFcn', @Dem_SL_doi_tuong_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 % % thuc hien truoc %chuyen_he_mau hien thi function Dem_SL_doi_tuong_OpeningFcn(hObject, eventdata, handles, varargin) % hàm khơng có đối số đầu % hObject để xử lý hình ảnh % eventdata dành riêng để xác định phiên MATLAB % handles cấu trúc có xử lý liệu người dùng (xem GUIDATA) % varargin đối số dòng lệnh nhắc (xem VARARGIN) handles.output = hObject; guidata(hObject, handles); function varargout = Dem_SL_doi_tuong_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; % lập trình cho nut nhấn _open/////////////////////////////////////////////////////// function pushbutton_open_Callback(hObject, eventdata, handles) global Img % khai báo biến toàn cục [filename,pathname] = uigetfile({'*.png'},'Please select an png image'); % ham uigetfile dùng để mở hộp thoại ,cho phép người dùng lựa chon ảnh ( để trả tên % đường dẫn đến tệp bạn chọn) if ~isequal(filename,0) %so sánh file name không Info = imfinfo(fullfile(pathname,filename)); %hien thị thông tin ảnh if Info.BitDepth == % BitDepth số bit pixel Img = imread(fullfile(pathname,filename)); % đọc ảnh axes(handles.axes1) % hiển thị ảnh axes1 imshow(Img) % hiển thị ảnh else msgbox('Select the png image'); % tao hộp thoại với nội dung ‘ select the pnj image’ return end else return end % - lập trình cho nút nhấn _count.////////////////////////////////////////////////// function pushbutton_count_Callback(hObject, eventdata, handles) global Img % khai báo biến toàn cục % biến đổi ảnh thành ảnh nhị phân///////////////////////////////////////////////// level=0.5; % ngưỡng lấy I2=im2bw(Img,level); %im2bw: bien buc anh anh nhi phan, co bien dau vao la gia tri nguong:level %level=0-1, neu ham co gia tri cuong sang < level : 0(mau den), nguoc lai: 1(mau trang) axes(handles.axes1) % hiển thị ảnh axes1 imshow(I2) % hiển thị ảnh BW=imfill(I2,'holes'); % điền đầy lỗ cịn trốn hình axes(handles.axes1) % hiển thị ảnh axes1 imshow(BW) % hiển thị ảnh % đếm số lượng đối tượng///////////////////////////////////////////////// CC=bwconncomp(BW,26); % bwconncomp:ham tim cac doi tuong co lien ket kin voi anh nhi phan % no tra ve thuoc tinh(Connectivity,ImageSize,NumberObjects,PixelIdxList) % 26: dem so luong cac doi tuong co tren 26 lan can lien ket voi no set(handles.edit_display,'String',num2str(CC.NumObjects)); % CC.NumObjects: chuyển từ dạng số sang dạng chuỗi % lấy thuộc tính đối tượng đưa dạng chuỗi để máy tính đọc % thống kê đặc tính vùng trắng s=regionprops(BW,'Centroid'); %regionprops:ham lay duoc dac tinh cua vung trang anh nhi phan %s: la cau truc mang, voi truong : Centroid hay noi cach khac: gia tri % cua tam duoc luu vao truong Centroid center=cat(1,s.Centroid); % dung ham cat:ham ghep chuoi,bien center >1 vector % cat(1,s.Centroid): > tam co dang [X Y] % chung ta co tam cua khoi hinh tron % hiển thị hold on % giữ lại ảnh trước plot(center(:,1),center(:,2),'+r') %tam he toa do, co toa la X va Y %tam(:,1):lay toan bo cac hang + chi lay cot 1(X) %tam(:,2):lay toan bo cac hang + chi lay cot 2(Y) %'+g': de tam co dang dau + va co mau function edit_display_Callback(hObject, eventdata, handles) function edit_display_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end =================BÀI TẬP CẮT BIỂN SỐ XE ====================== function varargout = Tach_BSX(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @Tach_BSX_OpeningFcn, 'gui_OutputFcn', @Tach_BSX_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 Tach_BSX_OpeningFcn(hObject, eventdata, handles, varargin) % OutputFcn.đây hàm khơng có đối số đầu % hObject để xử lý hình ảnh % eventdata dành riêng để xác định phiên MATLAB % handles cấu trúc có xử lý liệu người dùng (xem GUIDATA) % varargin đối số dòng lệnh nhắc (xem VARARGIN) handles.output = hObject; guidata(hObject, handles); function varargout = Tach_BSX_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; % lập trình cho nút nhấn open////////////////////////////////////////////////////////////////// function pushbutton1_open_Callback(hObject, eventdata, handles) global IMG % khai báo biến toàn cục cla; [filename path]=uigetfile({'*.jpg';'*.*'},'Select an image'); % ham uigetfile dùng để mở hộp thoại ,cho phép người dùng lựa chon ảnh ( để trả tên % đường dẫn đến tệp bạn chọn) if ~isequal(filename,0); IMG = imread([path,filename]); axes(handles.axes_input); imshow(IMG); else return end %so sánh file name không % đọc ảnh theo tên đường dẫn % hiển thị ảnh lên axes % hiển thị ảnh % lập trình cho nút nhấn separate//////////////////////////////////////////////////////////////////////// function pushbutton3_separate_Callback(hObject, eventdata, handles) global IMG % gọi biến toàn cục IMG = imresize(IMG,[500,600]); %thu nhỏ kích thước ảnh cịn lại [500,600]pixel I1 = rgb2gray(IMG); % chuyển ảnh màu sang ảnh xám bw = I1 < mean(I1(:)); %chuyển từ ảnh xám thành ảnh trắng đen với ngưỡng trung bình tất pixel %Hàm mean hàm lấy ngưỡng pixel % chụp ảnh bị nghiêng thực xoay ảnh câu lệnh sau S = regionprops(I1,'Orientation'); %regionprops:hàm đo để lấy đặc tính vùng trắng ảnh nhị phân alpha = S.Orientation; % tìm góc nghiêng alpha hàm orientation if alpha N) plot(boundary(:,2),boundary(:,1),'g','LineWidth',2); %dùng hàm boundary để trả lại viền xanh cho ảnh theo vị trí hàng cột với độ dày % (LineWidth)của viền else plot(boundary(:,2),boundary(:,1),'r','LineWidth',2); %dùng hàm boundary để trả lại viền đỏ cho ảnh theo vị trí hàng cột với độ dày (LineWidth)của viền % end end % phần cắt ảnh ////////////////////////////////////////////////////////////////////////////////////////////////////////// Sdata=regionprops(L,'BoundingBox'); % tạo vùng giới hạn đường bao h = 0; for i=1:N Img=imcrop(I3,Sdata(i).BoundingBox); % Hàm imcrop cắt đường bao tạo %Khi cắt ảnh lấy ảnh: quy luật lấy ảnh từ trái sang phải cắt từ viền đỏ vô %trong,khi cắt từ trái sang phải ta cắt số đứng trước cắt từ xuống imwrite(Img,'D:\\image_test.jpg'); %Hàm imwrite lưu ảnh vừa cắt thử với tên ảnh image_test info = imfinfo('D:\\image_test.jpg'); %Hàm imfinfo lấy thông tin ảnh vừa cắt thử with = info.Width; % lấy thông tin chiều rông hieght = info.Height; % lấy thông tin chiều cao if with >15 && hieght >15 % Lấy ngưỡng độ rộng chiều cao để việc cắt đường bao với số h = h+1; if h = = imwrite(Img,'D:\\img1.jpg'); info1 = imfinfo('D:\\image_test.jpg'); size1 = info1.FileSize; else if h = = imwrite(Img,'D:\\img2.jpg'); % lưu ảnh với tên img1 % lấy thông tin ảnh với hàm imfinfo % thông tin ảnh lấy thông tin file size 10 k=k+1; cd cd 'D:\Kytu\6' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Number 6'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\7' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Number 7'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\8' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Number 8'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd 23 cd 'D:\Kytu\9' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Number 9'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\A' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter A'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\B' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter B'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\C' k=1; str='.bmp'; 24 for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter C'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\D' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter D'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\E' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter E'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\F' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); 25 axes(handles.axes1); set(handles.text2,'String','Read Letter F'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\G' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter G'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\H' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter H'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\I' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter I'); set(handles.edit1,'String',num2str(i)); 26 imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\J' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter J'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\K' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter K'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\L' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter L'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); 27 end k=k+1; cd cd 'D:\Kytu\M' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter M'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\O' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter O'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\P' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter P'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd 28 cd 'D:\Kytu\Q' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter Q'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\R' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter R'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\S' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter S'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\T' k=1; 29 str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter T'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\U' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter U'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\V' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter V'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\X' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); 30 a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter X'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\Y' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter Y'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\Z' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter Z'); set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd cd 'D:\Kytu\W' k=1; str='.bmp'; for i=1:15 filename=strcat(num2str(i),str); a=imread(filename); axes(handles.axes1); set(handles.text2,'String','Read Letter W'); 31 set(handles.edit1,'String',num2str(i)); imshow(a) pause(0.05); end k=k+1; cd 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 =====ĐIỀU KHIỂN ĐỘNG CƠ BẰNG NHẬN DẠNG KHUÔN MẶT ========= function varargout = c(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @c_OpeningFcn, 'gui_OutputFcn', @c_OutputFcn, 'gui_LayoutFcn', [] , 32 '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 c_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); function varargout = c_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; % lập trình cho nút nhấn pushtton1/////////////////////// function pushbutton1_Callback(hObject, eventdata, handles) global A; % khai báo biến toàn cục %chon anh va tai anh len axes1 cla(handles.axes1,'reset'); cla(handles.axes2,'reset'); cla(handles.axes3,'reset'); cla(handles.axes4,'reset'); cla(handles.axes1,'reset'); [filename, pathname] = uigetfile('*','LOAD AN IMAGE'); %chon va lay ten va duong dan tep tin A=imread(fullfile(pathname, filename)); %A = doc ma tran anh tuxay dung mot dac ta tap tin day du tu thu muc ten va tap tin %duoc chi dinh axes(handles.axes1); % hiển thị ảnh lên axes1 imshow(A); %Hien thi hinh anh A handles.fullname= A; guidata(hObject, handles); % lập trinh cho nut nhan pushbutton2////////////////////////////////////////////////////////////// function pushbutton2_Callback(hObject, eventdata, handles) global A; %Lay khung khuon mat nguoi tu anh va hien thi axes2 cla(handles.axes2,'reset'); A=handles.fullname; 33 axes(handles.axes2); imshow(A); %Hien thi hinh anh A FaceDetect = vision.CascadeObjectDetector; %Thuat toan cau hinh de phat hien va tao khung khuon mat BB = step(FaceDetect,A); y=size(BB,1); hold on % giữ lại ảnh trươc for i=1:y a=rectangle('Position', [BB(i,1),BB(i,2),BB(i,3),BB(i,4)+15],'LineWidth',3,'LineStyle','-','EdgeColor','r'); end % lập trình cho nut nhấn function pushbutton3_Callback(hObject, eventdata, handles) global A; %Hien thi cac khung anh khuon mat da phat hien//////////////////////////////////////////////// FaceDetect = vision.CascadeObjectDetector; BB = step(FaceDetect,A); hold on J = imcrop(A,[BB(1,1),BB(1,2),BB(1,3),BB(1,4)]); %J= Cat anh A theo kich co da duoc dinh vi khung khuon mat axes(handles.axes4) %Gan cho axes4 imshow(J); %Hien thi anh J handles.J= J; % - lập trinh chonut nhấn pushbutton/5///////////////////////////////////////////////////////////////// function pushbutton5_Callback(hObject, eventdata, handles) global A; FaceDetect = vision.CascadeObjectDetector; BB = step(FaceDetect,A); hold on J = imcrop(A,[BB(1,1),BB(1,2),BB(1,3),BB(1,4)]); B = imread('D:\btlxla\1.jpg'); FaceDetect1 = vision.CascadeObjectDetector; BB = step(FaceDetect1,B); hold on K= imcrop(B,[BB(1,1),BB(1,2),BB(1,3),BB(1,4)]); %J= Cat anh A theo kichco da duoc dinh vi khung khuon mat////////////////////////////////////// gray = rgb2gray(K); gray2 = rgb2gray(J); tem=sum(sum(gray)); tem2=sum(sum(gray2)); if (tem-100 < tem2 && tem2 < tem+100) set(handles.text2,'String',('gai dep')) axes(handles.axes3); imshow(B); s = serial('COM3'); fopen(s); fprintf(s,'1'); 34 fclose(s); else set(handles.text2,'String',('khong nhan dang duoc')) end =============XỬ LÝ ẢNH THEO BIÊN ===================== function varargout = xulyanhtheobien(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @xulyanhtheobien_OpeningFcn, 'gui_OutputFcn', @xulyanhtheobien_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 35 gui_mainfcn(gui_State, varargin{:}); end function xulyanhtheobien_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); function varargout = xulyanhtheobien_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; % Lập trình cho nút nhan open///////////////////////////////////////////// function open_Callback(hObject, eventdata, handles) global y ; [filename path]=uigetfile({'*.jpg';'*.png';'*.bmp';'*.jpeg';'*.tif';'*.*'},'File Selector'); full=strcat(path,filename); a=imread(full); axes(handles.axes1) imshow(a) b=rgb2gray(a); c=edge(b,'canny'); axes(handles.axes2) imshow(c) [x y]=find(c) % lập trình cho nút nhấn button0//////////////////////////////////// function button0_Callback(hObject, eventdata, handles) global s; fwrite(s,[0]); % lập trình cho nut nhấn button1/////////////////////////////////// function button1_Callback(hObject, eventdata, handles) global s ; global y ; fwrite(s,[y]); % lập trình cho nut nhấn buttonopen//////////////////////////// function buttonopen_Callback(hObject, eventdata, handles) global s; s= serial('COM1'); fopen(s); set(handles.buttonopen,'Enable','off'); set(handles,buttonclose,'Enable','on'); % lập trình cho nut nhấn buttonclose/////////////////////////////////// 36 function buttonclose_Callback(hObject, eventdata, handles) global s; fclose(s); set(handles.buttonopen,'Enable','on'); set(handles,buttonclose,'Enable','off'); 37