1. Trang chủ
  2. » Công Nghệ Thông Tin

Đề thi Xử Lý Ảnh doc

68 2,3K 23
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Đề thi Xử Lý Ảnh doc
Người hướng dẫn GV: Trần Tiến Đức
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Xử lý ảnh
Thể loại Đề thi
Thành phố Hà Nội
Định dạng
Số trang 68
Dung lượng 2,07 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đáp án: Cách làm âm ảnh được cho bằng phương trình: s=L-1-r trong đó L=256 là số lượng mức xám, r là mức xám đầu vào, s là mức xám đầu ra Quan sát đồ thị ta thấy: Mức xám đầu ra “ngượ

Trang 1

Đề thi Xử Lý Ảnh

GV: Trần Tiến Đức

MỤC LỤC

ĐỀ THI VÀ ĐÁP ÁN MÔN XỬ LÝ ẢNH SỐ

Chương 3 gồm 13 câu từ câu 1 đến câu 13

Câu 1 Xây dựng và cài đặt thuật toán làm âm ảnh

Đáp án:

Cách làm âm ảnh được cho bằng phương trình: s=L-1-r trong đó L=256 là số lượng mức xám, r

là mức xám đầu vào, s là mức xám đầu ra

Quan sát đồ thị ta thấy: Mức xám đầu ra “ngược” với đầu vào, tức là thuật toán này biến ảnh đen trở thành ảnh trắng và trắng thành đen

L-1

L-1

Trang 2

 log(1+r): tránh trường hợp log = 0

Quan sát đồ thị thấy đường log làm cho ảnh

L-1 (0,0)

Negative

Trang 3

Câu 3 Xây dựng và cài đặt thuật toán biến đổi lũy thừa ảnh

 γ>1: làm cho ảnh tối hơn

c: được tính như sau:

Trang 4

Câu 4 Xây dựng và cài đặt thuật toán biến đổi tuyến tính từng phần

Đáp án:

Quan sát trên đồ thị ta thấy:

Biến đổi ảnh đen ít thành ảnh đen nhiều, làm cho ảnh trắng ít trở thành trắng nhiều Tức là làm tăng độ tương phản của ảnh (kéo giãn độ tương phản)

1

x x

x x

Y=

1 2

1 2

(r2,s2)

(r1,s1)

Trang 5

(

2 )

1

(

r L

s L

Trang 6

Cân bằng histogram được cho bằng phương trình:

s=T(r)=(L-1) r pr w dw

0

) (

với pr(w) : Xác suất xảy ra mức xám w

Trong xác suất, tích phân của hàm mật độ là hàm phân phối Công thức trên có w là biến liên

tục, ta không thể lập trình nó Ta phải dùng công thức rời rạc:

0

) ( với k= 0,1,2,…,L-1

Trang 7

Tính histogram của ảnh rồi suy ra hàm biến đổi histogram tự động

Biến đổi histogram mong muốn

zk = G-1(T(rk))

Mục tiêu: có mức xám đầu vào rk, ta suy ra mức xám đầu ra zk

Ví dụ cho histogram mong muốn như hình vẽ sau:

Trang 8

Để mô tả histogram mong muốn như hình vẽ, ta dùng phương trình đường thẳng đi qua hai điểm (x1,y1) và (x2,y2):

1

x x

x x

=>y=

1 2

1 2

x x

y y

Trang 9

Trong trường hợp 2 mức xám kề nhau chênh lệch quá nhỏ, nếu ta cân bằng histogram tự động

sẽ không có kết quả Trong trường hợp đó ta phải dùng histogram cục bộ

Chọn cửa sổ có kích thước lẻ để có phần tử trung tâm, ví dụ: m=n=3, cân bằng histogram của

dữ liệu lấy từ cửa sổ và thay phần tử trung tâm bằng phần tử mới

Trang 10

w = (BYTE **)Alloc2D(m,n,sizeof(BYTE));

for (x=a; x<M-a; x++)

for (y=b; y<N-b; y++) {

for (s=-a; s<=a; s++)

Trang 11

Vì vậy ở phần này ta nêu ra tiêu chuẩn chọn khối ảnh để làm rõ

Tiêu chuẩn chọn khối ảnh căn cứ vào 2 đại lượng thống kê là mean (giá trị trung bình hay giá trị

kz vọng) và variance (phương sai) Xem xét các ví dụ sau:

deviation = var iance =7.21

Trang 12

Deviation= var iance =1.58

Ý nghĩa:

Variance (phương sai) dùng để đo sự phân tán của dữ liệu xa hay gần giá trị mean Nếu variance bằng không nghĩa là dữ liệu bằng nhau

Để đo 2 khối dữ liệu với nhau thì mean và variance của khối phải gần bằng nhau

Tiêu chuẩn chọn khối trong ảnh để làm rõ:

) , (

y x f

y x Ef

msxy: mean của khối ảnh

mG: mean của toàn bộ ảnh

sxy: độ lệch chuẩn khối ảnh

G: độ lệch chuẩn của toàn bộ ảnh

Nếu msxy<=k0mG và k1 G<= sxy<=k2 G

Nếu ngược lại

Trang 13

for (y=0; y<sizey; y++)

variance = variance + (a[x][y]-mean)*(a[x][y]-mean);

w = (BYTE **)Alloc2D(m,n,sizeof(BYTE));

for (x=a; x<M-a; x++)

for (y=b; y<N-b; y++) {

for (s=-a; s<=a; s++)

return;

}

Trang 14

Câu 9 Xây dựng và cài đặt thuật toán lọc tuyến tính làm trơn

Mặt nạ lọc người ta sẽ cho tùy vào bài toán cụ thể

Tổng quát lọc trong không gian được cho bằng phương trình :

t y s x f t s

Trong đó :

mxn là kích thước của bộ lọc, m và n thường là số lẻ để bộ lọc có phần tử trung tâm

a=m/2 và b=n/2 là kích thước nữa bộ lọc

Phép toán lọc trong không gian được gọi là tổng chập (convolution)

Đối với lọc tuyến tính, mặt nạ lọc thường là bộ lọc trung bình

Trang 15

Lọc median (lọc trung vị) là lấy vị trí chính giữa

Lọc median đặc biệt hiệu quả khi trong ảnh có nhiễu xung, nhiễu xung còn được gọi là nhiễu muối tiêu Nhiễu muối tiêu là những đốm đen và đốm trắng trong ảnh

Thực hiện lọc median như sau:

Lấy số liệu vào từng cửa sổ (3x3) Tạo mảng một chiều, sắp tăng dần và phần tử f(x,y) được thay bằng phần tử chính giữa

void Sort(BYTE **a, int sizex, int sizey)

{

int i, j;

BYTE *b = *a;

Trang 16

w = (BYTE **)Alloc2D(m,n,sizeof(BYTE));

for (x=a; x<M-a; x++)

for (y=b; y<N-b; y++) {

for (s=-a; s<=a; s++)

Người ta dùng đạo hàm cấp một hoặc cấp hai để làm tăng độ nét của ảnh

Yêu cầu đaọ hàm cấp một:

- Đạo hàm cấp một bằng 0 trong miền có mức xám đồng đều

- Đạo hàm cấp một khác 0 ở điểm đầu của mức xám bước hoặc mức xám thoai thoải

- Đạo hàm cấp một khác 0 dọc theo mức xám thoai thoải

Đạo hàm cấp một của hàm hai chiều được gọi là gradient, ký hiệu là  và được định nghĩa như sau :

Trang 17

Đạo hàm cấp một theo hướng x là : gx = z8-z5

Đạo hàm cấp một theo hướng y là : gy = z6-z5

Nhưng Roberts đã định nghĩa đạo hàm cấp một theo x như sau : gx=z9-z5

và đạo hàm cấp một theo y là : gy=z8-z6

Trang 18

Ta có hai mặt nạ gx và gy và gọi là mặt nạ Roberts

Mặt nạ Roberts có kích thước chẵn nên không có phần tử trung tâm Do đó Sobel đã mở rộng định nghĩa đạo hàm cấp một như sau :

Trang 19

gx = (int **)Alloc2D(M,N,sizeof(int));

gy = (int **)Alloc2D(M,N,sizeof(int));

Mag = (int **)Alloc2D(M,N,sizeof(int));

int m = 3, n = 3;

double **Sobelx, **Sobely;

Sobelx = (double **)Alloc2D(m,n,sizeof(double));

Sobely = (double **)Alloc2D(m,n,sizeof(double));

Sobelx[0][0] = -1; Sobelx[0][1] = -2; Sobelx[0][2] = -1;

Sobelx[1][0] = 0; Sobelx[1][1] = 0; Sobelx[1][2] = 0;

Sobelx[2][0] = 1; Sobelx[2][1] = 2; Sobelx[2][2] = 1;

Sobely[0][0] = -1; Sobely[0][1] = 0; Sobely[0][2] = 1;

Sobely[1][0] = -2; Sobely[1][1] = 0; Sobely[1][2] = 2;

Sobely[2][0] = -1; Sobely[2][1] = 0; Sobely[2][2] = 1;

ConvolutionInt(f,M,N,gx,Sobelx,m,n,TRUE);

ConvolutionInt(f,M,N,gy,Sobely,m,n,TRUE);

for (x=0; x<M; x++)

for (y=0; y<N; y++)

Mag[x][y] = abs(gx[x][y]) + abs(gy[x][y]);

Trang 20

g[x][y] = (int)(1.0*r/max*255);

} Free2D((void **)gx);

Free2D((void **)gy);

Free2D((void **)Mag);

Free2D((void **)Sobelx);

Free2D((void **)Sobely);

Yêu cầu của đạo hàm cấp hai:

- Đạo hàm cấp hai bằng 0 ở vùng có mức xám đồng đều

- Đạo hàm cấp hai khác 0 ở đầu và cuối của mức xám bước hoặc mức xám thoai thoải

- Đạo hàm cấp hai bằng 0 dọc theo mức xám thoai thoải

Định nghĩa đạo hàm cấp hai của hàm một chiều như sau:

 : gradient (đạo hàm cấp một của hàm 2 biến)

Đạo hàm cấp 2 của ảnh còn được gọi là toán tử Laplace

Trang 21

) ,

Hay viết dưới dạng mặt nạ như sau :

Ta mở rộng thêm các mặt nạ đào hàm cấp hai như sau :

Tùy bài toán mà ta dùng mặt nạ cho phù hợp

Nâng cao độ nét của ảnh được cho bằng phương trình:

g(x,y)=f(x,y)+c[ 2f (x,y)]

Trong đó:

c=-1 nếu tâm mặt nạ âm

c=1 nếu tâm mặt nạ dương

Mức xám đầu ra sẽ có giá trị nhỏ hơn 0 và lớn hơn 255 nên ta phải chuẩn hóa để mức xám đầu

ra nằm trong khoảng 0 255

Đơn giản nhất: nếu đầu ra có giá trị âm thì cho bằng 0, nếu đầu ra >255 thì cho bằng 255

Chuẩn hóa cách khác:

Trang 22

Ta có giá trị min (giá trị âm) và max, ta phải chuyển khoảng min max vào 0…255 bằng công thức sau :

g[x][y]=

min max

min ] ][

[

y x g

Trang 23

w = (double **)Alloc2D(m,n,sizeof(double));

for (y=0; y<N; y++)

temp[x][y] = (int)(scale*(temp[x][y]-min)/(max-min)* 255);

Trang 24

Kí hiệu:

_

) , ( x y

f : là ảnh đã làm nhòe, Mặt nạ làm nhòe được biểu diễn bằng các phương trình sau:

gmask(x,y)=f(x,y) -

_

) , ( x y f

g(x,y) = f(x,y) + k.gmask(x,y)

k được chọn > 0, khi k=1 ta gọi là mặt nạ làm nhòe, khi k>1 ta gọi là lọc tăng cường

Mặt nạ Gauss dùng để làm nhòe ảnh được cho bằng phương trình :

2 2

2 

y xe

: độ lệch chuẩn được cho trước.

Code:

void ConvolutionDouble(BYTE **f, int M, int N, double **g, double **w, int m,

int n, BOOL border)

}

return;

}

Trang 25

void UnsharpMask(BYTE **f, BYTE **g)

{

double **Gauss, sigma=3, sum;

int x, y;

int m = 5, n = 5;

double **fbar, **gmask;

fbar = (double **)Alloc2D(M,N,sizeof(double));

// Tao mat na Gauss

Gauss = (double **)Alloc2D(m,n,sizeof(double));

for (x=-m/2; x<=m/2; x++)

for (y=-n/2; y<=n/2; y++)

Gauss[x+2][y+2] = exp(-(1.0*x*x+1.0*y*y)/(2*sigma*sigma)); sum = 0;

ConvolutionDouble(f, M, N, fbar, Gauss, m, n, TRUE);

gmask = (double **)Alloc2D(M,N,sizeof(double));

for (x=0; x<M; x++)

for (y=0; y<N; y++)

gmask[x][y] = (f[x][y] - fbar[x][y]);

int s;

double k = 4.5;

for (x=0; x<M; x++)

for (y=0; y<N; y++) {

s = int(f[x][y] + k*gmask[x][y]);

Free2D((void **)fbar);

Free2D((void **)gmask);

return;

}

Trang 26

Chương 9 gồm câu 6 câu từ câu 14 đến câu 19

Câu 14 Xây dựng và cài đặt thuật toán Erosion

Đáp án:

Erosion là bào mòn

Ta lấy tập B dời đi một độ dời z sao cho tập vừa dời là tập con của A

Trang 27

if (B[s+a][t+b] == 1 && f[p][q] != 255) {

flag = FALSE;

goto Exit;

} }

Lưu { phương trình này dựa trên tập phản xạ của B, nhưng do B thường là đối xứng nên = B

Trang 28

Opening của tập A bởi phần tử cấu trúc B ký hiệu là , được định nghĩa như sau:

Opening thường dùng để xóa nhiễu

Trang 29

Free2D((void **)temp);

Biên của tập A kí hiệu là Đầu tiên ta bào mòn A bởi B, lấy ảnh A ban đầu trừ đi ảnh

đã bào mòn, ta sẽ được biên

temp = (BYTE **)Alloc2D(M,N,sizeof(BYTE));

// Hieu chinh anh

for (x=0; x<M; x++)

for (y=0; y<N; y++)

if (f[x][y] < 128)

f[x][y] = 0;

Trang 30

for (y=0; y<N; y++)

g[x][y] = f[x][y] - temp[x][y];

Free2D((void **)temp);

return;

}

Câu 19 Xây dựng và cài đặt thuật toán lấp lỗ trống

Đáp án:

Cho một đối tượng ở bên trong có lỗ trống, mục đích là ta phải lấp lỗ trống này

Lấp lỗ trống được cho bằng phương trình:

Trang 31

Thuật toán ngừng khi Xk của bước trước và sau không thay đổi

for (y=0; y<N; y++)

if (a[x][y]==255 && b[x][y] == 255)

c[x][y] = 255;

Trang 33

} Thoat:

Trang 34

Chương 10 gồm 7 câu từ câu 20 đến câu 26

Câu 20 Xây dựng và cài đặt thuật toán phát hiện cạnh ảnh bằng đạo hàm cấp hai

Đáp án:

Có 3 bước cơ bản phải làm để phát hiện cạnh ảnh:

 Làm trơn ảnh để giảm nhiễu

 Phát hiện những điểm ở trên cạnh

 Bỏ những điểm ở trên cạnh không cần thiết

Người ta dùng mặt nạ đạo hàm cấp hai để phát hiện cạnh ảnh, nhưng cạnh ảnh sẽ bị dày lên gấp đôi, và ta phải xử lí trường hợp này

Ngoài ra người ta dùng các mặt nạ đạo hàm cấp hai sau đây để phát hiện cạnh ảnh

Nếu muốn phát hiện đường thẳng trong ảnh thì ta dung lần 4 mặt nạ này lần lượt quét qua ảnh

Ta gọi đầu ra tại 1 điểm ảnh là R1, R2, R3 và R4

Điểm ảnh cần lấy có

Khi lập trình có 4 đầu ra, ta lấy điểm ảnh có Rmax

Lưu { tổng các hệ số trong mặt nạ đều = 0

Mục đích là khi quét mặt nạ qua vùng ảnh có độ sáng đồng đều thì đầu ra sẽ = 0

Trang 35

temp = (int **)Alloc2D(M,N,sizeof(int));

for (y=0; y<N; y++)

g[x][y] = (int)(scale*(temp[x][y]-min)/(max-min)*255);

Free2D((void **)temp);

Trang 36

Gọi gx là ảnh đạo hàm theo hướng x

gy là ảnh đạo hàm theo hướng y

Ảnh độ lớn:

hay dùng công thức xấp xỉ

Ảnh của hướng (direction) hay là ảnh góc pha:

Ta có thể kết hợp thêm với ngưỡng để lấy những điểm ảnh trên cạnh cho tốt

Chẳng hạn ta lấy ngưỡng =33% giá trị max của đạo hàm cấp 1, nếu ta phát hiện điểm ảnh nhỏ hơn ngưỡng thì ta bỏ qua

Trang 37

Được gọi là độ lệch chuẩn

được gọi là phương sai

Ta dùng hàm Gauss để làm trơn ảnh và lọc nhiễu

Suy ra đạo hàm cấp 2 của Gauss

Đạo hàm cấp 2 của hàm 2 chiều Gauss còn được gọi là Laplace của Gauss và viết tắt là LoG Thuật toán Marr-Hildreth gồm các bước sau đây

- Dùng mặt nạ Gauss để làm trơn ảnh

- Tính Laplace của ảnh ở bước 1

- tìm điểm cắt 0 của ảnh đạo hàm cấp 2, điểm cắt 0 là điểm ảnh ở bước 2 mà trước đó có giá trị dương và sau đó có giá trị âm và ngược lại

Trang 38

Ta thường cho = 4 và kích thước của bộ lọc là n = 6

Câu 23 Xây dựng thuật toán phát hiện cạnh Canny

Đáp án:

Cho đến nay phương pháp phát hiện cạnh của Canny là tốt nhất

Phương pháp của Canny dựa trên 3 mục tiêu sau đây:

Tóm lại, thuật toán phát hiện Canny gồm 4 bước:

 Bước 1: dùng mặt nạ Gauss làm trơn ảnh

Trang 39

 Bước 2: tính ảnh đạo hàm cấp 1 và ảnh góc pha: M(x,y) và α(x,y)

 Bước 3: xóa những đỉnh nhỏ

 Bước 4: dùng ngưỡng kép và phân tích liên thông để nối các cạnh bị đứt

Ví dụ: ngưỡng thấp được chọn TL=0.04, ngưỡng cao được khoảng 2.5 TL

Câu 24 Xây dựng thuật toán liên kết cạnh bằng xử lý cục bộ

Đáp án:

Dùng mặt nạ đạo hàm cấp một như Sobel hay Prewitt để phát hiện cạnh của ảnh đã làm trơn

Bước 1: Tính M(x,y) và α(x,y)

Bước 2: Tạo ảnh nhị phân g, theo công thức sau đây

TM là ngưỡng, A là góc của cạnh cần quan tâm, TA là phạm vi góc

Bước 3: Quét từng dòng qua ảnh và lấp những lổ trống, nếu chiều dài của lổ trống đó không vượt quá K

Bước 4: Phát hiện lổ trống theo hướng khác bằng cách là quay ảnh một góc , lặp lại bước 3

và quay ngược trở lại

Trang 40

Viết phương trình đường thẳng đi qua hai điểm A và B, tiếp theo ta tính khoảng cách từ các điểm còn lại đến đường thẳng đó và chọn khoảng cách lớn nhất, trong trường hợp này là điểm

C Viết phương trình đường thẳng qua AC và BC Tính khoảng cách còn lại từ các đỉnh và chọn khoảng cách lớn nhất D… Nối A B C D E F.Nếu khoảng cách từ các điểm đến đường thẳng nhỏ hơn ngưỡng T thì ta dừng và không chia tiếp Như vậy ta đã xấp xỉ 1 đường đứt nét thành đường gấp khúc

Hai vấn đề khó nhất là:

Thứ nhất làm sao ta biết được hai điểm ban đầu, thứ hai là sao biết được thứ tự của đỉnh Ta có thể chọn điểm bên phải nhất và bên trái nhất làm điểm ban đầu Cách khác là ta tìm những điểm xa nhất của đường cong Còn bây giờ thuật toán phải cho trước hai điểm ban đầu và cho trước các đỉnh theo thứ tự

Thuật toán như sau:

Bước 1: cho trước P là tập hợp các đỉnh có thứ tự, cho trước hai đỉnh bắt đầu A và B Bước 2: khai bao ngưỡng T, ví dụ cho T=5, khai báo 2 stacks là open và closed

Bước 3: đặt điểm A vào stacks open và điểm B vào stacks closed Đối với đường cong khép kín thì bước 3 có thay đổi một chút, điểm A được đưa vào stacks open và điểm B được đưa vào stacks open và stacks closed

Trang 41

Bước 4: viết phương trình đường thẳng của hai đỉnh sau cùng trong stacks closed và stacks open

Bước 5: Tính khoảng cách từ các đỉnh giữa hai đỉnh ở bước 4 với đường thẳng ở bước 4 và chọn đỉnh có khoảng cách lớn nhất

Bước 6: Nếu khoảng cách lớn nhất lớn hơn ngưỡng thì đưa đỉnh đó vào stack opend và quay trở lại bước 4

Bước 7: Ngược lại, lấy đỉnh trong open và đưa vào closed

Bước 8: Nếu open chưa rỗng thì đến bước 4

Bước 9: đến khi nào open rỗng thì thôi, các đỉnh trong stacks closed là các đỉnh cần tìm

Câu 26 Xây dựng và cài đặt thuật toán biến đổi Hough

Đáp án:

Mục đích của biến đổi Hough là để phát hiện ra đường thẳng và đường tròn, hoặc đường bất kì Thông thường nhất là dùng biến đổi Hough để phát hiện

đường thẳng

Cho điểm xi, yi ở trong mặt phẳng x, y

Phương trình đường thẳng y=ax+b

Nếu đường thẳng đi qua điểm (xi,yi) thì nó sẽ là yi=axI +b Khi

cho a, b thay đổi thì có rất nhiều đường thẳng đi qua (xi,yi)

Ta có thêm một điểm (xj,yj) nữa thì cũng có vô số đường thẳng

đi qua (xj,yj)

Như vậy sẽ có một đường thẳng đi qua hai điểm (xi,yi) và (xj,yj)

Và đường thẳng đó sẽ có a, b giống nhau

Yi= axi+b

Yj= axj+b

Trang 42

Dùng mặt phẳng a, b không biết được kích thước ảnh là bao

nhiêu vì cho ảnh chạy từ -∞, ∞ và b: -∞, ∞

Để khắc phục a, b có thể ra tới ∞, thì ta chuyển phương trình

đường thẳng qua tọa độ cực:

Do các điểm ảnh có tọa độ x dương, y dương nên chạy từ

Hough = (BYTE **)Alloc2D(RHO,THETA,sizeof(BYTE));

for (theta = -THETA/2; theta<=THETA/2; theta++)

for (rho=-RHO/2; rho<=RHO/2; rho++)

Ngày đăng: 06/03/2014, 00:21

HÌNH ẢNH LIÊN QUAN

Đồ thị của bộ lọc lowpass Butterworth - Đề thi Xử Lý Ảnh doc
th ị của bộ lọc lowpass Butterworth (Trang 48)
Đồ thị của bộ lọc Gauss: - Đề thi Xử Lý Ảnh doc
th ị của bộ lọc Gauss: (Trang 51)
Đồ thị của bộ lọc highpass l{ tưởng - Đề thi Xử Lý Ảnh doc
th ị của bộ lọc highpass l{ tưởng (Trang 53)

TỪ KHÓA LIÊN QUAN

w