Phân tích ảnh trong miền tần số
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Trang 2MỤC LỤC
CHƯƠNG I: PHÂN TÍCH ẢNH TRONG MIỀN TẦN SỐ 3
1.1Phép dịch chuyển trong DFT 3
1.1.1 Tính chất dịch chuyển theo thời gian của DFT 4
1.1.2 Bài tập áp dụng 4
CHƯƠNG II: MỘT SỐ HÀM XỬ LÝ ẢNH TRONG MATLAB 13
2.1 Hàm imread 13
2.2 Hàm imshow 13
2.3 Hàm fft2 13
2.4 Hàm ifft2 13
CHƯƠNG III: MÔ PHỎNG BẰNG MATLAB 14
3.1 Giao diện chương trình 14
3.2 Tính DFT 2 chiều 14
3.3 Vẽ phổ DFT của bức ảnh 21
TÀI LIỆU THAM KHẢO 22
Trang 3CHƯƠNG I: PHÂN TÍCH ẢNH TRONG MIỀN TẦN SỐ
Trang 41.1.1 Tính chất dịch chuyển theo thời gian của DFT
Trang 5Theo phương pháp vòng tròn:
Ghi chú: Nếu tín hiệu x(n) có số mẫu xung nhỏ hơn số điểm N thì ta phải thêm
vào các điểm 0 cho đủ N điểm
Khi cần vẽ tín hiệu dịch chuyển theo thời gian ta nên dùng phương pháp vòngtròn để vẽ Trên vòng tròn lấy số điểm bằng N sau đó dịch các điểm này Như trongbài tập này trên vòng tròn ta lấy 5 điểm rồi dịch
Bài 2: Cho tín hiệu x(n):
x(n)=δ( n−1)+2 δ (n−4 )−δ(n−7 )
a, Tìm DFT 10 điểm của x(n) Gọi DFT này là X(k)
b, Cho y(n) có biến đổi DFT 10 điểm là Y(k) thỏa Y (k )=2 X (k )e
Trang 6Ghi chú: Nếu bài toán yêu cầu tìm X(k) ta chỉ cần viết biểu thức X(k) là đủ.
Nếu bài toán yêu cầu vẽ phổ tần số ta lần lượt cho k=0,1,2,3…N-1 sau đó tìm module
và đối số ứng với từng trường hợp để vẽ hai đồ thị theo tần số k (đồ thị biên độ vè đồthị góc pha)
Vậy ta có y(n) như sau:
c, Từ công thức lượng giác:
Trang 8Biến đổi DFT 2 chiều:
Bức ảnh trong miền không gian có hai chiều, chiều ngang là m, chiều dọc là n,
do đó để thực hiện biến đổi DFT bức ảnh ta phải thực hiện biến đổi DFT hai chiều.Chiều theo trục m lấy M điểm và ta được bức ảnh diễn tả trong miền tần số p, chiềutheo trục n ta lấy N điểm và ta diễn tả bức ảnh theo trục tần số q
Như vậy, sau khi biến đổi ta được bức ảnh trong miền tần số với các giá trịF(p,q) trong hai miền tần số p,q
Bài tập áp dụng
Bài 1: Cho bức ảnh gốc như hình vẽ sau đây:
0≤p≤M−1
0≤m≤M−1
Trang 9Tìm bức ảnh biến đổi trong miền tần số bằng cách thực hiện biến đổi DFT 2x2.
Vậy ta có bức ảnh biến đổi F(p,q):
Ta nhận thấy, sau biến đổi bức ảnh sẽ rơi vào trong miền tần số không phải là ảnh gốc như các phép biến đổi toán tử không gian
Bài 2: Cho bức ảnh như hình vẽ:
Tìm bức ảnh biến đổi trong miền tần số bằng cách thực hiện biến đổi DFT 4x4.
Trang 102+ e−jπ
+ e−j2 πe−j
π
2+ e−j2 πe−jπ =(−1)(− j)+(−1)(−1)+1.(− j )+1.(−1)=0
Trang 11Vậy ta có bức ảnh biến đổi trong miền tần số:
Ghi chú: Trong những bài toán phức tạp, ta thực hiện nhanh phép toán bằng
cách để ý tới các số hạng f(m,n) khác 0 Xác định tọa độ m,n tại các điểm này sau đó thay vào công thức
=(−1)(−1)+(−1).1+1.(−1)+1.1=0
Trang 12Qua bài tập này ta nhận xét: bức ảnh gốc có mức xám là số thực nhưng khi thực hiện biến đổi DFT để tìm bức ảnh trong miền tần số, các mức xám tương ứng sẽ biến thành các số phức Tuy nhiên đây chỉ là bức ảnh trung gian về tần số, sau đó qua các mạch lọc và thực hiện biến đổi ngược DFT để thành bức ảnh thực gốc ban đầu.
Trang 13CHƯƠNG II: MỘT SỐ HÀM XỬ LÝ ẢNH TRONG MATLAB
2.1 Hàm imread
- Hàm imread đọc các file ảnh với bất kỳ định dạng ảnh và lưu lại với dạng một
ma trận biểu diễn ảnh trong matlab
- Cú pháp :>>A=imread (‘filename.jpg’)
Trong đó A là tên biến, “filename” là đường dẫn đến ảnh cần đọc, jpg là địnhdạng của ảnh
- VD: Đọc 1 file ảnh có tên là Nha Dam, có định dạng ảnh là jpg
>>A = imread ('Nha Dam.jpg');
2.2 Hàm imshow
- Hàm imshow cho phép hiển thị file ảnh
- Cú pháp :>>imshow(‘filename.jpg’) hoặc >>imshow(A)
Trong đó A là tên biến được gán cho ma trận ảnh
- VD: >>A = imread ('Nha Dam.jpg');
>> imshow(‘Nha Dam.jpg’ hoặc imshow(A);
Trang 14CHƯƠNG III: MÔ PHỎNG BẰNG MATLAB
3.1 Giao diện chương trình
Mục tiêu: Viết chương trình bằng Gui trong matlab để thục hiện tính DFT 2 chiều và vẽ phổ DFT bức ảnh
Từ mục tiêu trên ta vẽ được giao diện như sau:
Hình 3.1 Giao diện chương trình
Trang 15b=str2double(get(handles.edit2110, 'string' )) ;
c=str2double(get(handles.edit2101, 'string' )) ;
d=str2double(get(handles.edit2111, 'string' )) ;
if (isnan(a)==1 || isnan(b)==1 || isnan(c)==1 || isnan(d)==1)
msgbox( 'YEU CAU NHAP TAT CA LA SO' )
else
x=[a b;c d];
y=fft2(x);
set(handles.edit2200, 'string' ,num2str(y(1,1)));
set(handles.edit2210, 'string' ,num2str(y(1,2)));
set(handles.edit2201, 'string' ,num2str(y(2,1)));
set(handles.edit2211, 'string' ,num2str(y(2,2)));
set(handles.edit3200, 'string' ,num2str(y(1,1)));
set(handles.edit3210, 'string' ,num2str(y(2,1)));
set(handles.edit3220, 'string' ,num2str(y(3,1)));
Trang 16set(handles.edit3201, 'string' ,num2str(y(1,2)));
set(handles.edit3211, 'string' ,num2str(y(2,2)));
set(handles.edit3221, 'string' ,num2str(y(3,2)));
set(handles.edit3202, 'string' ,num2str(y(1,3)));
set(handles.edit3212, 'string' ,num2str(y(2,3)));
set(handles.edit3222, 'string' ,num2str(y(3,3)));
msgbox( 'YEU CAU NHAP TAT CA LA SO' )
else
x=[a b c d;e f g h;i j k l;m n o p];
y=fft2(x);
Trang 17set(handles.edit4200, 'string' ,num2str(y(1,1))); set(handles.edit4210, 'string' ,num2str(y(2,1))); set(handles.edit4220, 'string' ,num2str(y(3,1))); set(handles.edit4230, 'string' ,num2str(y(4,1))); set(handles.edit4201, 'string' ,num2str(y(1,2))); set(handles.edit4211, 'string' ,num2str(y(2,2))); set(handles.edit4221, 'string' ,num2str(y(3,2))); set(handles.edit4231, 'string' ,num2str(y(4,2))); set(handles.edit4202, 'string' ,num2str(y(1,3))); set(handles.edit4212, 'string' ,num2str(y(2,3))); set(handles.edit4222, 'string' ,num2str(y(3,3))); set(handles.edit4232, 'string' ,num2str(y(4,3))); set(handles.edit4203, 'string' ,num2str(y(1,4))); set(handles.edit4213, 'string' ,num2str(y(2,4))); set(handles.edit4223, 'string' ,num2str(y(3,4))); set(handles.edit4233, 'string' ,num2str(y(4,4))); end
case 5
a=str2double(get(handles.edit5100, 'string' )) ; b=str2double(get(handles.edit5110, 'string' )) ; c=str2double(get(handles.edit5120, 'string' )) ; d=str2double(get(handles.edit5130, 'string' )) ; e=str2double(get(handles.edit5140, 'string' )) ; f=str2double(get(handles.edit5101, 'string' )) ; g=str2double(get(handles.edit5111, 'string' )) ; h=str2double(get(handles.edit5121, 'string' )) ; i=str2double(get(handles.edit5131, 'string' )) ; j=str2double(get(handles.edit5141, 'string' )) ; k=str2double(get(handles.edit5102, 'string' )) ; l=str2double(get(handles.edit5112, 'string' )) ; m=str2double(get(handles.edit5122, 'string' )) ; n=str2double(get(handles.edit5132, 'string' )) ;
Trang 18if (isnan(a)==1 || isnan(b)==1 || isnan(c)==1 || isnan(d)==1 || isnan(e)==1 ||
isnan(f)==1 || isnan(g)==1 || isnan(h)==1 || isnan(i)==1 || isnan(j)==1 ||
isnan(k)==1 || isnan(l)==1 || isnan(m)==1 || isnan(n)==1 || isnan(o)==1 || isnan(p)
|| isnan(q)==1 || isnan(r)==1 || isnan(s)==1 || isnan(t)==1 || isnan(aa)==1 ||
isnan(bb)==1 || isnan(z)==1 || isnan(u)==1 || isnan(w)==1)
msgbox( 'YEU CAU NHAP TAT CA LA SO' )
else
x=[a b c d e;f g h i j;k l m n o;p q r s t;aa bb z u w];
y=fft2(x);
set(handles.edit5200, 'string' ,num2str(y(1,1)));
set(handles.edit5210, 'string' ,num2str(y(2,1)));
set(handles.edit5220, 'string' ,num2str(y(3,1)));
set(handles.edit5230, 'string' ,num2str(y(4,1)));
set(handles.edit5240, 'string' ,num2str(y(5,1)));
set(handles.edit5201, 'string' ,num2str(y(1,2)));
set(handles.edit5211, 'string' ,num2str(y(2,2)));
set(handles.edit5221, 'string' ,num2str(y(3,2)));
set(handles.edit5231, 'string' ,num2str(y(4,2)));
set(handles.edit5241, 'string' ,num2str(y(5,2)));
set(handles.edit5202, 'string' ,num2str(y(1,3)));
set(handles.edit5212, 'string' ,num2str(y(2,3)));
Trang 19set(handles.edit5222, 'string' ,num2str(y(3,3)));
set(handles.edit5232, 'string' ,num2str(y(4,3)));
set(handles.edit5242, 'string' ,num2str(y(5,3)));
set(handles.edit5203, 'string' ,num2str(y(1,4)));
set(handles.edit5213, 'string' ,num2str(y(2,4)));
set(handles.edit5223, 'string' ,num2str(y(3,4)));
set(handles.edit5233, 'string' ,num2str(y(4,4)));
set(handles.edit5243, 'string' ,num2str(y(5,4)));
set(handles.edit5204, 'string' ,num2str(y(1,5)));
set(handles.edit5214, 'string' ,num2str(y(2,5)));
set(handles.edit5224, 'string' ,num2str(y(3,5)));
set(handles.edit5234, 'string' ,num2str(y(4,5)));
set(handles.edit5244, 'string' ,num2str(y(5,5)));
Trang 20Hình 3.3 Thực hiện tính DFT 2 chiều kích thước 3x3
Hình 3.4 Thực hiện tính DFT 2 chiều kích thước 4x4
Trang 21Hình 3.5 Thực hiện tính DFT 2 chiều kích thước 5x5
3.3 Vẽ phổ DFT của bức ảnh
Ở đây ta thực hiện vẽ phổ DFt của bức ảnh, đưa tần số F(0,0) về vị trí trung tâm
và thực hiện biến đổi DFt ngược
Để thực hiện các công việc trên ta có đoạn code như sau:
global im_original filsize im_filtered value
Trang 22Hình 3.6 Phổ DFT và DFT ngược của bức ảnh
TÀI LIỆU THAM KHẢO
[1] Bài giảng Xử lý âm thanh & hình ảnh, Ths Tôn Thất Nghiêm
[2] Matlab và ứng dụng trong viễn thông, Phạm Hồng Liên
[3] Báo cáo nâng cao chất lượng hình ảnh bằng phương pháp toán tử điểm, Nhóm 1[4] Báo cáo kỹ thuật Historgam, Nhóm 4