You are on page 1of 4

XỬ LÝ ẢNH SỐ BẰNG MATLAB

TẠO NHIỄU VÀ LỌC NHIỄU

Gii thiu
Thực hành 1: Sử dụng hàm để tạo nhiễu và lọc nhiễu.
Sử dụng 2 hàm sau để thực hiện việc tạo nhiễu và lọc nhiễu vào tập tin ảnh.
fspecial ( ) ; imfilter ( )
Sinh viên đọc phần tài liệu hướng dẫn sử dụng 2 hàm trên trong tài liệu đi
kèm và thực hiện việc thêm nhiễu (noise adding) và tăng chất lượng
(enhancement) các ảnh trong thư mục >> image
Ví dụ, sử dụng kết hợp lệnh fspecial ( ) và imfilter ( ) để thực hiện việc là
mờ (blur) tập tin ảnh sau:
>> I = imread('cameraman.tif');
>> subplot(1,2,1);
>> imshow(I);
>> title('Original Image');
>> H =fspecial('disk');
>> subplot(1,2,2);
>> I2 =imfilter(I,H);
>> imshow(I2)
>> title('Blurred Image');

Hình 1: Tạo nhiễu (mờ) cho một tập tin ảnh

-1-
Thực hành 2: Nén ảnh
Sử dụng các câu lệnh và các thuật toán đã học để thực hiện việc nén hình
ảnh. Chúng ta có nhiều cách để nén hình ảnh bằng các kỹ thuật khác nhau một số
cách thông dụng như sau.
BTCODE: Nén hình ảnh sử dụng Block Truncation.
Kim tự tháp: Nén hình ảnh dựa trên các kim tự tháp Gaussian.
DCTCOMPR: Nén hình ảnh dựa trên phép biến đổi cosin rời rạc (Dicrete
Cosine Transform).
IMCOMPR: Nén hình ảnh dựa trên giá trị gia tăng từ phân ly.
Ở bài thực hành này chúng ta sử dụng kỹ thuật nén ảnh bằng phép biến đổi
Cosin rời rạc.
DCT COMPRESSION
1D DCT
Định nghĩa DCT 1 chiều với chiều dài chuỗi là N:
N −1
 π .(2 x + 1).u 
C (u ) = α (u ). ∑ f ( x). cos   với u = 0, N − 1
x=0  2N
1D - IDCT
N −1
 π .(2 x + 1).u 
f ( x) = ∑ α (u ).C (u ).cos 2N  với x = 0, N − 1
u =0
 1
 u=0
Định nghĩa α (u ) =  N
 2
u≠0
 N
2D DCT
N −1 N −1
1  (2 x + 1).iπ   (2 x + 1). jπ 
D(i, j ) = .C (i ).C ( j ) ∑ ∑ p ( x, y ). cos  . cos  
2N x =0 y =0  2N   2N

 1 
 u = 0
C (u ) =  2 
 1 u > 0 
Ví dụ, chuẩn 8x8 mà kỹ thuật nén ảnh JPEG. N =8 và x, y chạy từ 0 tới 7.
Ta có biểu thức biến đổi DCT 2 chiều là:
7 7
1  (2 x + 1).iπ   (2 x + 1). jπ 
D(i, j ) = .C (i ).C ( j ) ∑ ∑ p ( x, y ).cos  . cos  
4 x=0y =0  16 16

-2-
Chương trình nén ảnh sử dụng thuật toán DCT
function imgcompression (I)
w = size (I, 2);
samplesHalf = floor(w / 2);
samplesQuarter = floor(w / 4);
samplesEighth = floor(w / 8);
ci2 = [];
ci4 = [];
ci8 = [];

for k=1:3 % all color layers: RGB


for i=1:size(I, 1) % all rows
rowDCT = dct(double(I(i,:,k)));
ci2(i,:,k) = idct(rowDCT(1:samplesHalf), w);
ci4(i,:,k) = idct(rowDCT(1:samplesQuarter), w);
ci8(i,:,k) = idct(rowDCT(1:samplesEighth), w);
end
end

h = size(I, 1);
samplesHalf = floor(h / 2);
samplesQuarter = floor(h / 4);
samplesEighth = floor(h / 8);
ci2f = [];
ci4f = [];
ci8f = [];

for k=1:3 % all color layers: RGB


for i=1:size(I, 2) % all columns
columnDCT2=dct(double(ci2(:,i,k)));
columnDCT4=dct(double(ci4(:,i,k)));
columnDCT8=dct(double(ci8(:,i,k)));
ci2f(:,i,k) = idct(columnDCT2(1:samplesHalf), h);
ci4f(:,i,k) = idct(columnDCT4(1:samplesQuarter), h);
ci8f(:,i,k) = idct(columnDCT8(1:samplesEighth), h);
end
end

subplot(2,2,1), image(uint8(I)), title('Original Image');


subplot(2,2,2), image(uint8(ci2)), title('Compression Factor 2');
subplot(2,2,3), image(uint8(ci4)), title('Compression Factor 4');
subplot(2,2,4), image(uint8(ci8)), title('Compression Factor 8');
figure

subplot(2,2,1), image(uint8(I)), title('Original Image');


subplot(2,2,2), image(uint8(ci2f)), title('Compression Factor 2 * 2');
subplot(2,2,3), image(uint8(ci4f)), title('Compression Factor 4 * 4');
subplot(2,2,4), image(uint8(ci8f)), title('Compression Factor 8 * 8');
end

-3-
Thc hành
Thực hành 1: Tạo nhiễu và tách nhiễu khỏi ảnh
Sinh viên tìm hiểu chức năng của các câu lệnh sau để thực hiện việc tạo
nhiễu và tách nhiễu khỏi ảnh
fspecial () imfilter () imadjust () histeq() imnoise() wiener 2()
deconvwnr() .

Thực hành 2:
Vận dụng chương trình đã cho trong phần giới thiệu để thực hiện việc nén
ảnh. Lưu lại các file ảnh đã nén, so sánh và cho nhận xét?

-4-

You might also like