
Xử Lý Ảnh Matlab – Biến Đổi Ảnh Màu Thành Ảnh Âm Bản
Ở bài viết trước tôi và bạn đã cùng nhau học cách biến đổi một bức ảnh màu thành 3 ảnh theo 3 kênh là Red, Green, Blue cũng như học cách iến đổi sang ảnh xám. Nếu bạn chưa xem bài viết đó thì vui lòng bạn hãy xem lại “Biến đổi ảnh màu” trước khi học bài này.

| Ảnh Âm Bản Là Gì?
Thì chắc bạn cũng nhìn loại ảnh kiểu như này rất nhiều rồi đúng không?

Ảnh âm bản là ảnh ngược lại ảnh bình thường. Ví dụ nếu bạn từng chụp ảnh ngày xưa thì thường người ta chụp bằng phim. Nó không giống bây giờ chụp và lưu luôn vào thẻ nhớ. Người ta có 1 cái cuộn phim lưu trữ ảnh đã chụp rồi. Khi bạn nhìn vào cuộn phim đó chính là ảnh âm bản. Từ ảnh đó người ta sẽ rửa và cho ra 1 cái ảnh màu bình thường.
Trong phần mền Matlab thì có một hàm giúp bạn biến đổi 1 bức ảnh sang ảnh âm bản đó là hàm:
resultImage = imcomplement(hinhAnh)
Trong đó: imcomplement() Là hàm giúp bạn chuyển đổi ảnh sang ảnh màu có 1 tham số truyền vào đó là bức ảnh bạn muốn chuyển. Khi chuyển xong nó sẽ trả về cho bạn bức ảnh được lưu vào biến resultImage
Bài tập áp dụng
Dưới đây tôi và bạn cùng làm một bài tập nhỏ xử lý bức ảnh màu sang ảnh âm bản.

1. pushbutton1 (Chon Hinh Anh)
global hinhAnh; [tenFile, duongDanFile] = uigetfile({'*.jpg;*.JPG','JPG Files (*.jpg, *JPG)'; '*.tif;*.TIF','TIF Files (*.tif, *.TIF)';... '*.gif;*.GIF','GIF Files (*.gif, *.GIF)';... '*.png;*.PNG','PNG Files (*.png, *.PNG)';... '*.bmp;*.BMP','BMP Files (*.bmp, *.BMP)';... '*.*','Tat Ca Files(*.*)'}, 'VuTenIT Chon Hinh Anh'); if ~strcmp(tenFile,'') fullname = strcat(duongDanFile,tenFile); hinhAnh = imread(fullname); axes(handles.axes1); imshow(hinhAnh); end
Trong đó:
- global hinhAnh; Tạo biến toàn cục lưu trữ hình ảnh
- uigetfile Mở một Dialog Box
- strcat Nối 2 chuỗi
- imread Đọc hình ảnh
- imshow Hiện thị ảnh đó nên axes1
2. pushbutton2 (Bien Doi Anh)
global hinhAnh; anhAmBan = imcomplement(hinhAnh); axes(handles.axes2); imshow(anhAmBan);
Trong đó: imcomplement() Biến đổi ảnh màu sang ảnh âm bản
Oke giờ bạn thử thay trương trình nên xem được không?

| Cân bằng mức xám
Cân bằng mức xám thì có tác dụng làm tăng độ tương phản của ảnh xám nên. Có nghĩa là các chỗ nào tối thì sáng nên sẽ làm cho độ tương phản rõ hơn để người dùng đễ dàng nhìn thấy.
Câu lệnh:
anhXam = rgb2gray(hinhAnh); canBangMucXam = histeq(anhXam, 256);
Trong đó:
- rgb2gray : Biến đổi ảnh màu thành ảnh xám
- histeq : Cân bằng mức xám. Có 2 tham số truyền vào đó là ảnh xám và giá trị bạn muốn cân bằng.
Bài tập áp dụng
Tôi và bạn cùng nhau làm bài tập dưới đây để hiểu rõ hơn 2 câu lệnh trên cũng như là để bạn biết cách sử lý vấn đề

1. pushbutton1 (Chon Anh)
global image [FileName,PathName] = uigetfile({'*.png;*.PNG','PNG Files (*.png, *.PNG)'; '*.jpg;*.JPG','JPG Files (*.jpg, *JPG)';... '*.tif;*.TIF','TIF Files (*.tif, *.TIF)';... '*.gif;*.GIF','GIF Files (*.gif, *.GIF)';... '*.bmp;*.BMP','BMP Files (*.bmp, *.BMP)';... '*.*','All Files(*.*)'},'Chon hinh anh de xu ly'); if ~strcmp(FileName,0) fullname = strcat(PathName, FileName) ; image = imread(fullname); axes(handles.axes1); imshow(image); end
2. pushbutton2 (Xy Ly Anh)
global image [~ , ~, p] = size(image); if p ==3 image = rgb2gray(image); canBangMucXam = histeq(image, 256); axes(handles.axes2); imshow(image); axes(handles.axes3); imshow(canBangMucXam); else % Can bang anh xam' canBangMucXam = histeq(image, nlev); axes(handles.axes2); imshow(image); axes(handles.axes3); imshow(canBangMucXam); end
Trong đó:
- size Là kiểm tra ảnh. Nếu p = 3 thì là ảnh RGB
Oke bạn sẽ được kết quả như này

Tổng Kết
Như vây tôi và bạn đã cùng nhau học cách biến đổi một bức ảnh màu thành ảnh âm bản cũng như học cách cân bằng ảnh xám thành công! Hi vọng bài viết này sẽ giúp ích cho bạn! Chúc bạn thành công!