
Xử Lý Ảnh Matlab – Biểu Đồ Histogram Của Ảnh
Trong bài viết này tôi và bạn cùng nhau tìm hiểu đến Histogram xem nó là gì cũng như là ứng dụng của nó để làm gì?

| Biểu đồ Histogram là gì?
Biểu đồ Histogram của một bức ảnh là biểu đồ biểu diễn sự phân bố của các mức cường độ xám của một bức ảnh.

Ví dụ: Bạn có một bức ảnh xám có kích thước là Width là 200px và Height là 200px. Vậy ta có số điểm ảnh là 200 x 200 bằng 40000 điểm ảnh. Vậy thị trong 40000 điểm ảnh này sẽ có các điểm ảnh có cường độ xám giống nhau. Giả sử dải bit của ảnh đó là từ 0 đến 255 chẳng hạn. Và ví dụ bit 0 có 100 điểm ảnh giống nhau, bit 1 có 150 điểm ảnh,… cho đến bit 255 là n điểm ảnh giống nhau. Và tổng các điểm ảnh của các bit này sẽ bằng 40000.
Vậy thì trong Matlab có một hàm đã được xây dựng sẵ đó là Histogram nó sẽ giúp bạn hiện thị biểu đồ sự phân bố của các cường độ sáng đó (Hiện thị các điểm ảnh giống nhau trên dải bit), nó giống như là biểu đồ thống kê thôi.
| Histogram hỗ trợ ảnh nào?
Thì đối với ảnh xám, Histogram sẽ hỗ trợ bạn vẽ biểu đồ hiện thị cường độ xám bình thường hoặc hiện thị được một mức ảnh nào đó.
Còn đối với ảnh màu thì nó có nhiều dải màu khác nhau (nhiều kênh) cho nên Histogram không hỗ trợ. Chính vì điều này thì đối với ảnh màu thì trong lập trình ta phải lập trình phân biệt được đây là ảnh màu. Sau đó ta tiến hành tách kênh cho ảnh màu.
Để vẽ được biểu đồ dạng Histogram thì ta sẽ sử dụng hàm sau
imhist(duongDanAnh);
| Hướng dẫn vẽ biểu đồ Histogram trong Gui Matlab
Oke bây giờ tôi và bạn làm một ví dụ nho nhỏ dưới đây.
Giả sử tôi có một giao diện như này

Chức năng: Chức năng ta cần xây dựng đó là khi nhấn vào nút Mo anh thì một dialog box hiện nên cho phép người dùng chọn các file ảnh định dạng là jpg, bmp, png, tif. Sau đó ta tiến hành đọc ảnh này và hiện thị vào axes cũng như hiện thị thông tin của bức ảnh vào các tag edit1,… edit6. Khi hiện thị các thông tin xong rồi thì người dùng nhấn vào Bieu do Histogram lập tực một biểu đồ Histogram được hiện thị nên.
Oke về vấn đề đọc hiện thị ảnh cũng như các thông tin của bức ảnh đó nếu bạn chưa biết thì bạn hãy xem lại bài viết này Đọc Và Hiện Thị Ảnh Matlab
Dưới đây là code xây dựng toàn bộ chức năng trên
1. Mo anh (pushutton1)
a. Tạo biến toàn cục
global A
b. Lấy tên ảnh và đường dẫn tới ảnh đó
[filename, path] = uigetfile({'*.jpg';'*.bmp';'*.png';'*.tif'}, ... 'Chon anh');
c. Đọc và hiện thị ảnh
if ~isequal(filename, 0) A = imread([path, filename]); axes(handles.axes1) imshow(A); else return end
Trong đó:
- isequal(filename, 0): Kiểm tra tên file có bằng 0 hay không. ~ ngược lại là khác 0
- imread(): Đọc ảnh
- imshow(): Hiện thị ảnh
d. Hiện thị thông tin ảnh nên các tag edit
– Đọc ảnh
info = imfinfo(fullfile(path,filename));
– Hiện thị thông tin ảnh
set(handles.edit4, 'String', filename); set(handles.edit1, 'String', info.FileSize); set(handles.edit2, 'String', info.Width); set(handles.edit3, 'String', info.Height); set(handles.edit5, 'String', info.BitDepth); set(handles.edit6, 'String', info.ColorType);

2. Bieu do Histogram (pushutton2)
a. Gọi biến toàn cục
global A
b. Lấy giá trị kiểu ảnh (Ảnh xám hay là ảnh màu)
ColorType = get(handles.edit6, 'String');
Trong đó: handles.edit6 là giá trị mà ta có được khi lấy thông tin của bức ảnh và lưu vào edit6
c. Vẽ biểu đồ Histogram
figure; switch ColorType case 'grayscale' imhist(A); title('Histogram Anh Xam'); case 'truecolor' subplot(3,1,1) imhist(A(:,:,1)); title('Histogram Kenh Do'); subplot(3,1,2) imhist(A(:,:,2)); title('Histogram Kenh Xanh La'); subplot(3,1,3) imhist(A(:,:,3)); title('Histogram Kenh da troi'); end
Trong đó:
- grayscale Là ảnh xám. Cho nên ta vẽ luôn
- truecolor Là ảnh màu. Ta sẽ tách làm 3 kênh tương đương vẽ 3 biểu đồ của 3 kênh này
- subplot(3,1,1) Vẽ biểu đồ thứ nhất. subplot(3,1,2), subplot(3,1,3) tương tự
- imhist Hàm vẽ Histogram
- title(‘Histogram Kenh Do’) Đặt tiêu đề
- A(:,:,1) Là tách ảnh 3 chiều A(:,:,2), A(:,:,3) tương tự

Oke bây giờ bạn chạy trương trình nên xem nào
– Đây là biểu đồ của ảnh Màu

Như hình trên bạn có thể thấy thì bit có cường độ xám giống nhau nhiều nhất là 50.
– Đây là biểu đồ ảnh xám

Tổng Kết:
Như vây tôi và bạn đã cùng tìm hiểu về Histogram trong Matlab. Qua bài học này hi vọng rằng bạn có cái nhìn tổng quan về Histogram cũng như cách sử dụng vx biểu đồ của nó, các hàm hỗ trợ. Chúc bạn thành công!
Em làm như trên nhưng vẫn không thể hiện thị được Histogram của ảnh xám,ảnh xám vẫn hiện biểu đồ gồm 3 màu. A giải đáp giúp e với ạ,em cảm ơn
B mở info ảnh xem ảnh đó có chắc chắn là ảnh xám không