
Biến đổi ảnh màu thành ảnh đen trắng, đỏ, xanh,.. trong Matlab
Trong bài viết hôm nay tôi và bạn cùng nhau học cách biến đổi ảnh một hình ảnh màu thành 3 loại ảnh đó là Red, Green, Blue cũng như học cách lưu hình ảnh lại thành hình ảnh mới. Bạn nên xem lại lại bài cách đọc hình ảnh trước nếu bạn quên hoặc chưa xem. Vì trong bài viết này sẽ có một phần áp dụng trong bài viết đó.

Đầu tiên chúng ta cùng học một vài câu lệnh trong Matlab hỗ trợ việc xử lý hình ảnh (Image). Các câu lện nào mà tôi và bạn đã học ở các bài trước rồi thì tôi xin được phép không nhắc lại để tránh mất thời gian của bạn.
1. Tách ảnh màu thành 3 loại ảnh (kênh)
%Đọc File [tenFileAnh, duongDanAnh] = uigetfile({'*.*'}); Image = imread(fullfile(duongDanAnh, tenFileAnh)); %Lấy Kênh Màu imageRed = Image(:,:,1); imageGreen = Image(:,:,2); imageBlue = Image(:,:,3); %Kết Qủa Image resultRed = cat(3,imageRed, imageGreen*0, imageBlue*0); resultGreen = cat(3,imageRed*0, imageGreen, imageBlue*0); resultBlue = cat(3,imageRed*0, imageGreen*0, imageBlue);
Trong đó:
- cat(): Nối 3 kênh lại với nhau. Kênh nào mà nhân với 0 (*0) thì kênh đó sẽ không được hiện thị. Ví dụ cat(3,imageRed, imageGreen*0, imageBlue*0); thì kết quả sẽ được 1 ảnh màu Red (đỏ).
- resultRed, resultGreen, resultBlue là kết quả của bức ảnh theo 3 kênh R,G,B
2. Tách ảnh màu thành ảnh xám
anhXam = rgb2gray(hinhAnh)
Trong đó: rgb2gray() Biến đổi ảnh màu thành ảnh xám.
3. Lưu hình ảnh
[tenFile, duongDan] = uiputfile({'*.jpg','JPEG Files(*.jpg)';... '*.bmp','Bitmap Files(*.bmp)';'*.gif','GIF Files(*.gif)';... '*.tif','TIFF Files(*.tif)';... '*.*','all image file'},'Luu anh da chon!','anhkq/'); imwrite(hinhAnh, [duongDan,tenFile]);
Trong đó: imwrite() Lệnh này giúp bạn ghi hình ảnh. Có nghĩa là khi bạn sử lý xong bức ảnh (Biến đổi màu, thay đổi kích thước,…) xong rồi thì lệnh này cho phép bạn lưu hình ảnh đó lại thành định dạng nào đó bạn muốn.
4. Bài tập áp dụng
Oke như vậy tôi và bạn đã cùng nhau tìm hiểu một số câu lệnh giúp bạn chuyển đổi một bức ảnh màu thành 3 loại ảnh red, green, blue và ảnh xám. Cũng như hướng dẫn bạn cách lưu ảnh lại theo định dạng bạn muốn.
Bây giờ để bạn hiểu rõ hơn tôi và bạn cùng nhau giải một bài toán dưới đây để hiểu rõ vấn đề chúng ta đã học.
Chú thích: Tôi sẽ hướng dẫn bạn ở mức cơ bản nhất để bạn hiểu bởi vậy tôi sẽ không đi quá nâng cao bạn sẽ không hiểu được.

Nhiệm vụ chúng ta đó là khi nhấn vào Chon Hinh Anh (pushbutton1) thì hình ảnh đó sẽ được hiện thị vào các axes với các kiểu hình ảnh màu như hình ảnh. Tiếp khi có ảnh rồi ta sẽ tiến hành lưu hình đó lại.
Oke ta tiến hành giải quyết bài toán này. Bạn tiến hành mở file .m của trương trình nên và làm như sau
1. pushbutton1 (String: Chon Hinh Anh)
%Bien toan cuc global resultRed %Tao mot dialog box [tenFileAnh,duongDanAnh] = uigetfile({'*.*'}); if ~isequal(tenFileAnh,0) Info = imfinfo(fullfile(duongDanAnh,tenFileAnh)); if Info.BitDepth == 24 Image = imread(fullfile(duongDanAnh, tenFileAnh)); axes(handles.axes5) imshow(Image) imageRed = Image(:,:,1); imageGreen = Image(:,:,2); imageBlue = Image(:,:,3); % Anh Do resultRed = cat(3,imageRed, imageGreen*0, imageBlue*0); axes(handles.axes1) imshow(resultRed) % Anh Green resultGreen = cat(3,imageRed*0, imageGreen, imageBlue*0); axes(handles.axes2) imshow(resultGreen) % Anh Blue resultBlue = cat(3,imageRed*0, imageGreen*0, imageBlue); axes(handles.axes3) imshow(resultBlue) % Anh Xam' anhXam = rgb2gray(Image) axes(handles.axes6) imshow(anhXam) else msgbox('Hay chon anh RGB'); return end else return end
Trong đó:
- isequal kiểm tra xem có phải là hình ảnh không
- 24 là loại ảnh màu
- imshow hiện thị ảnh
Để biết ảnh màu hay không thì bạn nhìn vào đây

2. pushbutton2 (String: Luu Hinh Anh)
Gỉa sử rằng bạn muốn lưu ảnh màu Red (Đỏ) thì tại pushbutton1 bạn cần phải khai báo một biến toàn cục để lưu hình ảnh đỏ. Rồi trong pushbutton2 ta mới lấy ảnh đó để lưu lại được.
global resultRed [filename,pathname]=uiputfile({'*.jpg','JPEG Files(*.jpg)';... '*.bmp','Bitmap Files(*.bmp)';'*.gif','GIF Files(*.gif)';... '*.tif','TIFF Files(*.tif)';... '*.*','all image file'},'Luu anh da chon!','anhkq/'); imwrite(resultRed,[pathname,filename]);
Oke bạn thử chạy trương trình nên xem thế nào.


Như vậy là chúng ta đã hoàn thành xong bài tập trên rồi đó. Như đã nói ở đầu thì tôi sẽ không giải thích lại các đoạn code mà ta đã học đỡ mất nhiều thời gian của bạn. Nếu bạn không hiểu đoạn nào xin vui lòng xem lại các bài viết trước của tôi cũng như bình luận phía dưới để tôi giải thích cho bạn.
Dưới đây là link tải bài tập tương tự như bài tập trên nhưng sẽ có một chút nâng cao hơn. Nếu bạn cần thì bạn có thể tải về và dùng phần mền Matlab chạy trương trình nên bằng cách
guide MODUL_1
Bạn có thể xem code trong viết gì. Thực ra nó cũng không khó lắm đâu nếu bạn chịu khó xem.
Tổng Kết
Trên đây tôi và bạn đã học xong cách chỉnh sửa biến đổi bức ảnh thành ảnh màu khác. Hi vọng rằng bạn sẽ thành thạo các câu lệnh trên. Chúc bạn thành công!
Chào a! Em đang làm đồ án bên xử lý ảnh. Anh cho e hỏi có hàm lệnh nào mình có thể chuyển tất cả ảnh màu trong folder thành ảnh xám không ạ. Em xin cảm ơn!