Phân tích wavelet cho một hình ảnh nhiễu được mô tả như sau:
- Trong mỗi mức phân tích wavelet N, hình ảnh được chia thành bốn vùng, cụ thể là HH, HL, LH và LL.
Trong đó:
+ Vùng HH cung cấp thông tin các hệ số chi tiết chéo của hình ảnh. + Vùng HL cung cấp thông tin về các hệ số chi tiết ngang của hình ảnh. + Vùng LH cung cấp thông tin về các hệ số chi tiết dọc của hình ảnh.
21 - Để khử nhiễu, các thông tin có trong thành phần tần số thấp sẽ được giữa lại và được tiếp tục điều chỉnh trong quá trình lựa chọn giá trị ngưỡng cho các mức phân tích tiếp theo.
Việc lựa chọn ngưỡng cùng với việc chọn mức phân tích là một vấn đề quan trọng khi khử nhiễu hình ảnh ứng dụng wavelet. Nếu T là một ngưỡng quá nhỏ thì kết quả có thể gần đúng với đầu vào nhưng kết quả thu được sẽ vẫn còn nhiễu. Còn nếu T là một giá trị ngưỡng lớn thì nó sẽ tạo ra một tín hiệu với số lượng lớn các giá trị bằng 0, điều này dẫn đến một kết quả quá mịn, kết quả sau khử nhiễu cũng sẽ không như mong muốn. Việc chọn một mức phân tích quá cao sẽ dẫn đến tín hiệu ngày càng có nhiều giá trị bằng 0 và kết quả sau khử nhiễu là thông tin không còn chính xác khi tái tạo lại. Như vậy khi chọn ngưỡng và mức phân tích nên tùy thuộc vào mục đích khử nhiễu ảnh để có sự lựa chọn loại ngưỡng và mức phân tích cho phù hợp.
Chất lượng hình ảnh được tái tạo sau khi khử nhiễu được đo bằng tỉ số tín hiệu cực đại trên nhiễu:
2 10 log R PSNR MSE (3.6) Trong đó:
R bằng 255 nếu ảnh đầu vào có kiểu dữ liệu 8-bit unsigned integer và R bằng 1 nếu
ảnh đầu vào có kiểu dữ liệu double floating-point.
MSE là sai số trung bình bình phương giữa ảnh gốc và ảnh đã khử nhiễu: Đối với ảnh mức xám: 2 1 1 1 [ ( , ) ( , )] M N i j MSE x i j x i j M N (3.7) Đối với ảnh RGB: 2 1 1 1 [ ( , ) ( , )] 3 M N i j MSE x i j x i j M N (3.8)
Một số kết quả thực nghiệm trên Matlab cho ảnh mức xám và ảnh RGB có số điểm ảnh là 512 × 512 ở các mức độ nhiễu khác nhau, thực hiện đặt ngưỡng mềm và dùng wavelet Daubechies phân tích mức 2 để khử nhiễu:
22 Bảng 3.1: Bảng giá trị kết quả thực nghiệm với ảnh mức xám
Mức độ nhiễu 0.01 0.02 0.03 0.04 0.05
MSE 8.4567×10-4
0.0015 0.002 0.0026 0.0031
PSNR (dB) 30.7280 28.3829 26.9245 26.9276 25.0691
Hình 3.3: Kết quả thực nghiệm với ảnh RGB
Bảng 3.2: Bảng giá trị kết quả thực nghiệm với ảnh RGB
Mức độ nhiễu 0.01 0.02 0.03 0.04 0.05
MSE 7.0059×10-4 9.7172×10-4 0.0012 0.0015 0.0017
PSNR (dB) 31.5454 30.1246 29.1628 28.3642 27.7202
Chương trình Matlab viết trên M – file cho thực nghiệm - Chương trình cho ảnh mức xám
I = imread (‘im_gray.jpg’); I = im2double (I);
J = imnoise (I, ’gaussian’, 0, 0.02); wname = ‘db4’;
lev = 2;
[c, s] = wavedec2 (X, lev, wname); det1 = detcoef2 (‘c’, c, s, 1);
sigma = median (abs(det1)) / 0.6745; alfa = 2;
keepapp = 1;
thr = wbmpen (c, s, sigma, alfa);
23 mse = sum ((I(:) – ID(:)).^2) / prod (size(I));
psnr = 10*log10(1/ mse);
subplot(131); imshow (I); title (‘Ảnh gốc’);
subplot (132); imshow (J); title (‘Ảnh nhiễu với mức độ 0.02’); subplot (133); imshow (ID); title (‘Ảnh sau khử nhiễu’);
- Chương trình cho ảnh RGB
I = imread (‘im_rgb.jpg’);
J = imnoise (I, ‘gaussian’, 0, 0.02); I = im2double (I); J = im2double (J); J1 = J (:, :, 1) ; J2 = J (:, :, 2) ; J3 = J (:, :, 3) ; wname = ‘db4’ ; lev_dec = 2 ;
[c1, s1] = wavedec2 (J1, lev_dec, wname) ; det1 = detcoef2 (‘c’, c1, s1, 1);
[c2, s2] = wavedec2 (J2, lev_dec, wname) ; det2 = detcoef2 (‘c’, c2, s2, 1);
[c3, s3] = wavedec2 (J3, lev_dec, wname) ; det3 = detcoef2 (‘c’, c3, s3, 1);
sigma1 = median (abs(det1)) / 0.6745; sigma2 = median (abs(det2)) / 0.6745; sigma3 = median (abs(det3)) / 0.6745; alfa = 2;
keepapp = 1;
thr1 = wbmpen (c1, s1, sigma1, alfa); thr2 = wbmpen (c2, s2, sigma2, alfa); thr3 = wbmpen (c3, s3, sigma3, alfa); sorh = ‘s’;
ID1 = wdencmp (‘gbl’, c1,s1, wname, lev_dec, thr1, sorh, keepapp); ID2 = wdencmp (‘gbl’, c2,s2, wname, lev_dec, thr2, sorh, keepapp); ID3 = wdencmp (‘gbl’, c3,s3, wname, lev_dec, thr3, sorh, keepapp); X = [ID1 ID2 ID3];
24 mse = sum ((I(:) – ID(:)).^2) / (3*prod (size(I)));
psnr = 10*log10(1 / mse);
subplot(131); imshow (I); title (‘Ảnh gốc’);
subplot (132); imshow (J); title (‘Ảnh nhiễu với mức độ 0.02’); subplot (133); imshow (ID); title (‘Ảnh sau khử nhiễu’);
Nhận xét
- Từ các kết quả thực nghiệm cho thấy, việc lựa chọn mức phân tích wavelet, loại ngưỡng và họ hàm wavelet trong quá trình lọc nhiễu cho tín hiệu hình ảnh sẽ ảnh hưởng đến kết quả sau khi lọc nhiễu.
- Mức phân tích ảnh hưởng đến độ mịn của tín hiệu sau khi tái tạo lại. Tuy nhiên, đối với một số họ hàm wavelet khi phân tích ở mức cao cộng với việc đặt ngưỡng sẽ làm cho tín hiệu tái tạo lại quá trơn tru, thông tin chính trong tín hiệu không còn mang tính chính xác.
- Như vậy, khi chọn mức phân tích cao trong quá trình lọc nhiễu để tái tạo lại một cách tương đối chính xác thông tin cần phải chọn một wavelet phù hợp với mức phân tích cao và tùy vào mục đích cần thấy rõ chi tiết nào của ảnh bị nhiễu để lựa chọn loại ngưỡng cứng hay mềm.
- Tùy vào mục đích khử nhiễu cần thấy rõ những chi tiết tổng quát hay những chi tiết nhỏ mà lựa chọn các họ hàm wavelet và chọn mức phân tích cho phù hợp.
25
CHƯƠNG 4
KẾT QUẢ KHỬ NHIỄU TÍN HIỆU HÌNH ẢNH