Nâng cao chất lượng ảnh
189
kích thước sẽ lớn hơn ảnh ban đầu;
‘same’
có nghĩa là MATLAB chỉ giữ lại phần ảnh có
kích thước bằng ảnh ban đầu.
Hàm imfilter xử lý các kiểu dữ liệu khác nhau theo cách tương tự với các hàm thực hiện các
phép toán số học. Ảnh sau khi lọc có cùng kiểu với ảnh gốc, tuy nhiên khi tính toán hàm
imfilter
tự chuyển sang kiểu số thực dấu chấm động với độ chính xác kép. Nếu kết quả vượt
ra ngoài tầm giá trị của kiểu dữ liệu, hàm này sẽ tự động điều chỉnh giá trị cho phù hợp.
Ví dụ 12-7.
>> A=magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> h=[-1 0 1]
h =
-1 0 1
>> imfilter(A,h)
ans =
24 -16 -16 14 -8
5 -16 9 9 -14
6 9 14 9 -20
12 9 9 -16 -21
18 14 -16 -16 -2
Nếu trước khi lọc, ta chuyển ảnh sang kiểu
uint8
thì sau khi lọc, các giá trị âm sẽ tự động
chuyển về 0.
>> A = uint8(magic(5));
imfilter(A,h)
ans =
24 0 0 14 0
5 0 9 9 0
6 9 14 9 0
12 9 9 0 0
18 14 0 0 0
Ví dụ 12-8. Sử dụng hàm imfilter với các cách chèn các điểm ngoài biên khác nhau
Hình 12.13a là một ảnh gốc kích thước 242x308. Ta cộng nhiễu cho ảnh và khảo sát cửa sổ
lọc kích thước 9x9.
I = imread('eight.tif');
% Đọc ảnh gốc
imshow(I)
J = imnoise(I,'salt & pepper',0.02); % Cộng nhiễu salt&pepper với mật độ
0.02