Nâng cao chất lượng ảnh
180
Ví dụ 12-3. Làm lại ví dụ 12-2 không sử dụng hàm imadjust:
I
=
imread('pout.tif');
%
Đọc ảnh gốc
imshow(I)
%
Hiển thị ảnh gốc
J = 1./(1 + (0.5./(im2double(I) + eps)).^5);
% Tăng độ tương phản
figure,
imshow(J)
%
Hiển thị ảnh sau biến đổi
a) Ảnh gốc
b) Ảnh sau khi biến đổi
Hình 12.5.
12.2. CAÂN BAÈNG HISTOGRAM
12.2.1. TAÏO VAØ VEÕ BIEÅU ÑOÀ HISTOGRAM
Histogram của một ảnh số nhận L giá trị mức xám khác nhau trong khoảng [0,G] là một hàm
rời rạc được định nghĩa bởi:
( )
k
k
h r
n
=
(12.3)
với
k
r
là giá trị mức xám thứ k còn
k
n
là số pixel của ảnh có mức xám bằng
k
r
. Giá trị của G
phụ thuộc vào kiểu dữ liệu của ảnh: G = 1 đối với kiểu double, G = 255 với kiểu uint8, G =
65535 với kiểu uint16. Thông thường, người ta cũng định nghĩa histogram dưới dạng chuẩn
hoá, đó là tỷ số của
k
n
so với tổng số pixel của ảnh:
( )
( )
k
k
k
h r
n
p r
n
n
=
=
(12.4)
với k = 1, 2, ..., L.
Hàm cơ bản nhất dùng để tính histogram của ảnh trong MATLAB là hàm imhist với cú pháp
như sau:
>> [h,r] = imhist(I,N)
trong đó I là ảnh đầu vào. Các giá trị mức xám trong khoảng [0,G] được chia thành N khoảng
(gọi là bin), vị trí của các bin được xác định bởi vector r và h là vector histogram, nghĩa là số
các pixel có giá trị mức xám nằm trong từng bin. Nếu gọi hàm imhist mà không cần trả về
các thông số h, r thì MATLAB sẽ tạo một figure và vẽ biểu đồ histogram của ảnh.
Ngoài cách vẽ trực tiếp bằng cách dùng hàm imhist không cần thông số trả về như trên, ta có
thể tính vector histogram của ảnh theo cú pháp trên, sau đó dùng các hàm bar, stem, hoặc
plot
để vẽ biểu đồ histogram.