Top Banner
V›n t›t v• Xß lý nh SL Vo Dinh Phong [email protected] Department of Computer Science University of Science 227 Nguyen Van Cu, Dist.5, Ho Chi Minh City Lưu hành nºi bº Tóm t›t nºi dung Đ” có th” sß dng đưæc tài li»u mºt cách tLt nh§t, ngưi đc nên cài đt Matlab cùng Digital Image Processing Toolbox. 1
20

Digital Image Processing with Matlab

Dec 05, 2014

Download

Education

Phong Vo

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Digital Image Processing with Matlab

Vắn tắt về Xử lý Ảnh Số

Vo Dinh [email protected]

Department of Computer ScienceUniversity of Science

227 Nguyen Van Cu, Dist.5, Ho Chi Minh City

Lưu hành nội bộ

Tóm tắt nội dung

Để có thể sử dụng được tài liệu một cách tốt nhất, người đọc nên càiđặt Matlab cùng Digital Image Processing Toolbox.

1

Page 2: Digital Image Processing with Matlab

Mục lục

1 Đọc và ghi ảnh 31.1 Dạng biểu diễn của ảnh . . . . . . . . . . . . . . . . . . . . 3

1.2 Ảnh và ma trận . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Đọc ảnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.4 Ghi ảnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.5 Ảnh và kiểu dữ liệu . . . . . . . . . . . . . . . . . . . . . . . 4

1.6 Ép kiểu cho ảnh . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Lọc ảnh 52.1 Lọc tuyến tính . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 Lọc phi tuyến . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3 Tăng cường ảnh 9

4 Hình thái ảnh 124.1 Lý thuyết tập hợp . . . . . . . . . . . . . . . . . . . . . . . 12

5 Phân đoạn ảnh 145.1 Dò điểm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155.2 Dò đường . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155.3 Dò cạnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155.4 Đặt ngưỡng . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

6 Mô tả đối tượng 176.1 Mã xích . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176.2 Xấp xỉ bằng đa giác . . . . . . . . . . . . . . . . . . . . . . 186.3 Xương . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186.4 Đo đạc biên . . . . . . . . . . . . . . . . . . . . . . . . . . . 196.5 Đo đạc vùng . . . . . . . . . . . . . . . . . . . . . . . . . . 19

7 Tham khảo 20

2

Page 3: Digital Image Processing with Matlab

1 Đọc và ghi ảnh

1.1 Dạng biểu diễn của ảnh

Ảnh được định nghĩa như một hàm hai biến số f (x, y), trong đó x và y đượcgọi là tọa độ trong không gian của một điểm trên ảnh. Cường độ sáng1 của mộtđiểm ảnh có tọa độ (x0, y0) chính là giá trị f (x0, y0), hay còn gọi là mức xámtrong trường hợp ta đang xử lý ảnh đơn sắc. Nói chung ứng dụng chủ yếu củaxử lý ảnh số trong sinh trắc học hầu hết xử lý trên ảnh đơn sắc2. Trong miềnliên tục, tọa độ x, y có thể là số thực, chúng ta chỉ quan tâm đến ảnh số (trongmiền rời rạc), tức là ảnh đã được lượng hóa và lưu trữ trên máy tính, trong đótọa độ của mỗi điểm ảnh đều là nguyên. Biểu diễn của ảnh giống như một lướicác nốt xám cách đều nhau. Tập hợp các điểm ảnh có cùng tung độ gọi là mộthàng3; tập hợp các điểm ảnh có cùng hoành độ gọi là một cột4.

Mỗi một hàm số f (x, y) được gọi là một kênh ảnh5. Ảnh có ít nhất mộtkênh và phổ biến nhất là ba kênh - ảnh màu. Ví dụ ảnh màu RGB là phối hợpcủa ba kênh (hay ba ảnh) Đỏ, Xanh lá, và Xanh dương. Các thao tác xử lý ảnhmà chúng ta cần quan tâm sẽ không động đến vấn đề màu sắc, do đó sẽ mặcđịnh ảnh chỉ có một kênh.

1.2 Ảnh và ma trận

Vì ảnh giống như một lưới với các dòng và các cột, ta tìm thấy sự tương đồngnếu biểu diễn ảnh dưới dạng một ma trận:

f (x, y) =

f (0, 0) f (0, 1) · · · f (0, N − 1)f (1, 0) f (1, 1) · · · f (1, N − 1)

......

. . ....

f (M − 1, 0) f (M − 1, 1) · · · f (M − 1, N − 1)

Có sự khác biệt về quy định chỉ số bắt đầu một ma trận, trong C (bắt đầu

từ 0) và trong Matlab (bắt đầu từ 1). Một vector dòng hay vector cột tươngứng với một dòng hay một cột của ma trận.

1.3 Đọc ảnh

Nhằm tiết kiệm lưu lượng vận chuyển và lưu trữ, ảnh thường được nén, mấtmát thông tin hoặc không, dưới các định dạng phổ biến sau:

1intensity2grayscale image, monochrome3row4column5chanel

3

Page 4: Digital Image Processing with Matlab

Định dạng Mô tả Đuôi mở rộngTIFF Tagged Image File Format .tiffJPEG Joint Photographic Expert Group .jpg, .jpegGIF Graphic Interchange Format .gifBMP Window Bitmap .bmpPNG Portable Network Graphics .pngPGM Portable Gray Map .pgm, .ppm, .pnm

Để đọc một tập tin ảnh trong Matlab, tại con trỏ lệnh gõ:

>> f=imread(’chestxray.jpg ’)

Thư mục mặc định mà Matlab tham khảo đến là thư mục hiện hành tại contrỏ lệnh. Gõ lệnh “pwd” để biết mình đang ở đâu. Sau khi đọc ảnh, hàm trả vềkết quả là một ảnh f với cấu trúc tổ chức như đã giới thiệu ở trên. Để có thêmthông tin về ảnh,

>> whos f

1.4 Ghi ảnh

Ảnh sau khi xử lý có thể được lưu cho lần dùng sau. Có thể lưu ảnh với nhiềuđịnh dạng khác nhau, như liệt kê ở bảng trên. Để có nhiều tùy chọn tham sốlưu ảnh, tìm hiểu thêm trong phần Help của Matlab.

>> imwrite(f,’filename ’);>> help imwrite

1.5 Ảnh và kiểu dữ liệu

Khi được nạp từ tập tin vào bộ nhớ, ảnh tồn tại ở dạng một mảng (một chiềuhoặc hai chiều) liên tục các phần tử trong bộ nhớ. Mỗi một điểm ảnh biểu diễncường độ sáng tại điểm đó. Với các tùy chọn lượng hóa khác nhau, giá trị điểmảnh có thể dao động trong các đoạn nguyên [0; 1], [−128; 127], [0; 255] hay nhiềuhơn thế nữa. Khoảng giá trị càng rộng cho phép ảnh có thể được biểu diễn chitiết và chính xác hơn. Ngoài ra, mỗi điểm ảnh cũng có thể được chuyển đổithành dạng số thực, phù hợp với các kỹ thuật xử lý ảnh có liên quan đến tínhtoán số thực. Các kiểu dữ liệu được hỗ trợ cho định dạng ảnh gồm có: double,uint8, uint16, uint32, int8, int16, int32, single, char, logical.

1.6 Ép kiểu cho ảnh

Để chuyển đổi giữa các kiểu dữ liệu, ta đơn giản sử dụng cú pháp sau:

B=data_class_name(A)>> B=double(A);>> D=uint8(C);

4

Page 5: Digital Image Processing with Matlab

Tuy nhiên, chuyển đổi kiểu dữ liệu không đảm bảo bảo toàn thông tin gốc,nghĩa là các con số có thể bị cắt bỏ đi (nếu nằm ngoài khoảng quy định). Xemthêm trong HELP của các phép chuyển kiểu. Phòng tránh điều này, chúng tanên co/giãn dữ liệu về khoảng hợp lệ trước khi tiến hành chuyển kiểu. Đơn giảnhơn, Matlab cung cấp một số hàm tiện ích cho phép tự động hóa việc này:

Hàm Kiểu đích Kiểu nguồnim2uint8 unit8 logical, uint8, uint16, doubleim2uint16 uint16 logical, uint8, uint16, doublemat2gray double [0, 1] doubleim2double double logical, uint8, uint16, doubleim2bw logical uint8, uint16, double

2 Lọc ảnh

Lọc ảnh là kỹ thuật xử lý quan trọng nhất đối với xử lý ảnh. Mục tiêu của lọcảnh rất đa dạng, và từ đó có nhiều biến thể, tuy nhiên chúng thống nhất tuântheo cùng một quy trình chung. Kỹ thuật lọc ảnh đề cập trong tài liệu này làlọc trên miền không gian6, ngoài ra còn có lọc trên miền tần số7. Nên nhớ rằnglọc ảnh có định nghĩa rất gần với, nếu không muốn nói là chính là, xử lý số tínhiệu. Cho một tín hiệu đầu vào hay là một xung8 (lấy ví dụ đơn giản như sóngâm một chiều thâu từ microphone), dùng một “bộ lọc”9 để “lọc” (hay biến đổi10)ra một tín hiệu mong muốn, hay còn gọi là đáp ứng11 (ví dụ tín hiệu được loạibỏ nhiễu tần số cao). Mở rộng từ một chiều âm thanh sang hai chiều ảnh, tacó phép lọc trong miền không gian. Tiến trình lọc gồm bốn bước: (1) xác địnhđiểm trung tâm; (2) thực hiện thao tác tính toán nội trong lân cận của trungtâm; (3) kết quả tính được gọi là “đáp ứng” của tiến trình tại điểm trung tâm;(4) lặp lại tiến trình cho mọi điểm ảnh khác. Nếu các thao tác trên lân cận củađiểm ảnh đang được “lọc” là tuyến tính (cộng, trừ, nhân, chia) ta gọi chúng làcác phép lọc tuyến tính12, ngược lại là lọc phi tuyến13. Ngoài ra có thể đồngnhất lọc tuyến tính với thao tác “tổng chập”14; lọc phi tuyến với các thao tácthống kê15.

2.1 Lọc tuyến tính

Quy trình lọc tuyến tính được minh họa trực quan như hình bên dưới.6spatial filtering7frequency filtering8impulse9filter, mask, kernel, window

10transform11response12linear spatial filtering13nonlinear spatial filtering14convolution15statistics

5

Page 6: Digital Image Processing with Matlab

w=fspecial(type , parameters );g=imfilter(f, w);

Average

bộ lọc trung bình, các hệ số trong mặt nạ lọc đều bằng nhau, và thông thườngtổng là 1.0. Đáp ứng tại mỗi điểm ảnh là trung bình tổng giá trị độ sáng củacác điểm ảnh lân cận.

1

1 1 11 1 11 1 1

>> fspecial(’average ’)

Gaussian

Lọc thông thấp (triệt các tín hiệu tần số cao) với các hệ số trong mặt nạ phụthuộc vào hàm Gauss hai biến, trung vị16µ tại trung tâm của mặt nạ, và matrận hiệp phương sai17 Σ. Bộ lọc Gauss rất phổ biến, với công dụng chính làlàm trơn18 hoặc làm mờ19 ảnh, để giảm nhiễu, hoặc làm dày các cạnh.

y = f (x | µ,Σ) =1

(2π)k/2 |Σ|1/2

e−12 (x−µ)

′Σ−1(x−µ)

16mean17covariance18smoothing19bluring

6

Page 7: Digital Image Processing with Matlab

−10−5

05

10

−10

−5

0

5

100

0.005

0.01

0.015

0.02

2 4 6 8 10 12

2

4

6

8

10

12

−20−10

010

20

−20

−10

0

10

200

0.002

0.004

0.006

0.008

0.01

0.012

5 10 15 20 25

5

10

15

20

25

Laplacian of Gaussian (LoG)

Trước tiên ảnh đựoc lọc bằng mặt nạ Gauss, sau đó bằng mặt nạ Laplace. LoGđược dùng để tính đạo hàm cấp hai của ảnh, làm sắc nét các cạnh.

>> f = imread(’moon.tif ’);>> w4 = fspecial(’laplacian ’, 0);>> f = im2double(f);>> g = f - imfilter(f, w4 , ’replicate ’);>> imshow(f)>> figure , imshow(g)

−10−5

05

10

−10

−5

0

5

10−0.01

0

0.01

0.02

0.03

0.04

0.05

2 4 6 8 10 12 14 16 18 20

2

4

6

8

10

12

14

16

18

20

Prewitt

Tính gradient ảnh (nôm na có thể coi như lấy đạo hàm cấp 1 trên hàm ảnh)

7

Page 8: Digital Image Processing with Matlab

Sobel

Tương tự Prewitt, xem thêm trong mục 5.3.

Gabor

Lọc Gabor được dùng để dò tìm cạnh, cực kỳ phù hợp trong việc biểu diễnvà phân biệt texture dựa trên việc điều chỉnh các tần số và hướng của bộ lọc.Thông qua thí nghiệm và so sánh, người ta nhận thấy lọc Gabor có chức năngtương tự các tế bào thị giác trong động vật hữu nhũ (khỉ, mèo, người). LọcGabor được tính bằng tích giữa một hàm tuần hoàn và hàm Gauss.

g (x, y;λ, θ, ψ, σ, γ) = exp

(x′2 + γ2y

′2

2σ2

)cos

(2πx′

λ+ ψ

)với x

′= xcosθ + ysinθ và y

′= −xsinθ + ycosθ.

−40

−20

0

20

40

−30−20

−100

1020

30

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

5 10 15 20 25 30 35 40

5

10

15

20

25

30

35

40

2.2 Lọc phi tuyến

>> % SYNTAX g = ordfilt2(f, order , domain)>> g = ordfilt2(f, 1, ones(m,n)); % MIN>> g = ordfilt2(f, m*n, ones(m,n)); % MAX>> g = ordfilt2(f, median (1:m*n), ones(m,n));>> help medfilt2

Min

lấy giá trị cực đại trong lân cận gán cho điểm trung tâm

8

Page 9: Digital Image Processing with Matlab

Max

lấy giá trị cực đại trong lân cận gán cho điểm trung tâm

Median

sắp xếp tăng dần hoặc giảm dần các giá trị trong lân cận, sau đó gán giá trịphần tử đứng giữa cho điểm trung tâm.

>> fn = imnoise(f, ’salt & pepper ’, 0.2);>> gm = medfilt2(fn);>> imshow(gm); pause;>> gms = medfilt2( fn, ’symetric ’);>> imshow(gms);

3 Tăng cường ảnh

Đây là tập hợp các kỹ thuật làm tăng độ tương phản, cân bằng sáng cho ảnh,kết quả nhìn vào ảnh sẽ trở nên “đẹp” hơn. Kỹ thuật quan trọng nhất, và cũngthường gắp gặp trong các ứng dụng xử lý ảnh hay máy quay kỹ thuật số, là cânbằng histogram.

Histogram

Histogram của một ảnh số với L mức sáng nằm trong đoạn giá trị [0, G] đượcđịnh nghĩa là một hàm rời rạc

h (rk) = nk

với rk là mức sáng thứ k trong đoạn [0, G] và nk là số lượng điểm ảnh trongtoàn ảnh mà có mức sáng rk. Với dữ liệu ảnh kiểu uint8, giá trị của G là 255, vớiảnh uint16 là 65535, và với ảnh double là 1.0. Thông thường, histogram đượcchuẩn hóa bằng cách chia toàn bộ các giá trị cho mẫu số là tổng số điểm ảnhtrong ảnh (bằng w × h)

p (rk) =h (rk)

n=nkn

Trên bình diện thống kê, p (rk) là xác suất xuất hiện mức sáng rk trong ảnh.

>> p = imhist(f,b); % b is L>> p = p/numel(f)

Cân bằng sáng dùng histogram

Phương pháp này được sử dụng để tăng cường độ tương phản trên ảnh, tức lànhững ảnh mà một nhóm các mức sáng lân cận nhau rất phổ biến trong ảnh

9

Page 10: Digital Image Processing with Matlab

(histogram sẽ phân phối lệch20 về bên trái, bên phải, hoặc ở giữa). Cân bằnghistogram sẽ “kéo giãn” nhóm tụ tập này, làm cho ảnh có mức tương phản tốthơn, dễ dàng phân biệt đối tượng và nền.

Xét ảnh số mức xám {x} và ni là số lần xuất hiện mức xám i trong ảnh.Khả năng xuất hiện được tính bằng công thức

px (i) = p (x = i) =nin, 0 ≤ i ≤ L

với L là tổng số mức sáng trong ảnh, n là tổng số điểm ảnh trong ảnh, và px (i)là giá trị histogram cho điểm ảnh có mức sáng i, đã được chuẩn hóa về đoạn[0, 1].

Ta định nghĩa hàm phân phối tích lũy - cdf (culmulative distribution func-tion) ứng với px:

cdfx (i) =

i∑j=0

px (j)

đồng thời cũng là histogram tích lũy của ảnh. Phép cân bằng sáng sẽ thực hiệnmột phép biến đổi ra ảnh mới {y} : y = T (x) sao cho cdf là một hàm tuyếntính:

cdfy (i) = iK

với K là hằng số.

Bổ đề

Nếu {xi} là một tập các biến ngẫu nhiên độc lập có phân phối F , được xác địnhtrên cùng một không gian mẫu, thì tồn tại các biến ngẫu nhiên yi sao cho yi cóphân phối đều U [0, 1] và F−1 (yi) = xi.

Từ bổ đề trên ta có phép biến đổi mong muốn

y = T (x) = cdfx (x)

f=imread(’walking.jpg ’);f=rgb2gray(f);f=mat2gray(f);subplot (3,2,1), imshow(f);subplot (3,2,3), imhist(f);h=imhist(f);x=linspace (0 ,1 ,256);cdf=cumsum(h);subplot (3,2,5), plot(x,cdf ,’r-’);feq=histeq(f);subplot (3,2,2), imshow(feq);subplot (3,2,4), imhist(feq);cdfeq=cumsum(imhist(feq));subplot (3,2,6), plot(x,cdfeq ,’r-’);

20skewed

10

Page 11: Digital Image Processing with Matlab

0

1000

2000

3000

0 0.5 1

0 0.5 10

0.5

1

1.5

2x 10

5

0

1000

2000

3000

0 0.5 1

0 0.5 10

0.5

1

1.5

2x 10

5

11

Page 12: Digital Image Processing with Matlab

4 Hình thái ảnh

Khái niệm morphology trong xử lý ảnh số khởi nguồn từ một ngành của sinhhọc, nghiên cứu về hình thể và cấu trúc của động thực vật. Đây là một côngcụ trợ giúp rút trích các thành phần trong ảnh nhị phân, biểu diễn và mô tảchúng dưới dạng các vùng21 hoặc dạng22 như các đường biên, xương, và baolồi. Kỹ thuật morphology cũng được áp dụng trên ảnh xám cho các công đoạntiền/hậu xử lý ảnh.

4.1 Lý thuyết tập hợp

Số hóa một ảnh từ không gian thực 2D là động tác lấy mẫu mặt phẳng 2D ấytrên một lưới hai chiều, với tọa độ x và y lần lượt là các số nguyên trong tập Z.Như vậy ta có một ánh xạ hàm ảnh f (x, y) giữa giá trị độ sáng của điểm ảnhvà tọa độ (x, y). Nếu giá trị độ sáng của ảnh là số nguyên, ta có định nghĩa vềmột hàm ảnh với tọa độ và giá trị độ sáng đều nguyên.

Đặt A ⊆ Z2 với các phần tử trong là là tọa độ nguyên (x, y). Nếu đặtw = (x, y), ta viết

w ∈ A

nếu w là một phần tử trong A, viết

w /∈ A

nếu w không phải là một phần tử trong A.Một tập B các điểm ảnh thỏa mãn một điều kiện nào đó được ký hiệu

B = {w | condition}

Hợp và giao của hai tập A và B

A ∪BA ∩B

Hiệu của hai tập A và B, ký hiệu A−B là tập các phần tử thuộc A nhưngkhông thuộc B

A−B = {w | w ∈ A,w /∈ B}

Phản xạ B̂ của tập B

B̂ = {w | w = −b, b ∈ B}

Tịnh tiến của tập A theo điểm z = (z1, z2)

(A)z = {c | c = a+ z, a ∈ A}21region22shape

12

Page 13: Digital Image Processing with Matlab

Toán tử Biểu thức Matlab TênA ∩B A&B ANDA ∪B A|B ORAc -A NOTA−B A&~B DIFFERENCE

Dilate

Đây là thao tác làm phình to/giãn nở các đối tượng trong ảnh đơn sắc

A⊕B ={z |(B̂)z∩A 6= �

}>> A=imread(’broken_text.tif ’);>> B=[0 1 0; 1 1 1; 0 1 0];>> A2=imdilate(A,B);>> imshow(A2)

Ở đây B được gọi là nhân tạo hình (structuring element). Matlab cung cấpsẵn nhiều cấu trúc tạo hình

>> help strel

Erode

Đây là thao tác làm xói mòn/co hẹp các đối tượng trong ảnh đơn sắc

AB = {z | (B)z ∩Ac 6= �}

Ở đây B là nhân tạo hình tương tự như trong thao tác dilate.

>> A=imread(’wirebond_mask.tif ’);>> se=strel(’disk ’, 10);>> A2=imerode(A,se);>> imshow(A2)

Open

Thao tác open (td: mở) hình A bằng nhân tạo hình B, ký hiệu A ◦ B, là kếtquả erode A bằng B và lấy kết quả đó dilate cho B

A ◦B = (AB)⊕BA ◦B = ∪{(B)z | (B)z ⊆ A}

Công dụng của open là loại bỏ các vùng của đối tượng (thường là các góc)không đủ lớn để “chứa” nhân tạo hình, làm trơn biên, tách rời các mấu liên kếtgiữa các đối tượng lớn, và loại bỏ nhánh con.

>> C=imopen(A,B)

13

Page 14: Digital Image Processing with Matlab

Close

Thao tác close (td: đóng) hình A bằng nhân tạo hình B, ký hiệu A •B, là phéperode đi sau phép dilate

A •B = (A⊕B)BA •B = (∪{(B)z | (B)z ⊆ Ac})

c

Công dụng của close là làm trơn biên, làm liền các mấu rời nhau, điền đầycác lỗ nhỏ và rãnh.

C=imclose(A,B)

>> f=imread(’shapes.tif ’);>> se=strel(’square ’,20);>> fo=imopen(f,se);>> imshow(fo); pause>> fc=imclose(f,se);>> imshow(fc)

>> f=imread(’fingerprint.tif ’);>> se=strel(’square ’,3);>> fo=imopen(f,se);>> imshow(fo); pause>> foc=imclose(fo ,se);>> imshow(foc);

Tham khảo thêm các thao tác khác:

>> help bwmorph

5 Phân đoạn ảnh

Trong phần morphology, chúng ta có một ảnh đầu vào, qua xử lý, và đầu ra làcác thuộc tính trong ảnh, khác với các phương pháp tăng cường ảnh với đầu racũng là một ảnh. Phân đoạn ảnh chia nhỏ nội dung trong ảnh thành các vùngvà các đối tượng. Đây là thao tác khó nhất trong xử lý ảnh, một phần vì cáckỹ thuật chưa đủ khả năng để quan tâm đến nội dung các đối tượng trong ảnh,phần khác vì mỗi đối tượng có nhiều tầm vực ngữ nghĩa.

Kỹ thuật cơ sở để dò điểm, đường và các cạnh là sử dụng một bộ dò sự thayđổi đột ngột độ sáng trong vùng mà mặt nạ bao phủ, với điểm đặt tại tâm

R = w1z1 + w2z2 + ...+ w9x9

=9∑i=1

wizi

với zi là mức sáng của điểm ảnh tại hệ số mặt nạ wi.

14

Page 15: Digital Image Processing with Matlab

5.1 Dò điểm −1 −1 −1−1 8 −1−1 −1 −1

>> w=[-1 -1 -1; -1 8 -1; -1 -1 -1];>> g=abs(imfilter(double(f),w));>> T=max(g(:));>> g=g>=T;>> imshow(g)

5.2 Dò đường −1 −1 −12 2 2−1 −1 −1

horizontal

−1 −1 2−1 2 −12 −1 −1

+450

−1 2 −1−1 2 −1−1 2 −1

vertical

2 −1 −1−1 2 −1−1 −1 2

−450

>> w=[2 -1 -1; -1 2 -1; -1 -1 2];>> g=imfilter(double(f),w);>> imshow(g,[])

5.3 Dò cạnh

Cùng với dò điểm và đường, cạnh là một trong những thuộc tính ảnh được sửdụng, nếu không muốn nói là nhiều nhất. Cạnh trong ảnh xuất hiện khi có sựbiến đổi đột ngột (không liên tục) độ sáng. Điều này gợi ý ta sử dụng đạo hàmbậc một và hai trên hàm ảnh đề tìm ra chúng. Gradient là một xấp xỉ tốt đểtính đạo hàm cấp một trong hàm ảnh rời rạc

∇f =

[GxGy

]=

[∂f∂x∂f∂y

]

Độ lớn23 của vector này bằng

∇f = mag (∇f) =[G2x +G2

y

]1/2=

[(∂f∂x

)2

+(∂f∂y

)2]1/2

Đạo hàm bậc hai được tính bằng công thức Laplace

∇2f (x, y) =∂2f (x, y)

∂x2+∂2f (x, y)

∂y2

23magnitude

15

Page 16: Digital Image Processing with Matlab

Cách này hiếm khi được dùng để dò cạnh, một phần vì nhạy với nhiễu, tạo rahiệu ứng cạnh đôi, và không có khả năng tìm hướng của cạnh. Tuy nhiên nó cóthể dùng để tìm vị trí chính xác của cạnh

>> help edge

5.4 Đặt ngưỡng

Giả sử trong những ảnh đơn sắc đơn giản, các đối tượng24 cần quan tâm có độsáng phân biệt so với khung cảnh25 chung quanh. Ta có thể dùng histogram đểxác định một ngưỡng độ sáng T trong đó mức sáng này sẽ phân biệt được cácmức sáng của nền và các mức sáng của đối tượng.

g (x, y) =

{1 if f (x, y) ≥ T0 if f (x, y) < T

Ngưỡng toàn cục

1. Chọn một ước lượng ban đầu cho T (chọn giá trị trung vị trong dải mứcsáng của ảnh)

2. Phân đoạn ảnh với T đã chọn thành hai nhóm điểm ảnh: G1 ≥ T vàG2 < T

3. Tính giá trị sáng trung bình µ1 và µ2 cho vùng G1 và G2.

4. Tính ngưỡng mới

T =1

2(µ1 + µ2)

5. Lặp lại bước 2-4 cho đến khi 4T < ε

>> help graythresh>> T=0.5*( double(min(f(:)))+ double(max(f(:))));>> done=false;>> while ~done

g=f>=T;Tnext =0.5*( mean(f(g))+ mean(f(~g)))done=abs(T-Tnext )<0.5;

end

24foreground25background

16

Page 17: Digital Image Processing with Matlab

Ngưỡng cục bộ

Phương pháp ngưỡng toàn cục không thể sử dụng được trong điều kiện ảnh cómức sáng phân bố không đồng đều. Để đối phó vấn đề này, ta có thể sử dụngphương pháp ngưỡng cục bộ

g (x, y) =

{1 if f (x, y) ≥ T (x, y)

0 if f (x, y) < T (x, y)

T (x, y) = fo (x, y) + To

với f◦ (x, y) là toán tử open trên ảnh f , hằng số To là kết quả của hàm graythreshtrên ảnh fo.

6 Mô tả đối tượng

6.1 Mã xích26

Được dùng để biểu diễn biên đối tượng, là một chuỗi các đoạn thẳng có chiềudài cố định và hướng quy ước trước.

>> help fchcode

>> h=fspecial(’average ’,9);>> g=imfilter(f,h,’replicate ’);>> g=im2bw(g ,0.5);>> B=boundaries(g);>> d=cellfun(’length ’,B);>> [max_d ,k]=max(d);>> b=B{1};>> [M N]=size(g);>> g=bound2im(b,M,N,min(b(:,1)),min(b(: ,2)));>> [s,su]= bsubsamp(b,50);>> g2=bound2im(s,M,N,min(s(:,1)),min(s(: ,2)));>> cn=connectpoly(s(:,1),s(:2));>> g2=bound2im(cn ,M,N,min(cn(:,1)),min(cn(: ,2)));>> c=fchcode(su);>> c.x0y0>> c.fcc>> c.mm>> c.diff>> c.diffmm

26chain-code

17

Page 18: Digital Image Processing with Matlab

6.2 Xấp xỉ bằng đa giác

Đường biên đối tượng cũng có thể được biểu diễn xấp xỉ bằng một đa giác (lồihoặc lõm). Xấp xỉ thô hay mịn là tùy thuộc vào việc lấy mẫu đỉnh đa giác dọctheo biên đối tượng là thưa hay dày.

>> help minperpoly

>> b=boundaries(B,4,’cw ’);>> b=b{1};>> [M N]=size(B);>> xmin=min(b(: ,1));>> ymin=min(b(: ,2));>> bim=bound2im(b,M,N,xmin ,ymin);>> imshow(bim)

>> [x,y]= imperpoly(B,2);>> b2=connectpoly(x,y);>> B2=bound2im(b2 ,M,N,xmin ,ymin);>> imshow(B2)

>> [x,y]= imperpoly(B,4);>> b3=connectpoly(x,y);>> B3=bound2im(b3 ,M,N,xmin ,ymin);>> imshow(B3)

6.3 Xương27

Hình dạng đối tượng còn có thể được biểu diễn dưới dạng đồ thị liên thông cácđiểm ảnh, mà ta còn gọi là xương. Toán tử làm mảnh28 được dùng vào mụcđích này.

>> f=im2double(f);>> h=fspecial(’gaussian ’,25 ,15);>> g=imfilter(f,h,’replicate ’);>> imshow(g); pause>> % thresholding the smoothed image>> g=im2bw(g ,1.5* graythresh(g));>> figure , imshow(g); pause>> % obtaining skeleton>> s=bwmorph(g,’skel ’, Inf);>> % eliminate spurs>> s1=bwmorph(s,’spur ’,8);

27skeleton28thinning

18

Page 19: Digital Image Processing with Matlab

6.4 Đo đạc biên

>> help diameter

Độ đo Ý nghĩaDiameter Khoảng cách cực đại giữa hai điểm ảnh trong vùngMajorAxis Trục chính, mỗi dòng chứa tọa độ điểm đầu mútMinorAxis Trục phụ, mỗi dòng chứa tọa độ điểm đầu mútBasicRectangle Bao đóng nhỏ nhất

6.5 Đo đạc vùng

Vùng khác với biên ở chỗ tất cả điểm ảnh nằm trong biên cũng được tính đến.

Cơ sở

>> help regionprops

Độ đo Ý nghĩaArea Số lượng điểm ảnh trong vùngBoundingBox Là hình chữ nhật ngoại tiếp vùng, các cạnh song song với hệ tọa độCentroid Khối tâm của vùngConvexArea Số điểm ảnh nằm trong bao lồi của vùngConvexHull Đa giác lồi nhỏ nhất ngoại tiếp vùngSolidity Area/ConvexArea

Một số độ đo khác không sẵn có trong Matlab:Độ đo Công thức Ý nghĩaFormfactor 4π×Area

Perimeter2 Mức độ gồ ghề của đường biên đối tượngRoundness 4×Area

π×MaximumDiameter2 Tính tròn của đối tượngAspectRatio MaximumDiameter

MinimumDiameter Mức độ tròn/dẹtCurl Length

FiberLength Mức độ cong của đối tượngTexture

>> help statxture

Moment Công thức Ý nghĩa

Mean m =L−1∑i=0

zip (zi) Mức sáng trung bình

Standard deviation σ =√µ2 (z) =

√σ2 Độ tương phản trung bình

Smoothness R = 1− 1/(1 + σ2

)Độ trơn bóng (càng nhỏ càng trơn)

Third moment µ3 =L−1∑i=0

(zi −m)3p (zi) Mức lệch trong histogram của vùng

Uniformity U =L−1∑i=0

p2 (zi) Độ đồng đều mức xám

Entropy e = −L−1∑i=0

p (zi) log2p (zi) Mức độ ngẫu nhiên của mức xám

19

Page 20: Digital Image Processing with Matlab

7 Tham khảo

• Rafael C.Gonzalez, Digital Image Processing Using Matlab

• John C.Russ, The Image Processing Handbook, Fifth Ed.

20