Xử Lý Ảnh Matlab – Biểu Đồ Histogram Của Ảnh

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ì?

ve bieu do Histogram trong matlab
ve bieu do Histogram trong matlab

| 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.

histogram matlab
histogram matlab

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

Histogram la gi
Histogram la gi

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);
ve bieu do Histogram matlab
ve bieu do Histogram matlab

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ự
Histogram matlab la gi
Histogram matlab la gi

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

Histogram anh mau
Histogram anh mau

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

Histogram anh xam
Histogram anh xam

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!

Hãy trở thành người đầu tiên bình luận!

Thông báo
avatar
250
wpDiscuz

Xử Lý Ảnh Matlab – Biểu Đồ Histogram Của Ảnh

Tác giả: Thủ Thuật Windows Thời gian đọc: 5 min