Tải bản đầy đủ (.docx) (12 trang)

thuật toán sử dụng mặt nạ để làm rõ đường biên trong ảnh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (227.19 KB, 12 trang )


MỤC LỤC

ĐỒ ÁN MÔN HỌC XỬ LÍ ẢNH
Đề bài(9):Tìm hiểu các thuật toán sử dụng mặt nạ để làm rõ đường biên trong
ảnh.
I.Phát biểu bài toán
Biên là một vấn đề quan trọng trong trích chọn đặc điểm nhằm tiến tới hiểu
ảnh. Cho đến nay chưa có định nghĩa chính xác về biên, trong mỗi ứng dụng người
ta đưa ra các độ đo khác nhau về biên, một trong các độ đo đó là độ đo về sự thay
đổi đột ngột về cấp xám.
Một điểm ảnh có thể coi là điểm biên nếu ở đó có sự thay đổi đột ngột về mức
xám.Tập hợp các điểm biên tạo thành biên hay đường bao của ảnh.
Ví dụ: Đối với ảnh đen trắng, một điểm được gọi là điểm biên nếu nó là điểm
đen có ít nhất một điểm trắng bên cạnh.
1
Định nghĩa toán học của biên ở trên là cơ sở cho các kỹ thuật phát hiện biên.
Điều quan trọng là sự biến thiên giữa các điểm ảnh là nhỏ, trong khi đó biến thiên
độ sáng của điểm biên (khi qua biên) lại khá lớn. Xuất phát từ cơ sở này người ta
thường sử dụng 2 phương pháp phát hiện biên sau:
• Phương pháp phát hiện biên trực tiếp: phương pháp này nhằm làm nổi
đường biên dựa vào biến thiên về giá trị độ sáng của điểm ảnh. Kỹ thuật chủ
yếu là dùng kỹ thuật đạo hàm. Nếu lấy đạo hàm bậc nhất của ảnh ta có
phương pháp Gradient, nếu lấy đạo hàm bậc 2 ta có kỹ thuật Laplace.
• Phương pháp gián tiếp: Nếu bằng cách nào đấy ta phân ảnh thành các vùng
thì đường phân ranh giữa các vùng đó chính là biên.
Trong phạm vi bài viết chỉ tìm hiểu phương pháp thứ nhất:phương pháp phát
hiện biên trực tiếp theo 2 phương pháp Gradient và Laplace.
II.Hướng giải quyết bài toán
Từ định nghĩa về điểm biên và biên đã nêu ở trên người ta thường sử dụng hai
phương pháp: phát hiện biên trực tiếp(sẽ được trình bày trong bài viết này) và


phương pháp phát hiện biên gián tiếp.Trong phương pháp phát hiện biên trực tiếp
hai kỹ thuật được sử dụng là Gradient và Laplace.
1.Phương pháp Gradient
Cơ sở toán học:Gradient là phương pháp dò biên cục bộ dựa vào cực đại của đạo
hàm. Gradient là một Vector có các thành phần biểu thị tốc độ thay đổi giá trị điểm
ảnh theo hai hướng x và y.Các thành phần của Gradient được tính :
dy
yxfdyyxf
fy
y
yxf
dx
yxfydxxf
fx
x
yxf
),(),(),(
),(),(),(
−+
≈=


−+
≈=


2
trong đó dx và dy là khoảng cách (tính bằng số điểm ảnh )theo 2 hướng x và y
Thường dx=dy=1.


( ) ( )
( ) ( )







−+≈


−+≈


yxfyxf
y
f
yxfyxf
x
f
,1,
,,1
Biên độ của Gradient được tính tại điểm (i,j) kí hiệu là g(i,j)được tính theo công
thức:
),(),(),(
22
0
jigjigAjig
yx

+==
.
Hướng của đạo hàm được tính:
)
),(
),(
arctan(),(
jig
jig
ji
y
x
r
=
ϕ

Trong kỹ thuật Gradient người ta chia thành 2 kỹ thuật:Kỹ thuật Gradient dùng
toán tử Gradient đạo hàm theo 2 hướng và Kỹ thuật Gradient lấy đạo hàm theo 8
hướng chính:Bắc,Nam,Đông,Tây,Đông Bắc,Tây Bắc,Đông Nam,Tây Nam.
1.1Kỹ thuật Gradient
Kỹ thuật này dùng một cặp mặt nạ H1 và H2 trực giao(theo hai hướng vuông
góc).Các toán tử đạo hàm được dùng khá nhiều.Sau đây là một số toán tử tiêu biểu
1.1.1Toán tử Robert:dùng 2 mặt nạ.

1.1.2Toán tử Sobel:dùng 2 mặt nạ:
-1 0 1
H
x
= -2 0 2
3

-1 0 1
-1 -2 -1
H
y
= 0 0 0
1 2 1
1.1.3Toán tử Prewitt sử dụng 2 mặt nạ
-1 0 1
H
x
= -1 0 1
-1 0 1
-1 -1 -1
H
y
= 0 0 0
1 1 1
Nhận xét:
Các toán tử Gradient làm việc khá tốt khi độ sáng thay đổi khá rõ nét khi qua
biên .Khi sự thay đổi độ sáng chậm miền chuyển tiếp trải rộng thì phương pháp
Gradient tỏ ra kém hiệu quả.
Trong 3 toán tử được thực hiện ở trên, toán tử Prewitt đơn giản hơn Sobel
nhưng lại nhạy cảm với nhiễu hơn, một vấn đề quan trong khi giải quyết với đạo
hàm. Toán tử Robert đơn giản nhất nhưng không tốt hơn 2 toán tử trên vì nó nhạy
cảm với nhiễu nhất.
Mặt khác, toán tử Robert (mask cỡ 2*2) rất khó được thi hành vì không có trung
tâm rõ ràng.
Còn đối với Sobel và Prewitt thì sử dụng mask 3*3.
Prewitt: Gx = z7 + z8 + z9) - (z1+ z2 + z3)
Gy = (z3 + z6 + z9) – (z1 + z4 + z7)

Sobel: Gx = (z7 + 2z8 + z9) - (z1+ 2z2 + z3)
Gy = (z3 + 2z6 + z9) – (z1 + 2z4 + z7)
4
Hệ số 2 được dùng để đạt được vài sự làm phẳng bằng cách đưa ra tầm quan
trọng hơn tới điểm trung tâm. Thuật toán Prewitt và Sobel là trong số cái tốt nhất
được sử dụng trong thực hành cho việc tính toán gradient số. Masks Prewitt đơn
giản hơn để thi hành hơn mask Sobel, nhưng Sobel lại có đặc điểm chặn nhiễu
mạnh hơn một tí.
Thêm nữa, khi mask Prewitt và Sobel được dùng để tính G
x
và G
y
. Những mask
này đưa ra kết quả đẳng hướng chỉ cho cạnh ngang và dọc vì thế ngay cả khi chúng
ta sử dụng công thức
),(),(),(
22
0
jigjigAjig
yx
+==
để tính gradient,
kết quả chỉ đẳng hướng chỉ cho cạnh trong những hướng đó.
Một tiếp cận được sử dụng thường xuyên để xấp xỉ gradient bởi giá trị tuyệt đối:
G(i,j) = |G
x
| + |G
y
|
Nhưng trong trường hợp này, cả hai công thức trên cùng cho cùng kết quả.

1.2 Toán tử La bàn: sử dụng 8 mặt nạ theo 8 hướng 0
0
, 45
0
, 90
0
, 135
0
, 180
0
, 225
0
,
270
0
, 315
0.
Có nhiều toán tử la bàn khác nhau ở đây chỉ xét toán tử tiêu biểu Kirsh sử
dụng 8 mặt nạ:
5 5 -3 5 5 5
H
1
= 5 0 -3 H
2
= -3 0 -3
-3 -3 -3 -3 -3 -3
-3 5 5 -3 -3 5
H
3
= -3 0 5 H

4
= -3 0 5
-3 -3 -3 -3 -3 5
5

Biên độ của Gradient được tính theo phương pháp này là:
G(i,j)=Max( |g(i,j)| ,i=1,2,3…8).
2.Phương pháp Laplace
Khi mức xám thay đổi chậm,miền chuyển tiếp trải rộng thì phương pháp
Gradient tỏ ra không hiệu quả .khi đó phương pháp Laplace sử dụng đạo hàm bậc
hai đạt hiệu quả cao hơn.
Toán tử Laplace được định nghĩa:
2
2
2
2
2
y
f
x
f
f


+


=∇

( )

),(),1(
2
2
yxfyxf
xx
f
xx
f
−+













=



[ ] [ ]
),1(),(2),1(
),1(),(),(),1(
yxfyxfyxf

yxfyxfyxfyxf
−+−+≈
−−−−+≈
Tương tự:

( )
),()1,(
2
2
yxfyxf
yy
f
yy
f
−+
















=


6
[ ] [ ]
)1,(),(2)1,(
)1,(),(),()1,(
−+−+≈
−−−−+≈
yxfyxfyxf
yxfyxfyxfyxf
Từ đó toán tử Laplace được tính:

2
f= f(x+1,y) + f(x,y+1) - 4f(x,y) + f(x-1,y) + f(x,y-1)
=>Mặt nạ :

010
141
010
H











−=
Trong thực tế có nhiều mặt nạ được sử dụng.Sau đây là một số mặt nạ tiêu biểu:











−−

=










−−−
−−
−−−

=











−−

=
121
242
121
H
111
181
111
H
010
141
010
H
321
III.Thuật toán
1.Gradient

1.1:Gradient sử dụng toán tử Sobel
int[,] M;Bitmap bmp;
int h = bmp.Height;
7
int w = bmp.Width;
int[,] result = new int[h, w];
int Gx, Gy;
double alpha;
for (int i = 1; i < h - 1; i++)
{
for (int j = 1; j < w - 1; j++)
{
//huong x
Gx = M[i - 1, j + 1] + 2 * M[i, j + 1] + M[i + 1, j + 1];
Gx -= M[i - 1, j - 1] + 2 * M[i, j - 1] + M[i + 1, j -1];
//huong y
Gy = M[i + 1, j - 1] + 2 * M[i + 1, j] + M[i + 1, j + 1];
Gy -= M[i - 1, j - 1] + 2 * M[i - 1, j] + M[i - 1, j +1];
//tinh gia tri Gradient
alpha = Math.Sqrt(Gx * Gx + Gy * Gy);
//alpha =(Math .Abs (Gx )+Math .Abs (Gy));
if (alpha > teta)
result[i, j] = 255;
else
result[i, j] = 0;
}
}
1.2:Gradient sử dụng toán tử Prewitt
int[,] M ;Bitmap bmp;
int h = bmp.Height;

int w = bmp.Width;
int[,] result = new int[h, w];
int Gx, Gy;
double alpha;
int threshold;

for (int i = 1; i < h - 1; i++)
{
for (int j = 1; j < w - 1; j++)
{
Gx = M[i - 1, j + 1] + M[i, j + 1] + M[i + 1, j + 1];
Gx -= M[i - 1, j - 1] + M[i, j - 1] + M[i + 1, j - 1];
Gy = M[i + 1, j - 1] + M[i + 1, j] + M[i + 1, j + 1];
Gy -= M[i - 1, j - 1] + M[i - 1, j] + M[i - 1, j + 1];
alpha = Math.Sqrt(Gx * Gx + Gy * Gy);
if (alpha > threshold)
result[i, j] = 255;
else
result[i, j] = 0;
8
}
}
1.3:Gradient sử dụng toán tử Robert
int[,] M ; Bitmap bmp;
int h = bmp.Height;
int w = bmp.Width;
int[,] result = new int[h, w];
int Gx, Gy;
double alpha;
int threshold;

threshold;
for (int i = 0; i < (h - 1); i++)
{
for (int j = 0; j < (w - 1); j++)
{
Gx = M[i + 1, j + 1] - M[i, j];
Gy = M[i, j + 1] - M[i + 1, j];
alpha = Math.Sqrt(Gx * Gx + Gy * Gy);
if (alpha > threshold)
result[i, j] = 255;
else
result[i, j] = 0;
}
}
1.4:Gradient sử dụng toán tử Kirsh
int[,] M = laydulieuanh.Apply(bmp);
int h = bmp.Height;
int w = bmp.Width;
int[,] result = new int[h, w];
int Gx, Gy;
double alpha;
int threshold;
threshold = (int)teta;
int[] A = new int[8];
int MaxA;
for (int i = 1; i < h - 1; i++)
{
for (int j = 1; j < w - 1; j++)
{
A[0] = 5 * M[i - 1, j - 1] + 5 * M[i - 1, j] + 5 * M[i - 1, j + 1];


A[0] -= 3 * M[i, j - 1] + 3 * M[i, j + 1] + 3 * M[i + 1, j - 1] +
9
3 * M[i + 1, j] + 3 * M[i + 1, j + 1];

A[1] = -3 * M[i - 1, j - 1] + 5 * M[i - 1, j] + 5 * M[i - 1, j + 1];
A[1] -= 3 * M[i, j - 1] - 5 * M[i, j + 1] + 3 * M[i + 1, j - 1] +
3 * M[i + 1, j] + 3 * M[i + 1, j + 1];
A[2] = -3 * M[i - 1, j - 1] - 3 * M[i - 1, j] + 5 * M[i - 1, j + 1];
A[2] -= 3 * M[i, j - 1] - 5 * M[i, j + 1] + 3 * M[i + 1, j - 1] +
3 * M[i + 1, j] - 5 * M[i + 1, j + 1];
A[3] = -3 * M[i - 1, j - 1] - 3 * M[i - 1, j] - 3 * M[i - 1, j + 1];
A[3] -= 3 * M[i, j - 1] - 5 * M[i, j + 1] + 3 * M[i + 1, j - 1] –
5 * M[i + 1, j] - 5 * M[i + 1, j + 1];
A[4] = -3 * M[i - 1, j - 1] - 3 * M[i - 1, j] - 3 * M[i - 1, j + 1];
A[4] -= 3 * M[i, j - 1] + 3 * M[i, j + 1] - 5 * M[i + 1, j - 1] –
5 * M[i + 1, j] - 5 * M[i + 1, j + 1];
A[5] = -3 * M[i - 1, j - 1] - 3 * M[i - 1, j] - 3 * M[i - 1, j + 1];

A[5] -= -5 * M[i, j - 1] + 3 * M[i, j + 1] - 5 * M[i + 1, j - 1] –
5 * M[i + 1, j] + 3 * M[i + 1, j + 1];
A[6] = 5 * M[i - 1, j - 1] - 3 * M[i - 1, j] - 3 * M[i - 1, j + 1];
A[6] -= -5 * M[i, j - 1] + 3 * M[i, j + 1] - 5 * M[i + 1, j - 1] +
3 * M[i + 1, j] + 3 * M[i + 1, j + 1];
A[7] = 5 * M[i - 1, j - 1] + 5 * M[i - 1, j] - 3 * M[i - 1, j + 1];
A[7] -= -5 * M[i, j - 1] + 3 * M[i, j + 1] + 3 * M[i + 1, j - 1] +
3 * M[i + 1, j] + 3 * M[i + 1, j + 1];
MaxA = Math.Abs(A[0]);
for (int jj = 0; jj < 8; jj++)
{

if (Math.Abs(A[jj]) >= MaxA)
MaxA = Math.Abs(A[jj]);
}
if (MaxA > threshold)
result[i, j] = 255;
else
result[i, j] = 0;
}
10
}
2.Kỹ thuật Laplace
int[,] M ;
Bitmap bmp;
int h = bmp.Height;
int w = bmp.Width;
int[,] result = new int[h, w];
int Gx, Gy;
double alpha;

for (int i = 1; i < h - 1; i++)
{
for (int j = 1; j < w - 1; j++)
{
//huong x
Gx = 4 * M[i, j] - M[i, j + 1] - M[i + 1, j] - M[i, j - 1] - M[i - 1, j];
//tinh gia tri Gradient
Gy = 0;
alpha = Math.Sqrt(Gx * Gx + Gy * Gy);

if (alpha > teta)

result[i, j] = 255;
else
result[i, j] = 0; } }
IV.Chương trình Demo
11
Chức năng chính:-Tách biên của ảnh theo nhiều phương pháp khác nhau.
-Lưu ảnh sau khi đã tách biên.
IV.Kết luận
Các phương pháp phát hiện biên sử dụng các mặt nạ tương đối hiệu quả,khả
năng tách biên khá tốt.Tuy nhiên tùy vào từng ảnh sáng tối khác nhau mà lựa chọn
phương pháp, mặt nạ cho hiệu quả ngoài ra giá trị ngưỡng để phân biệt vùng biên
và vùng ảnh cũng rất quan trọng.Vì vậy việc lựa chọn giá trị biên hay mặt nạ nào là
hết sức quan trọng ảnh hưởng trực tiếp đến việc phát hiện biên của ảnh.
12

×