Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 34 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
34
Dung lượng
2,25 MB
Nội dung
PHÂN ĐOẠN ẢNH Tài liệu ở chương trước là bước chuyển tiếp từ các phương pháp xử lý ảnh với đầu vào và đầu ra là các ảnh sang các phương pháp mà đầu vào là các ảnh, nhưng đâu ra là các thuộc tính được trích xuất từ những ảnh đó. Phân đoạn ảnh là bước quan trọng khác trong phương diện trên. Phân đoạn chia nhỏ một ảnh thành các vùng hoặc đối tượng cấu tạo nên nó. Mức độ của sự chia nhỏ tùy theo các vấn đề cần được giải quyết. Nghĩa là, phân đoạn sẽ dừng khi các đối tượng cần quan tâm trong một ứng dụng được tách biệt. Thuật toán phân đoạn ảnh cho các ảnh đơn sắc nói chung dựa trên một trong hai thuộc tính cơ bản của giá trị cường độ ảnh: sự không liên tục và sự giống nhau. Ở thuộc tính đầu tiên, cách tiếp cận là chia một ảnh theo các thay đổi độ dốc của cường độ, ví dụ là cạnh trong một ảnh. Ở thuộc tính thứ hai, cách tiếp cận là dựa trên việc chia một ảnh thành các vùng tương tự dựa trên tập các tiêu chuẩn đã được định trước. Trong chương này chúng ta thảo luận về một số cách tiếp cận trong 2 hướng tiếp cận được đề cập ở trên được áp dụng cho ảnh đơn sắc (xác định cạnh và phân đoạn ảnh màu được thảo luận trong phần 6.6). Chúng ta bắt đầu trình bày với phương pháp phù hợp cho việc xác định sự không liên tục của cường độ như là các điểm, các đường và các cạnh. Xác định cạnh là yêu cầu cần thiết của các thuật toán phân đoạn ảnh trong nhiều năm. Thêm vào đó, để xác định cạnh, chúng ta cũng phải thảo luận việc xác định phân đoạn cạnh tuyến tính sử dụng phương pháp dựa trên biến đổi Hough. Phần thảo luận của việc xác định cạnh được đề cập sau phần giới thiệu về các kỹ thuật phân ngưỡng. Phân ngưỡng là một phương pháp cơ bản để phân đoạn mà thu được sự quan tâm rất nhiều, đặc biệt trong ứng dụng mà tốc độ là yếu tố quan trọng. Phần thảo luận của phân ngưỡng nằm sau phần trình bày của các phương pháp phân đoạn vùng được định hướng. Chúng ta kết thúc chương với phần thảo luận về phương pháp hình thái học để phân đoạn được gọi là phân đoạn đường mức hình thái (watershed segmentation). Phương pháp này đặc biệt thú vị vì nó tạo ra các vùng được định nghĩa tốt, kín, xử lý trên hình dáng toàn cục, và cung cấp một kết cấu mà với những điều đã biết về những bức ảnh trong một ứng dụng cụ thể ta có thể sử dụng để cải tiến kết quả phân đoạn. 1. Nhận dạng điểm đường và cạnh: Trong phần này, chúng ta thảo luận kỹ thuật để xác định 3 loại cơ bản của sự không liên tục cường độ tỏng một bức ảnh số: các điểm, các đường và các cạnh. Cách thông dụng nhất để tìm kiếm sự không liên tục là chạy một mặt nạ qua ảnh theo cách được đề cập trong phần 3.4 và 3.5. Đối với một mặt nạ 3x3, thủ tục này bao gồm tính toán tổng của các kết quả của các hệ số nhân với mức cường độ được chứa trong những vùng được bao quanh bởi mặt nạ. Đáp ứng R của mặt nạ tại mỗi điểm trong ảnh được cho bởi công thức R = w 1 z 1 + w 2 z 2 +…+ w 9 z 9 = với z i là cường độ của pixel tương ứng với hệ số w i của mặt nạ. Như đã nói trước đó, đáp ứng của mặt nạ được định nghĩa với mối quan hệ với trung tâm của nó. 1.1. Nhận dạng điểm: Nhận dạng các điểm cô lập nằm trong những vùng có cường độ không đổi hoặc gần như không đổi trong bức ảnh rất đơn giản. Bằng cách sử dụng mặt nạ như hình 1, chúng ta nói rằng một điểm cô lập được nhận dạng tại vị trí trung tâm của mặt nạ khi: -1 -1 -1 -1 8 -1 -1 -1 -1 Hình 1 với T là một ngưỡng không âm. Nhận diện điểm trong Matlab sử dụng hàm imfilter, với mặt nạ như hình 1 hoặc các mặt nạ tương tự khác. Yêu cầu quan trọng là mặt nạ có kết quả trả về lớn nhất khi trung tâm của mặt nạ đi qua điểm cô lập và kết quả trả về bằng 0 tại những vùng có cường độ không đổi. Nếu T được cho trước, lệnh sau đây sẽ nhận dạng điểm cô lập tương ứng với cách mà chúng ta đã thảo luận: >> g = abs(imfilter(double(f),w)) >= T; với f là ảnh đầu vào, w là một mặt nạ nhận diện điểm tương ứng (ví dụ là mặt nạ trong hình 1), và g là ảnh kết quả. Như đã nói đến trong phần 3.4.1, hàm imfilter đổi kiểu dữ liệu của kết quả giống như kiểu dữ liệu của đầu vào,vì vậy chúng ta sử dụng double(f) trong toán tử lọc để ngăn ngừa sự mất mát dữ liệu (bị làm tròn) nếu dữ liệu đầu vào là kiểu uint8, và bởi vì toán tử abs không chấp nhận kiểu dữ liệu integer. Ảnh kết quả g là kiểu logical, có giá trị là 0 hoặc 1. Nếu T không cho trước, giá trị của nó thường được chọn dựa trên kết quả lọc, trong trường hợp này, chuỗi lệnh trước đó được chia thành 3 bước cơ bản: (1) tính toán ảnh được lọc, abs(imfilter(double(f),w)), (2) tìm giá trị cho T sử dụng dữ liệu từ ảnh được lọc, (3) so sánh kết quả lọc với T. Phương pháp này được minh họa bằng ví dụ sau: Ví dụ 1: Xác định điểm Hình 2a hiển thị một ảnh với điểm trắng xuất hiện ở phần tư phía trên bên phải. Đặt f kí hiệu cho hình, chúng ta có thể tìm được điểm cô lập đó như sau: a b Hình 2: (a)Ảnh xám với một điểm cô lập nằm ở một phần tư phía trên bên phải. (b) Ảnh biểu diễn điểm cô lập tìm được. >> w = [-1 -1 -1;-1 8 -1;-1 -1 -1]; >> g = abs (imfilter(double(f), w)); >> T = max(g(:)); >> g = g >= T; >> imshow(g) Bằng cách chọn T là giá trị cực đại trong ảnh đã lọc g, sau đó tìm tất cả những điểm trong g sao cho g >= T, chúng ta sẽ xác định được những điểm cho đáp ứng lớn nhất. Giả sử rằng tất cả những điểm đó là những điểm cô lập nằm trong một nền không đổi hoặc gần như không đổi. Chú ý rằng kiểm tra đối với T sử dụng toán tử >= để nhất quán về ký hiệu. Vì T được chọn trong trường hợp là giá trị cực đại của g, rõ ràng không có giá trị nào trong g có giá trị lớn hơn T. Như hình 2b, chúng ta chỉ thấy một điểm cô lập thỏa điều kiện g >= T với T được đặt là max(g(:)). Một phương pháp khác để xác định một điểm là tìm những điểm trong tất cả các láng giềng kích thước m×n mà sự sai khác về giá trị lớn nhất và nhỏ nhất vượt quá một giá trị đặc biệt T. Phương pháp này có thể được thực hiện bằng cách sử dụng hàm ordfilt2 được giới thiệu trong phần 3.5.2: >> g = imsubtract(ordfilt2(f, m*n, ones(m,n)), ordfilt2(f, 1, ones(m, n))); >> g = g >= T Dễ dàng xác định được rằng chọn T = max(g(:)) cho ra cùng kết quả với hình 2b. Công thức trên phức tạp hơn là sử dụng mặt nạ ở hình 1. Ví dụ, nếu ta muốn tính toán sự sai khác giữa giá trị pixel cao nhất và pixel kế cao nhất trong một lân cận, chúng ta phải thay thế 1 ở tận cùng bên phải của biểu thức trước bằng m×n – 1. Những độ chênh lệnh khác của chủ đề cơ bản này được tính toán theo cách tương tự. 1.2. Nhận dạng đường Khó khăn kế tiếp là xác định đường. Xét các mặt nạ trong hình 3. Nếu mặt nạ đầu tiên được di chuyển qua một ảnh, nó sẽ có đáp ứng mạnh tại những đường (độ dày 1 pixel) có hướng nằm ngang. Với một nền là hằng số, đáp ứng cực đại sẽ được trả về khi đường đi qua dòng chính giữa của mặt nạ. Tương tự như vậy, mặt nạ thứ hai trong hình 3 đáp ứng tốt nhất với những đường có hướng +45 0 ; mặt nạ thứ 3 đối với các đường thẳng đứng; mặt nạ thứ 4 đối với các đường có hướng -45 0 . Chú ý rằng hướng phù hợp hơn với mỗi mặt nạ chịu tác động của một hệ số lớn hơn (nghĩa là 2) các hướng có thể khác. Hệ số của mỗi mặt nạ có tổng là 0, cho những đáp ứng bằng 0 tại những vùng có cường độ không đổi. -1 -1 -1 -1 -1 2 -1 2 -1 2 -1 -1 2 2 2 -1 2 -1 -1 2 -1 -1 2 -1 -1 -1 -1 2 -1 -1 -1 2 -1 -1 -1 2 Ngang +45 0 Dọc -45 0 Hình 3: Các mặt nạ xác định đường Đặt R 1 , R 2 , R 3 , R 4 kí hiệu cho các mặt nạ đáp ứng trong hình 3 từ trái sang phải với R i được cho bởi phương trình trong phần trước. Giả sử rằng 4 mặt nạ này chạy riêng lẻ qua một ảnh. Nếu tại một điểm nào đó trong ảnh, |R i | > |R j |, với mọi i ≠ j, điểm đó được nói là có khả năng liên kết hơn với đường của mặt nạ i. Ví dụ, tại một điểm trong ảnh, |R 1 | > |R j | với j = 2, 3, 4, điểm đặc biệt đó được nói là có khả năng liên kết hơn với một đường nằm ngang. Chúng ta có thể muốn xác định một đường với một hướng xác định. Trong trường hợp này, chúng ta sẽ sử dụng một mặt nạ liên kết với hướng và phân ngưỡng kết quả của nó, như trong phương trình của phần trước. Nói cách khác, nếu chúng ta quan tâm việc xác định tất cả các đường trong một ảnh với một hướng được xác định trước bằng một mặt nạ cho trước, chúng ta chỉ cần chạy mặt nạ qua ảnh và phân ngưỡng giá trị tuyệt đối của kết quả. Những điểm còn lại là những điểm có đáp ứng mạnh nhất với những đường có độ dày 1 pixel, đáp ứng gần nhất với hướng được xác định bởi mặt nạ. Ví dụ sau minh họa cho thủ tục này. Ví dụ 2: Xác định những đường nằm trong các hướng đặc biệt Hình 4a biểu diễn một phần số hóa (nhị phân) của một mối dây dẫn đại diện cho một mạch điện tử. Kích thước ảnh là 486 × 486 pixel. Giả sử rằng chúng ta muốn tìm tất cả các đường có độ dày 1 pixel, có hướng là -45 0 . Để thực hiện điều này, chúng ta sử dụng mặt nạ cuối cùng trong hình 3. Hình 4b đến hình 4f được tạo ra sử dụng các lệnh sau, với f là ảnh của hình 4a. >> w = [2 -1 -1; -1 2 -1; -1 -1 2]; >> g = imfilter(double(f),w); >> imshow(g, [ ] ) %hinh 4b >> gtop = g(1:120, 1:120); >> gtop = pixeldup (gtop, 4); >> figure, imshow(gtop, [ ] ) %hinh 4c >> gbot = g(end-119:end, end-119:end); >> gbot = pixeldup(gbot, 4); >> figure, imshow(gbot, [ ] ) %hinh 4d >> g = abs(g); >> figure, imshow(g, [ ] ) %hinh 4e >> T = max(g(:)); >> g = g >= T; >> figure, imshow(g); %hinh 4f Phần đậm màu hơn nền xám trong hình 4b tương ứng với giá trị âm. Có 2 phần chính được định hướng -45 0 , một ở phía trên bên trái và một ở phía dưới bên phải (hình 4c và 4d hiển thị ảnh phóng lớn của 2 khu vực này). Chú ý mức độ sáng hơn của đường thẳng được phân đoạn trong hình 4d so với trong hình 4c. Nguyên nhân là thành phần ở phía dưới bên phải của hình 4a có độ dày 1 pixel, trong khi phía trên bên trái thì không phải vậy. Mặt nạ sẽ đáp ứng mạnh hơn đối với những thành phần có độ dày 1 pixel. Hình 4e hiển thị giá trị tuyệt đối của hình 4b. Vì chúng ta quan tâm đến đáp ứng mạnh nhất, chúng ta đặt T là giá trị lớn nhất trong hình này. Phần màu trắng của hình 4f sẽ hiển thị những điểm mà có giá trị thỏa mãn điều kiện g >= T, với g là ảnh trong hình 4e. Các điểm cô lập trong hình là những điểm có đáp ứng tương tự nhau đối với mặt nạ. Trong ảnh gốc, những điểm này và các láng giềng trực tiếp được định hướng theo cách mà mặt nạ tạo ra đáp ứng cực đại tại những vùng cô lập. Những điểm cô lập này có thể được xác định sử dụng mặt nạ trong hình 1 và sau đó được xóa, hoặc nó có thể được xóa sử dụng toán tử hình thái học, như được thảo luận ở chương trước. a b c d e f Hình 4: (a) Ảnh của một mối dây dẫn (b) Kết quả của xử lý với mặt nạ hướng -45 0 trong hình 3 (c) Ảnh phóng lớn của vùng phía trên bên trái của ảnh (b) (d) Ảnh phóng lớn của vùng phía dưới bên phải của ảnh (b) (e) Trị tuyệt đối của (b) (f) Tất cả các điểm (màu trắng) có giá trị thỏa mãn điều kiện g >= T, với g là ảnh (e) 1.3. Xác định cạnh sử dụng hàm edge Mặc dù xác định điểm và đường quan trọng trong bất kì cuộc thảo luận nào về phân đoạn ảnh, xác định cạnh sau đó là cách tiếp cận thông dụng nhất để xác định sự không liên tục của giá trị cường độ. Sự không liên tục được xác định bằng cách sử dụng đạo hàm bậc 1 và bậc 2. Đạo hàm bậc 1 trong xử lý ảnh là gradient, được định nghĩa trong phần 6.6.1. Để thuận tiện, chúng ta nhắc lại các phương trình thích hợp. Gradient của hàm 2-D, f(x,y), được định nghĩa như là vector Độ lớn của vector này là Để tính toán đơn giản, đại lượng này đôi khi được xấp xỉ bằng cách làm tròn toán tử căn bậc 2 hoặc bằng cách sử dụng giá trị tuyệt đối Những xấp xỉ này cũng tương tự như đạo hàm, nghĩa là, chúng bằng 0 tại những vùng có cường độ không đổi và giá trị của chúng tỷ lệ với mức độ thay đổi cường độ trong vùng có những giá trị pixel biến thiên. Thông thường, người ta khi nói đến độ lớn của gradient hoặc các xấp xỉ của nó, người ta chỉ đơn giản nói là “gradient”. Một thuộc tính cơ bản của vector gradient là nó chỉ ra hướng của tốc độ lớn nhất của sự thay đổi của f tại tọa độ (x,y). Góc của tốc độ lớn nhất của sự thay đổi này là Một vấn đề quan trọng là làm cách nào để ước lượng đạo hàm G x và G y . Các phương pháp khác nhau sử dụng hàm edge được thảo luận sau phần này. Đạo hàm bậc 2 trong xử lý ảnh thường được tính toán sử dụng Laplace được giới thiệu trong phần 3.5.1. Laplace của hàm 2-D f(x,y) được xây dựng từ các đạo hàm bậc 2 như sau: Laplace hiếm khi được sử dụng để xác định cạnh bởi vì, như là một đạo hàm bậc 2, Laplace nhạy với nhiễu, giá trị của nó tạo ra cạnh đôi, và nó không thể xác định hướng của cạnh. Tuy nhiên, như phần sẽ thảo luận sau đó, Laplace có thể là một thành phần mạnh mẽ khi sử dụng trong việc kết hợp với các kỹ thuật xác định cạnh khác. Ví dụ, mặc dù việc tạo ra cạnh đôi của Laplace làm cho nó không phù hợp để xác định cạnh một cách trực tiếp, tính chất này có thể được sử dụng để định vị cạnh. Với phần thảo luận trước làm nền tảng, ý tưởng cơ bản phía sau xác định cạnh là tìm những vị trí trong ảnh mà có cường độ thay đổi nhanh, sử dụng một trong hai tiêu chuẩn sau: 1. Tìm tất cả những vị trí có đạo hàm bậc 1 của cường độ độ xám có độ lớn lớn hơn một ngưỡng đặc biệt. 2. Tìm những vị trí mà đạo hàm bậc hai của cường độ đi qua 0. Hàm edge cung cấp vài ước lượng đạo hàm dựa trên các điều kiện vừa thảo luận. Đối với những ước lượng này, nó có thể chỉ định mặt nạ nhạy với cạnh đứng, cạnh ngang hoặc cả hai. Cú pháp chung của hàm này là [g, t] = edge (f, ‘method’, parameters) với f là ảnh đầu vào, method một trong những phương pháp được liệt kê ở bảng 10.1, và parameters là các tham số bổ sung được giải thích ở phần phía sau. Trong phần xuất ra, g là một mảng logic với 1 tại những vùng điểm cạnh được xác định trong f và 0 ở những vị trí còn lại. Tham số t là tùy chọn; nó đưa ra một ngưỡng được sử dụng bởi edge để xác định giá trị gradient nào đủ mạnh để gọi các điểm cạnh. Phép dò cạnh Thuộc tính cơ bản Sobel Tìm các cạnh sử dụng xấp xỉ Sobel để lấy đạo hàm, minh họa bằng hình 5b Prewitt Tìm các cạnh sử dụng xấp xỉ Prewitt để lấy đạo hàm, minh họa bằng hình 5c Roberts Tìm các cạnh sử dụng xấp xỉ Roberts để lấy đạo hàm, minh họa bằng hình 5d Laplacian of a Gaussian (LoG) Tìm các cạnh bằng cách tìm kiếm những vị trí qua 0 sau khi lọc f(x, y) với phép lọc Gauss Zero crossings Tìm các cạnh bằng cách tìm kiếm những vị trí qua 0 sau khi lọc f(x, y) với phép lọc do người dùng chỉ định. Canny Tìm các cạnh bằng cách tìm kiếm cực đại địa phương phép tính gradient của f(x, y). Gradient được tính toán sử dụng đạo hàm của phép lọc Gauss. Phương pháp sử dụng 2 ngưỡng để xác định độ mạnh và yếu của cạnh, và bao gồm cả cạnh yếu trong kết quả nếu chúng liên thông với các cạnh mạnh. Vì vậy, phương pháp này rất thích hợp để xác định các cạnh yếu. Bảng 1 Các phép dò cạnh có thể sử dụng được trong hàm edge Phép dò Sobel Phép dò cạnh Sobel sử dụng mặt nạ trong hình 5b để xấp xỉ theo số đạo hàm bậc nhất G x và G y . Nói cách khác, gradient tại một điểm trung tâm trong một lân cận được tính toán như sau bằng phép dò cạnh Sobel: Sau đó, chúng ta nói rằng một pixel tại vị trí (x, y) là một pixel cạnh nếu g ≥ T tại vị trí đó, với T là một ngưỡng xác định. Từ thảo luận trong phần 3.5.1, chúng ta biết rằng xác định cạnh Sobel có thể được sử dụng để lọc một ảnh, f, (sử dụng imfilter) với mặt nạ bên trái trong hình 5b, lọc f lần nữa với mặt nạ khác, bình phương giá trị pixel của mỗi ảnh được lọc, cộng 2 kết quả lại với nhau, sau đó tính căn bậc hai của chúng. Áp dụng tương tự cho phần thứ 2 và thứ 3 trong bảng 1. Hàm edge chứa các phép toán trên và được bổ sung các tính năng khác, như là chấp nhận một giá trị phân ngưỡng hoặc xác định ngưỡng một cách tự động. Thêm vào đó, edge chứa các kỹ thuật xác định cạnh khác mà không thể cài đặt trực tiếp bằng hàm imfilter được. Cú pháp chung để gọi phép dò Sobel là [g, t] = edge (f, ‘sobel’, T, dir) với f là ảnh đầu vào, T là một ngưỡng xác định, dir cho biết hướng của việc xác định cạnh: ‘horizontal’, ‘vertical’, hoặc ‘both’ (mặc định). Như phần trước, g là một ảnh logic chứa 1 tại những vị trí mà cạnh được xác định và 0 ở những nơi còn lại. Tham số t ở kết quả trả về là một tùy chọn. Nó là giá trị ngưỡng được sử dụng bởi edge. Nếu T được xác định, thì t = T. Ngược lại, nếu T chưa được xác định, (hoặc là để trống, []), edge thiết lập t bằng với một ngưỡng được xác định tự động và sau đó được dùng để xác định cạnh. Một trong những nguyên nhân chính của việc chứa t trong phần kết quả là để tạo một giá trị khởi đầu cho phân ngưỡng. Hàm edge sử dụng phép dò Sobel được thiết lập mặc định nếu dùng cú pháp g = edge(f), hoặc [g, t] = edge(f). z 1 z 2 z 3 z 4 z 5 z 6 z 7 z 8 z 9 -1 -2 -1 -1 0 1 0 0 0 -2 0 2 1 2 1 -1 0 1 G x = (z 7 +2z 8 +z 9 ) – (z 1 +2z 2 +z 3 ) G y = (z 3 +2z 6 +z 9 ) – (z 1 +2z 4 +z 7 ) -1 -1 -1 -1 0 1 0 0 0 -1 0 1 1 1 1 -1 0 1 G x = (z 7 +z 8 +z 9 ) – (z 1 +z 2 +z 3 ) G y = (z 3 +z 6 +z 9 ) – (z 1 +z 4 +z 7 ) -1 0 0 -1 0 1 1 0 G x =z 9 – z 5 G y =z 8 – z 6 a Ảnh láng giềng b Sobel c Prewitt d Roberts Hình 5 Một vài mặt nạ xác định cạnh và đạo hàm bậc nhất của chúng Phép dò Prewitt Phép dò cạnh Prewitt sử dụng mặt nạ trong hình 5c để xấp xỉ bằng số đạo hàm bậc 1 của G x và G y . Cú pháp chung để gọi phép dò Prewitt là [g, t] = edge(f, ‘prewitt’, T, dir) Tham số của hàm này giống với tham số của Sobel. Phép dò Prewitt đơn giản hơn trong tính toán so với Sobel, nhưng nó dẫn đến việc tạo ra nhiều nhiễu hơn. (Nó có thể dùng hệ số 2 như trong toán tử Sobel để được kết quả mượt hơn). Phép dò Roberts Phép dò cạnh Roberts sử dụng mặt nạ trong hình 5d để xấp xỉ bằng số đạo hàm bậc 1 của G x và G y . Cú pháp chung để gọi phép dò Roberts là [g, t] = edge(f, ‘roberts’, T, dir) Tham số của hàm này giống với tham số của Sobel. Phép dò Roberts là một trong những phép dò lâu đời nhất trong xử lý ảnh số, như hình 5d, chúng ta thấy phép dò Roberts là đơn giản nhất. Phép dò này được sử dụng ít hơn so với những loại khác trong hình 5 bởi vì sự giới hạn về chức năng của nó (ví dụ, nó không đối xứng và không thể được dùng để xác định các cạnh là bội của 45 0 ). Tuy nhiên, nó vẫn được sử dụng thường xuyên trong thành phần phần cứng khi yêu cầu về tốc độ và sự đơn giản là quan trọng nhất. Phép dò Laplacian of a Gaussian (LoG) Xét hàm Gauss với r 2 = x 2 + y 2 và σ là độ lệch chuẩn. Đây là một hàm làm trơn, nó sẽ xoắn với một ảnh, và làm mờ nó. Mức độ mờ được xác định bởi giá trị σ. Laplace của hàm này (đạo hàm bậc 2 với r) là Hàm này được gọi là hàm Laplacian of a Gaussian (LoG). Bởi vì đạo hàm bậc 2 là một toán tử tuyến tính, xoắn (lọc) một ảnh với tương đương với xoắn một ảnh với một hàm làm trơn trước và sau đó tính Laplace kết quả. Đây là một khái niệm quan trọng cơ bản của LoG. Chúng ta xoắn một ảnh với , biết rằng nó có 2 hiệu ứng: Nó làm trơn ảnh (nghĩa là giảm nhiễu), và nó tính Laplace, điều này dẫn đến một ảnh có cạnh đôi. Định vị trí cạnh sau đó gom chúng lại bằng cách tìm những vị trí qua 0 giữa các cạnh đôi. Cú pháp chung để gọi phép dò LoG là [g, t] = edge(f, ‘log’, T, sigma) với sigma là độ lệch chuẩn và các tham số khác giống như phần giải thích trước đây. Giá trị mặc định của sigma là 2. Trước đó, edge bỏ qua bất kỳ cạnh nào không mạnh hơn T. Nếu T không được cho trước, hoặc để trống, [], edge chọn giá trị một cách tự động. Đặt T bằng 0 để tạo ra cạnh có các đường viền kín, một đặc trưng quen thuộc của phương pháp LoG. Phép dò Zero-Crossing Phép dò này dựa trên khái niệm tương tự như phương pháp LoG, nhưng hàm xoắn sử dụng một hàm lọc xác định gọi là hàm H. Cú pháp chung để gọi [g, t] = edge(f, ‘zerocross’, T, H) các thông số được giải thích như phép dò LoG. Phép dò Canny Phép dò Canny (Canny [1986]) là phép dò cạnh mạnh mẽ nhất được cung cấp bởi hàm edge. Phương pháp có thể được tóm tắt như sau: 1. Ảnh được làm trơn sử dụng phép lọc Gauss với độ lệch chuẩn xác định, σ, để giảm nhiễu. 2. Gradient cục bộ, , và hướng của cạnh, , được tính toán tại mỗi điểm. Bất kỳ kỹ thuật nào trong 3 kỹ thuật đầu tiên của bảng 1 đều có thể được sử dụng để tính G x và G y . Một điểm cạnh được định nghĩa là một cạnh có độ mạnh là cực đại địa phương trong hướng của gradient. 3. Các điểm cạnh được xác định trong (2) được đôn lên thành chóp trong ảnh độ lớn gradient. Thuật toán sau đó theo dấu dọc theo đỉnh của những chóp này và thiết lập bằng 0 tại tất cả những pixel mà nó không thật sự nằm trên đỉnh của chóp, vì thế nó sẽ đưa ra một đường mảnh ở kết quả xuất ra, quá trình này được gọi là “loại bỏ không cực đại” (“nonmaximal suppression”). Các pixel chóp sau đó được phân ngưỡng sử dụng 2 ngưỡng, T 1 và T 2 , với T 1 < T 2 . Những pixel chóp với giá trị lớn hơn T 2 được gọi là các pixel cạnh “mạnh”. Những pixel chóp với giá trị từ T 1 đến T 2 được gọi là các pixel cạnh “yếu”. 4. Cuối cùng, thuật toán biểu diễn liên kết cạnh bằng cách kết hợp những pixel yếu với những pixel mạnh trong lân cận 8. Cú pháp chung để gọi phép dò cạnh Canny [g, t] = edge(f, ‘canny’, T, sigma) với T là một vector, T = [T 1 , T 2 ], chứa 2 ngưỡng được giải thích ở bước 3 của thủ tục trên, và sigma là độ lệch chuẩn của hàm làm trơn. Nếu sử dụng t ở kết quả nhận được, nó sẽ là một vector với hai thành phần chứa giá trị của 2 ngưỡng được sử dụng bởi thuật toán. Giá trị mặc định của sigma là 1. Ví dụ 3: Trích xuất cạnh với phép dò Sobel Chúng ta có thể trích xuất và hiển thị các cạnh đứng trong một ảnh, f, của hình 6a, sử dụng lệnh sau: >> [gv, t] = edge (f, ‘sobel’, ‘vertical’); >> imshow (gv); >> t Như hình 6b cho thấy, các cạnh nổi bật trong kết quả là cạnh dọc (các cạnh nghiêng cũng có các thành phần đứng và ngang, do đó nó cũng được xác định khá tốt). Chúng ta có thể xóa các cạnh yếu bằng cách xác định một giá trị ngưỡng cao hơn. Ví dụ, hình 6c được tạo ra sử dụng lệnh >> gv = edge (f, ‘sobel’, 0.15, ‘vertical’); Sử dụng cùng giá trị T trong câu lệnh >> gboth = edge (f, ‘sobel’, 0.15); Kết quả trong hình 6d, hiện lên chủ yếu là các cạnh dọc và ngang. Hàm edge không tính được các cạnh Sobel ±45 0 . Để tính toán các cạnh như vậy chúng ta cần một mặt nạ đặc biệt sử dụng hàm imfilter. Ví dụ, hình 6e được tạo ra sử dụng các lệnh sau: >> w45 = [-2 -1 0; -1 0 1; 0 1 2]; >> g45 = imfilter (double(f), w45, ‘replicate’); >> T = 0.3*max (abs(g45(:))); [...]... này Cho một ma trận thưa S được tạo bởi bất kỳ dạng cú pháp nào, chúng ta có thể chuyển về dạng ma trận đầy đủ với cú pháp sau A = full(S) Để hiểu thêm về xác định đường dựa trên biến đổi Hough trong Matlab, trước tiên chúng ta phải viết một hàm, hough.m, để tính toán biến đổi Hough: function [h, theta, rho] = hough (f, dtheta, drho) %HOUGH biến đổi Hough %[H, THETA, RHO] = HOUGH (F, DTHETA, DRHO)... sử dụng các loại mô tả này dựa trên giả thiết rằng một mô hình kết quả mong muốn thì có hiệu quả cục bộ Việc minh họa các nét chính của vấn đề làm thế nào để phân đoạn vùng có thể được thực hiện trong MATLAB, chúng ta sẽ xây dựng một hàm, gọi là regiongrow, để thực hiện việc phát triển vùng cơ bản Cú pháp của hàm này là [g, NR, SI, TI] = regiongrow(f, S, T) với f là một ảnh sẽ được phân đoạn và tham... xác định kích thước của khối nhỏ nhất có thể phân giải; tham số này phải là một số nguyên không âm và là bội của 2 Hàm predicate là một hàm được định nghĩa bởi người dùng và phải bỏ trong đường dẫn của matlab Cú pháp là flag = predicate (region) Hàm này phải được viết lại sao cho nó trả về giá trị true (giá trị logic là 1) nếu các pixel trong vùng thỏa mãn điều kiện được định nghĩa trước bởi đoạn mã . luận về phương pháp hình thái học để phân đoạn được gọi là phân đoạn đường mức hình thái (watershed segmentation). Phương pháp này đặc biệt thú vị vì nó tạo ra các vùng được định nghĩa tốt, kín, xử. mặt nạ khi: -1 -1 -1 -1 8 -1 -1 -1 -1 Hình 1 với T là một ngưỡng không âm. Nhận diện điểm trong Matlab sử dụng hàm imfilter, với mặt nạ như hình 1 hoặc các mặt nạ tương tự khác. Yêu cầu quan trọng. đầy đủ với cú pháp sau A = full(S) Để hiểu thêm về xác định đường dựa trên biến đổi Hough trong Matlab, trước tiên chúng ta phải viết một hàm, hough.m, để tính toán biến đổi Hough: function [h,