Tải bản đầy đủ
Sắc độ (C) cũng giống như các thành phần được trình bày trong CIE, nó mô tả độ tinh khiết của màu. Khi C bằng 0 thì là không màu.

Sắc độ (C) cũng giống như các thành phần được trình bày trong CIE, nó mô tả độ tinh khiết của màu. Khi C bằng 0 thì là không màu.

Tải bản đầy đủ

Ở nội dung này sẽ tìm hiểu một vài kỹ thuật phân đoạn ảnh đại diện cùng với
thuật toán của chúng. Mỗi thuật toán đều có những ưu nhược điểm, việc lựa chọn
thuật toán phụ thuộc vào tiêu chuẩn mà chúng ta muốn tối ưu.
2.3.1 Phương pháp gom nhóm theo lý thuyết đồ thị
Phương pháp này phát hiện ra biên giữa hai vùng của ảnh bằng cách so sánh
sự khác nhau giữa nội vùng (inter-component) với sự khác nhau với các vùng khác.
[12] Thuật toán phân đoạn dựa vào đồ thị tuân theo chiến lược tham lam, có thời
gian chạy gần như tuyến tính, nhưng vẫn đảm bảo được việc phân đoạn có hiệu
quả.
Ở đây sử dụng thuật toán ”Normalized Cut” là một thuật toán sử dụng
phương pháp gom nhóm theo lí thuyết đồ thị. Mỗi ảnh gốc sẽ đựơc thể hiện một
mối quan hệ tương ứng bằng việc chuyển tập ảnh gốc ban đầu thành một đồ thị vô
hướng có trọng số G=(E,V) mà mỗi nút (node) trong G là một điểm trong không
gian đặc trưng và mỗi cạnh được hình thành giữa 2 node, trọng lượng trên mỗi cạnh
w(i,j) là hàm đo sự tương đồng giữa 2 node i, j.
Khi gom nhóm, ta cố gắng phân chia tập đỉnh thành những tập rời nhau V 1,V2,
…,Vm với độ đo sự tương tự của những đỉnh trong V i thì cao còn khi băng qua
những tập Vj khác thì thấp.
Để phân hoạch một đồ thị được tốt, ta cần quan tâm đến những tiêu chí sau:
Tiêu chuẩn chính xác nào cho một sự phân hoạch tốt ; bằng cách nào một phân
hoạch như thế có thể được tính toán một cách hiệu quả.
Việc gom nhóm được xem như sự phân chia đồ thị:
[12] Một đồ thị G=(V,E) được phân chia thành 2 tập rời rạc A, B với
A ∪ B = V , A ∩ B = 0/ bằng việc xóa bỏ những cạnh kết nối 2 phần. Độ không tương

đồng giữa 2 phần này có thể được tính như tổng trọng lượng của những cạnh được
xóa bỏ. Trong ngôn ngữ lí thuyết đồ thị, nó gọi là cut :
cut ( A, B ) =

∑ w(u, v)

u∈A, v∈B

(2-1)

[12] Sự phân đôi đồ thị tối ưu là việc làm cực tiểu giá trị cut này. Người ta đã
đưa một phương pháp gom nhóm dựa trên tiêu chuẩn cut cực tiểu này. Đặc biệt ta
muốn phân hoạch 1 đồ thị thành k đồ thị con mà giá trị cut cực đại qua những tập

60

con được cực tiểu. Bài toán này có thể được giải quyết bằng việc tìm những giá trị
cut cực tiểu. Tiêu chuẩn tối ưu toàn cục này có thể được sử dụng để tạo ra sự phân
đoạn tốt trên các ảnh.
Tuy nhiên tiêu chuẩn cut cực tiểu thiên vị
trong việc cắt những tập điểm (nhỏ) riêng biệt
trong đồ thị vì cut định nghĩa trong (2-1) tăng với
số cạnh băng qua 2 phần được phân chia. Hình
2.4 minh họa trường hợp như thế.
Giả sử trọng lượng các cạnh tỉ lệ nghịch với

Hình 2.4 Minh họa
góm nhóm theo lý thuyết đồ thị

khoảng cách giữa 2 node, ta thấy cut phân chia

node n1 hoặc node n2 sẽ có giá trị rất nhỏ. Thật ra bất kì cut phân chia những node
riêng rẽ bên nửa phải sẽ có giá trị cut nhỏ hơn cut phân chia các node thành nửa trái
và nửa phải.
Để tránh sự thiên vị đối với việc phân chia những tập điểm nhỏ này, ta đưa ra
một độ đo của sự không liên kết giữa 2 nhóm. Thay vì xem giá trị của tổng trọng
lượng các cạnh kết nối 2 phân hoạch, độ đo của chúng ta sẽ tính giá trị cut như một
tỉ số của toàn bộ các cạnh kết nối đến tất cả các node của đồ thị. [12] Ta gọi độ đo
sự không liên kết này là normalized cut.
Ncut ( A, B ) =

cut ( A, B )
cut ( A, B )
+
assoc( A, V ) assoc( B, V )

(2-2)

w(u , t ) là tổng trọng lượng từ những node trong A đến tất cả
với assoc ( A, V ) = u∈∑
A,t∈V

các node của đồ thị. Với sự định nghĩa của sự không liên kết giữa các nhóm, cut
phân chia những điểm riêng lẻ( nhỏ) sẽ không còn giá trị Ncut nhỏ, vì giá trị cut
hầu như chắc chắn sẽ là tỉ lệ phần trăm của tổng các kết nối từ tập nhỏ đó đến tất
cả các node khác. Trong trường hợp minh họa ở hình trên, chúng ta thấy rằng giá
trị cut1 qua node n1 sẽ là 100% của toàn bộ kết nối từ node đó.
Dựa trên cơ sở đó, [12] chúng ta có thể định nghĩa một độ đo cho tổng
normalized kết hợp trong nhiều nhóm đối với một phân hoạch được cho.
Nassoc ( A, B ) =

61

assoc ( A, A) assoc ( B, B )
+
assoc ( A, V ) assoc ( B,V )

(2-3)

với assoc(A,A) và assoc(B,B) là tổng trọng lượng của những cạnh kết nối những
node trong A và B tương ứng. Chúng ta thấy một lần nữa đây là một độ đo không
thiên vị, nó phản ánh một cách chặt chẽ như thế nào những node trung bình trong
nhóm được kết nối với nhau.
Một thuộc tính quan trọng khác của việc định nghĩa sự liên kết và không liên
kết của một sự phân hoạch là chúng có liên quan một cách tự nhiên theo công thức
sau [12]:
cut ( A, B )
cut ( A, B)
+
assoc ( A,V ) assoc ( B, V )
assoc ( A, V ) − assoc ( A, A) assoc ( B, V ) − assoc( B, B )
=
+
assoc ( A, V )
assoc ( B, V )

Ncut ( A, B ) =

(2-4)

 assoc ( A, A) assoc ( B, B ) 

= 2 − 
+
assoc
(
A
,
V
)
assoc
(
B
,
V
)


= 2 − Nassoc ( A, B ).

Vì vậy mà hai tiêu chuẩn phân hoạch mà chúng ta mong muốn trong giải thuật
gom nhóm là: Cực tiểu hóa sự không liên kết giữa các nhóm và việc cực đại hóa sự
liên kết trong nội bộ của các nhóm là đồng nhất và có thể được thỏa mãn đồng
thời. Trong giải thuật phân đoạn ảnh ta sẽ sử dụng normalized cut này như tiêu
chuẩn phân hoạch.
Nhưng việc cực tiểu normalized cut chính xác là bài toán NP đủ.
Ta có thể cực tiểu Ncut(A,B) bằng:

y T (D − W ) y
min Ncut ( A, B ) = min
A, B
y
y T Dy

Phương trình này có thể được giải quyết bằng việc giải bài toán giá trị riêng
tổng quát sau:

(D-W)y= λ Dy

Vector riêng y nhỏ nhất thứ 2 là lời giải của bài toán normalized cut
Giải thuật:
Cho một ảnh đầu vao I . xây dựng đồ thị trọng số G=(V,E) với mỗi node của
đồ thị là một pixel của ảnh. Đặt N là số node của đồ thị N=|V|. Các bước thực hiện
như sau:
Bước 1: Xây dựng ma trận tương đồng đối xứng W kích thước N x N và
W(i,j)=wij, với:

62

wij = exp

− F (i ) − F ( j )

σ

2
I

2
2


− X (i ) − X ( j )

* exp
σ X2

0


2
2

nếu

X (i ) − X ( j )

2


khác

Trong đó X(i) là vị trí không gian của node i nghĩa là tọa độ trong ảnh gốc I và
F(i) là vector đặc trưng đựơc định nghĩa như sau:
+ F(i)=1 đối với tập điểm phân đoạn;
+ F(i)=I(i) giá trị cường độ cho những ảnh xám;
+ F(i)=[ v,u.s.sin(h),v.s.cos(h)](i) với h,s,v là giá trị HSV đối với phân đoạn
ảnh màu;
+ F(i) − [| I * f1 |,..., | I * f n |](i) ;
Đặt d i = ∑ j wij là tổng trọng lượng từ node i đến tất cả các node khác trong
đồ thị.
Xây dựng ma trận đường chéo D kích thước N x N với các di trên đường chéo
của nó.
Bước 2: Giải bài toán giá trị riêng (D-W)y= λ Dy và lấy vector riêng ứng với
trị riêng nhỏ nhất thứ 2. Trong Matlab có hàm eigs để giải bài toán giá trị riêng.
Bước 3: Sử dụng vector riêng để phân đôi đồ thị. Trong trường hợp lí tưởng,
vector riêng sẽ chỉ lấy 2 giá trị rời rạc và dấu sẽ cho ta biết chính xác phân hoạch đồ
thị như thế nào (A={Vi|yi >0}, B= {Vi|yi<=0}).
Tuy nhiên y lấy giá trị thực do đó ta cần chọn 1 điểm cắt. Có một vài cách sau:
+ Lấy 0;
+ Lấy trung bình;
+ Tìm 1 điểm cắt mà kết quả Ncut(A,B) được cực tiểu
y T (D − W ) y
Điểm cắt mà cực tiểu giá trị Ncut cực tiểu:
y T Dy
k
với y=(1+x) – b(1- x) với b=
với k =
(1 − k )

∑d

xi > 0

∑d

i

i

i

Trong đó: x là một vector N chiều, xi=1 nếu node I trong A và xi= -1 ngược
lại nút I không trong A.

63

Để thực hiện tìm Ncut cực tiểu, ta cần thử những giá trị điểm cắt khác nhau.
Điểm cắt tối ưu gần với giá trị trung bình của những vector riêng thu được. Trong
Matlab có hàm fminsearch phù hợp cho mục đích này.
Bước 4: Lặp lại việc chia đôi một cách đệ quy. Dừng nếu giá trị Ncut lớn hơn
giá trị ngưỡng đã được chỉ trước (giá trị Ncut lớn có nghĩa là không có sự phân
hoạch điểm rõ ràng). Hơn nữa, dừng khi tổng số node trong phân hoạch (aera) nhỏ
hơn một giá trị ngưỡng đựơc chỉ trước.
2.3.2. Phương pháp gom nhóm theo thuật toán K-Mean
Phương pháp K-Mean và gom nhóm theo lý thuyết đồ đều thực hiện gom
điểm ảnh thành các nhón khác nhau dựa trên việc tách phi tuyến [11].
Thuật toán gom nhóm K-mean (K-means clustering algorithm) có thể được
làm rõ hơn thông qua hàm số trung tâm kernel; bằng cách sử dụng bản đồ biến đổi
phi tuyến tích hợp trong không gian vào để làm nổi bật lên vùng đặc trưng [11].
Ta gọi trọng số của mỗi điểm ảnh a là ω (a ) , và các nhóm là π j , một vùng các
k
điểm ảnh là {π j } j =1 . Sử dụng hàm biến đổi phi tuyến φ , hàm mục tiêu của thuật toán

K-mean như sau [11]:

(

)

D {π j } j =1 = ∑ ∑ ω (a ) φ (a ) − m j
k

k

2

(2-5)

j =1 a∈π j

∑ π ω (b)φ (b)
∑ π ω (b )
b∈

Trong đó m j =

j

b∈

j

Lưu ý rằng mj là nhóm đại diện tốt nhất khi: m j =

k

∑π ω (a) φ (a) − z

a∈

2

j

Khoảng cách Ơclit từ φ (a) đến tâm mj tính bằng:

∑ π ω (b)φ (b) =
φ (a ) −
∑ π ω (b)
2∑ π ω (b)φ ( a).φ (b) ∑
φ (a ).φ (a ) −
+
∑ π ω (b)
2

b∈

j

b∈

j

b∈

j

b∈

j

b ,c∈π j

ω (b)ω (c )φ (b).φ (c )

(2-6)

(∑ b∈π j ω (b)) 2

φ (a ).φ (b) được tính toán bằng cách sử dụng hàm mục tiêu k trong bảng hàm

mục tiêu dưới đây:
Đa thức
Gauxơ

64

k(a,b) = (a.b + c)d
k(a,b) = exp(-||a-b||2 /2 σ 2 )

xichma
k(a,b) = tanh(c(a.b) + θ )
Thuật toán K-mean được mô tả như sau:
K-MEAN(K, k, w, C1,.., Ck)
Input:
K: Ma trận các điểm ảnh của ảnh đầu vào; k: Số nhóm cần phân đoạn;
w: Trọng số của mỗi điểm ảnh.
Output:
C1,..., Ck : Các vùng ảnh đã được phân đoạn.
Các bước thực hiện:
1. Khởi tạo k vùng cần phân đoạn: C1( 0 ) ,..., C k0 đây là các ma trận mà các
phần tử bằng 0 và tương ứng với các vùng ảnh.
2. Đặt t = 0.
3. Duyệt từng điểm ảnh a và tìm ra nhóm của nó.
j * (a ) = agr min j φ (a ) − m j

2

, sử dụng công thức (2-6)

4. Tính toán và cập nhật lại tâm các nhóm

{

C tj+1 = a : j * ( a) = j

}

5. Nếu không hội tụ, đặt t = t + 1 và chuyển về bước 3; nếu hội tụ thì kết
thúc.
Thời gian tính toán một điểm ảnh là O(n) và O(n2) với mỗi vòng lặp.
Còn giá trị của biểu thức



b ,c∈π j

ω (b)ω (c)φ (b).φ (c)

(∑ b∈π j ω (b)) 2

thì không thay đổi đối với

mỗi nhóm phân đoạn j.
Như vậy, độ phức tạp của thuật toán sau mỗi vòng lặp là O(n2).
Lúc khỏi đầu ta cần phải tính ma trận K, thường thì độ phức tạp là O(n 2m),
trong đó m là kích thước của ảnh ban đầu. Như vậy, nếu tổng số vòng lặp là T thì độ
phức tạp của thuật toán K-mean là O(n2(T+m)).
Để thấy rõ hơn thuật toán K-mean, ta đưa ra ví dụ qua hình 2.5 để mô tả hai
bước lắp của thuật toán:
Hình 2.5a là trạng thái ban đầu, mỗi thành phần dữ liệu chính là một điểm ảnh
và chúng thể hiện qua các chấm nhỏ, 4 tâm ban đầu là các chấm to. Hình 2.5b cho
ta thấy các điểm ảnh ban đầu đã dần tìm được tâm gần nhất của chúng, các tâm này

65

đang được tính toán loại. Khoảng cách gần ở đây được tính theo khoảng cách hình
học giữa mỗi điểm và tâm. Các khung hình bao chỉ phạm vi mỗi nhóm. Hình 2.5c
cho thấy việc phân bố các điểm ảnh thuộc phần giữa của hình 2.5b để từ đó tính
toán lại tâm. Hình 2.5d là kết quả cuối cùng sau khi đã tính toán lại tâm và phân
nhóm xong.

a) Trạng thái ban đầu có 4 tâm

c) Phân nhóm lại để tính toán lại tâm

b) Phân nhóm như ban đầu và tính toán lại tâm

d) Đã nhóm và tính toán tâm xong

Hình 2.5 Mô tả hai bước lặp của thuật toán K-mean
2.3.3. Phương pháp mở rộng vùng
Ý tưởng của phương pháp này là xét ảnh từ các miền nhỏ nhất rồi nối chúng
lại nếu thỏa mãn tiêu chuẩn để được miền đồng nhất lớn hơn. Tiếp tục các miền thu
được cho đến khi không thể nối thêm được nữa. Số miền còn lại cho ta kết quả phân
đoạn. Như vậy miền nhỏ nhất của bước xuất phát là điểm ảnh.
Phương pháp này hoàn toàn ngược với phương pháp tách cây tứ phân. Điều
quan trọng ở đây là nguyên lý nối 2 vùng. Việc nối 2 vùng được thực hiện theo
nguyên tắc sau [2]:
+ Hai vùng phải đáp ứng tiêu chuẩn, cùng màu hay cùng mức xám.
+ Hai vùng phải kế cận nhau.
Khái niệm kế cận [1,2]: trong xử lý ảnh, người ta dùng khái niệm liên thông để
xác định tính chất kế cận. Có hai khái niệm về liên thông là 4 liên thông và 8 liên

66

thông. Với 4 liên thông một điểm ảnh I(x,y) sẽ có 4 kế cận theo 2 hướng x và y;
trong khi đó với 8 liên thông, điểm I(x,y) sẽ có 4 liên thông theo 2 hướng x, y và 4
liên thống khác theo hướng chéo 450

a) 4 liên thông

b) 8 liên thông

Dựa theo nguyên lý của phương pháp nối, ta có 2 thuật toán:
+ Thuật toán tô màu Blob Coloring: sử dụng khái niệm 4 liên thông, dùng một
của sổ di chuyển trên ảnh để so sánh với tiêu chuẩn nối.
+ Thuật toán đệ quy cục bộ: sử dụng phương pháp tìm kiếm trong cây để làm
tăng kích thước của vùng.
a. Xác định điểm ảnh mở rộng
Thực hiện việc tìm ra các điểm ảnh xuất phát để từ đó các vùng được mở rộng
bắt đầu từ những điểm này. Trong phương pháp này có sử dụng không gian màu
L*a*b*. [14] Các thành phần trong L*a*b* của điểm xuất phát là rất quan trọng
trong mỗi bước lặp khi phân đoạn. Đầu tiên, các màu của ảnh được đánh chỉ số, sau
đó đếm số lượng các điểm ảnh trong từng màu đã được đánh chỉ số.
Để rõ hơn, ta mô tả bằng giải thuật như sau:
pixel: record of
L:lightness
a:a_component
b:b_component
end;
Image: array [1..width,1..height] of pixel;
PixelData: record of
color: pixel
counter: number of pixels
end;
IndexTable: Array[1..MaxIndex] of PixelData
begin
for x:=1 to image_width do
for y:=1 to image_height do
if image_pixel[x,y] not included into segment then
begin

67

ActualIndex:=1; z:=1; IndexedColor:=false;
repeat
if IndexTable[z].PixelData.color=image[x,y] then
begin //Màu đã được đánh chỉ số
inc(IndexTable[z].PixelData.counter);
IndexedColor:=true;
end
increment(z);
until (z>ActualIndex) or (indexedcolor=true);
if indexedcolor=false then //Màu chưa được đánh chỉ số
begin
Inc( IndexTable[ActualIndex].PixelData.counter);
IndexTable[ActualIndex].PixelData.color:=image[x,y];
Inc(ActualIndex);
end;
end;
Tiếp theo, thuật toán tìm trong bảng chỉ số (IndexTable) mà tại vị trí
MaxIndex có số điểm ảnh nhiều nhất. (IndexTable[MaxIndex].PixelData.counter
value). Màu tai vị trí MaxIndex; (IndexTable[ActualIndex].PixelData.color) chính
là màu của điểm ảnh cần mở rộng.
b. Thuật toán mở rộng vùng
Trên cơ sở các đã tìm được các điểm ảnh ban đầu, ở nội dung này sẽ đưa ra
thuật toán để mở rộng vùng dựa trên các điểm đó. Tiêu chí để phân đoạn ở đây là
dựa vào 4 liên thông, dựa trên khoảng cách của điểm ảnh khởi đầu tới 4 điểm ảnh
lân cận của nó trong không gian L*a*b*. Xuất phát từ điểm ảnh khởi đầu thuật toán
đi tìm các điểm ảnh có cùng màu với điểm khởi đầu và bổ sung vào đoạn đang xét.
Quá trình trên mô tả bằng đoạn giải thuật sau:
begin
for x:=1 to width do
for y:=1 to height do
if Image[x,y]=seed_pixel_color then
begin
set new segment number p; //Khởi tạo đoạn mới
GrowUpSegment(x,y);
end;
end;
Thủ tục GrowUpSegment(x,y) xác định tiêu chí mở rộng vùng. Nếu tiêu chí
mở rộng vùng K() thỏa mãn với điểm ảnh hiện tại và sau đó kiểm tra đến 4 điểm lân
cận của nó. Thủ tục mô tả như sau:

68

GrowUpSegment(x,y);
begin
if Pixel(x,y) not in any segment and
K(Image(x,y),seed_pixel_color) then
begin
Include Pixel(x,y) to segment p;
GrowUpSegment(x-1,y);
GrowUpSegment(x+1,y);
GrowUpSegment(x,y-1);
GrowUpSegment(x,y+1);
End
End
 True : ab p − ab p < K 
1
2
K s ( p1 , p 2 ) = 

False
:
ab

ab

p1
p2 ≥ K 

ab p1 − ab p2 là khoảng cách theo Oclit giữa hai điểm ảnh p1 và p2 trong không

gian L*a*b*; K là hằng số.
Các tham số L*a*b* của đoạn được tính bằng giá trị trung bình của màu tương
ứng và giá trị cường độ sáng của tất cả các điểm ảnh trong một đoạn.
c. Ứng dụng vào khoanh vùng chữ trong ảnh
[14] Khoanh vùng chữ dựa trên việc so sánh các đoạn ký tự trong ảnh phân
đoạn bằng cách sử dụng một vài quy tắc. Các quy tắc này sử dụng các tham số hình
học và màu sắc của các đoạn. Thuật toán tạo ra một tập các đoạn thể hiện dưới đây:
1. Các đoạn này có màu tương tự nhau:
LS k − LSl + a Sk − a Sl + bS k − bSl < c4

Trong đó L, aS , aS , bS , bS là các thành phần màu của các đoạn đã được kiểm
k

l

k

l

tra; c4 là hằng số.
2. Các đoạn này có chiều cao tương tự nhau
c1 >

H Sk
H Sl

> c2

Trong đó H S , H S là chiều cao của các đoạn đã điểm tra;
k

69

l

c1 , c2 là hằng số.

3. Các đoạn tương ứng với các chữ trên một dòng thẳng đứng.
YSk − YSl
Hi

< c3

Trong đó YS , YS là khoảng cách điểm ảnh thấp nhất trong đoạn đến đáy của
k

l

ảnh; H i là chiều cao ảnh; c3 là hằng số.
4. Khe hở giữ các đoạn trong tập các đoạn văn bản tạo ra là không rộng.
X Sk − X Sl
Sh

< c4

Trong đó X S , X S khoảng cách đoạn bên trái nhất đến đoạn bên phải nhất trong
k

l

các đoạn; S h tổng số các đoạn; c4 là hằng số.
Dưới đây là các quy tắc sử dụng trong thuật toán để tạo ra tập các đoạn:
for S n := S 0 to Smax
N n := { S n }

p:=n+ 1
repeat
if

∃K

{ Sz }

k

(S z , S p )

then

N n := N n ∪ { S p }

p=p+1
until p=max
Trong đó max là số đoạn tối đa;
Nn là số văn bản được tạo ra; Sn là đoạn thứ n.
Thuật toán khoanh vùng văn bản có thể xem như mỗi đoạn như là một tập mẫu
và so sánh nó với các đoạn đoạn còn lại. Kk là tiêu chí để xác định một đoạn.

*. Làm nổi vùng chữ
Sau khi thục hiện phân đoạn và khoanh vùng văn bản xong, các vùng ảnh
được tạo ra, các vùng là chữ đã được khoanh vùng dạng hình chữ nhật. Lúc này, ta
áp dụng thuật toán làm nổi chữ trong các vùng đã khoanh.
create_set_bounding_rectangle;
letter_color:= average_color_of_pixels_creating_set_elements;

70