Đề tài Xử lý ảnh các phương pháp dò biên

MỤC LỤC Lời nói đầu Chương I. TỔNG QUAN VỀ PHÂN TÍCH ẢNH 1.Khái quát về biên và phân loại các kỹ thuật dò biên 1.1. Khái niệm về biên 1.2. Phân loại các kỹ thuật phát hiện biên 2. Quá trình phát hiện biên Chương II. CÁC PHƯƠNG PHÁP DÒ BIÊN 1. Sự phân đoạn và dò biên 1.1. Thao tác vùng 1.2. Dò biên thô 1.3. Kết hợp các vùng 2. Các phương pháp dò biên cơ bản 2.1. Phép lấy đạo hàm bậc nhất cho phương pháp dò biên 2.2. Phương pháp dò biên Sobel 2.3. Phép toán được quan tâm khác 3. Dò bậc hai 3.1. Xác định cắt điểm không 3.2. Dò biên màu 4. Phương pháp dò biên Phương pháp dò biên Laplace 5. Phương pháp dò biên hình chóp(pyramid EDGE detection) 6. Crack edge relation(Tách giới hạn biên) 7. Kỹ thuật đạo hàm tích chập – phương pháp Canny 8. Dò biên theo quy hoach động 8.1. Mô tả phương pháp 8.2. Thuật toán 9. Một số thuật toán khác

pdf53 trang | Chia sẻ: lvcdongnoi | Lượt xem: 9186 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đề tài Xử lý ảnh các phương pháp dò biên, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ủa ảnh là điểm có sự biến đổi đột ngột về độ xám. THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M Như vậy, phát hiện biên một cách lý tưởng là xác định được tất cả cả các đường bao trong đối tượng. Đị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 mức xám giữa các điểm ảnh trong một vùng thường là nhỏ, trong khi đó biến thiên mức xám của điểm giáp ranh lại khá hơn. 1.2. Phân loại các kỹ thuật phát hiện biên Xuất phát từ định nghĩa toán học của biên 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 biên dựa vào sự biến thiên về giá trị độ sáng của điểm ảnh.Kỹ thuật chủ yếu dùng phát hiện biên ở đây là 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 hai, ta có phương pháp Laplace.Hai kỹ thuật trên gọi là phương pháp dò biên cục bộ.Ngoài ra, người ta cũng sử dụng phương pháp “đi theo đường bao” : dựa vào nguyên lý quy hoạch động và được gọi là phương pháp dò biên tổng thể. - Phương pháp phát hiện biên gián tiếp: Bằng cách nào đó, ta phân được ảnh thành các vùng thì đường phân ranh giữa các vùng đó chính là biên.Việc phân vùng ảnh thường dựa vào kết cấu bề mặt ảnh. Kỹ thuật dò biên và phân vùng ảnh là hai bài toán đối ngẫu của nhau.Thực vậy, dò biên để thực hiện phân lớp đối tượng và một khi đã phân lớp xong có nghĩa là đã phân vùng được ảnh.Và ngược lại, khi đã phân vùng, ảnh đã phân lập được thành các đối tượng, ta có thể phát hiện được biên.Phương pháp dò biên trực tiếp tỏ ra khá hiệu quả vì ít chịu ảnh hưởng của nhiễu.Nếu biến đổi gián tiếp tuy khó cài đặt, song lại áp dụng khá tốt khi sự biến thiên độ sáng nhỏ. 2.Quá trình phát hiện biên -Vì ảnh thu nhận thường có nhiễu nên bước đầu tiên là khử nhiễu. -Tiếp theo là tiến hành làm nổi biên bởi các toán tử đạo hàm. THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M - Định vị điểm biên.Vì các kỹ thuật làm nổi biên có hiệu ứng phụ là tăng nhiễu, do vậy sẽ có một điểm biên giả cần bị loại bỏ. -Liên kết và trích chọn biên. Chương II.Các phương pháp dò biên 1.Sự phân đoạn và dò biên 1.1.Thao tác vùng Việc khám phá các vùng có thể là một việc rất đơn giản ,như được minh hoạ trong mục 1.1.1.tuy nhiên thường không nhiều hơn ,những vùng được yêu cầu mà bao trùm một vùng thật của ảnh hơn là mổh nhóm các diểm ảnh. 1.2.Dò biên thô Sử dụng: xem xét một hình ảnh như là một tập hợp các vùng . thuật toán:dò biên thô không phải là một phương pháp phức tạp .những vùng đơn giản được xác định như vùng các điểm cùng mức xám , đường biên của các vùng là tách những điểm ảnh hơn tại vị trí điểm. như việc dò một vùng có thể đưa ra một số các vùng hữu ích (trừ khi số các mức xám là tương đối nhỏ ).như vậy một phương pháp đơn giản là nhóm lại những điểm ảnh vào trong hững phạm vi của những giá trị gần (q hoặc tự nhóm).các vùng(miền) có thể là việc xem xét các biểu đồ hình ảnh để xác định tốt sự tự nhhóm cho mục đích vùng kết quả trong việc kết hợp toàn bộ mức xám vùng cơ sở nhiều hơn các mức xám của điểm ảnh mà nó gần với một vùng khác . 1.3. Kết hợp các vùng Việc kết hợp các vùng là rất hữu ích cho việc tách thô các mức xám và thực hiện một số kỹ thuật trên những vết rạn giữa những vùng_không làm tăng biên nhưng để THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN xác định khi toàn bộ các vùng cần phải nối (kết hợp_-như vậy làm giảm số các vùng từ việc tìm vùng thô ở trên . 2. Các phương pháp dò biên cơ bản Biên của một hình ảnh giữ nhiều thông tin trong hình ảnh đó .các biên cho biết các đối tượng ở đâu ,hình dạng và kích thước của đối tượng,và cái gì đó để kết cấu của đối tượng .biên là nơi cương độ của một hình ảnh di chuyển từ một giá trị thấp đến giá trị cao. Rất nhiều các ứng dụng cho phương pháp dò biên ,mà được sử dụng cho một số hiệu ứng đặc biệt .những nghệ sỹ kỹ thuật số sử dụng nó để làm rõ nét các đường nét của hình ảnh .kết quả của việc dò biên có thể đưa thêm vào hình ảnh để làm nổi bật các đường biên. Biên trong ảnh là những vùng có cường độ tương phản mạnh, một bước nhảy từ điểm ảnh tới điểm ảnh kế tiếp.Dò biên một ảnh giúp giảm đáng kể số lượng và lọc ra những thông tin không hữu ích, trong khi đó bảo quản được các thuộc tính cấu trúc của ảnh.Có rất nhiều cách thực hiện dò biên.Tuy nhiên các phương pháp chính khác nhau có thể được nhóm vào thành hai loại, Gradient và Laplacian.Phương pháp Gradient dò biên bằng cách tìm kiếm giá trị lớn nhất và giá trị nhỏ nhất trong đạo hàm bậc nhất của ảnh.Phương pháp Laplace tìm kiếm các vạch không trong đạo hàm bậc hai của ảnh để tìm biên.Biên có dạng một chiều và tính toán đạo hàm của ảnh có thể làm nổi vị trí đó.Chúng ta có thể sử dụng kí hiệu f(t) sau với biên chỉ ra bước nhảy của cường độ bên dưới: Nếu ta lấy gradient của kí hiệu này ở dạng một chiều, chỉ ra đạo hàm bậc một của biến t, ta nhận được: Rõ ràng đạo hàm bậc một cho xác định giá trị lớn nhất tại tâm của biên.Phương pháp xác định biên này là đặc trưng của nhóm lọc gradient nếu giá trị của gradient vượt quá vài ngưỡng.Như đã đề cập, biên sẽ có giá trị cường độ điểm ảnh cao hơn so với các vùng khác.Nên mỗi lần, một ngưỡng được đặt, ta có thể so sánh giá trị gradient với giá trị một ngưỡng và dò biên khi mà ngưỡng được mở rộng.Hơn nữa khi mà đạo hàm bậc nhất đạt giá trị lớn nhất, đạo hàm bậc hai bằng 0.Một cách khác để tìm ra vị trí của biên là xác định các giá trị 0 của đạo hàm bậc hai của hàm bên dưới: Phương pháp dò biên thường bước đầu tiên là việc phân vùng hình ảnh .phân vùng ảnh là một lĩnh vực của phân tích ảnh , được sử dụng đểvnhóm những điểm vào trong các vùng để xác định thành phần cấu tạo một ảnh . một ví dụ phổ biến của phân vùng ảnh là”magic wand”( đũa thần ma thuật )công cụ phần mền trong xử lý ảnh .công cụ này cho phép người dùng lựa chọn một diểm trong một hình ảnh .phần mền này vẽ một đường bao quanh những điểm có giá trị giống nhau.người dùng có thể lựa chọn một diểm trong vùng bầu trời và đuã thần ma thuật sẽ vẽ một đường bao kín vùng bầu trời trong ảnh .người dùng có thể sửa đổi màu của vùng trời mà không gây ra sự biến đổi màu cắc các dãy núi hoặc bất cứ phần nào có mặt trong hình ảnh . phương pháp dò biên cũng sử dụng đăng ký (registration) ảnh .việc đăng ký hình ảnh sắp thẳng hàng hai hình ảnh mà có thể thu đựoc tại các phần mền riêng biệt hoặt từ những phân tử nhảy khác nhau. roof edge line edge step edge ramp edge Hình1.1 Một số đường biên khác nhau. K IL O BO O K S. CO M Có rất nhiều các kiểu biên,về chiều và hình dạng (hình1.1).Một số biên là đường thẳng trong khi những biên khác được uốn cong bằng việc thay đổi giá trị radian.có rất nhiều phương pháp dò biên sử dụng tất cả ngững đường biên trên,từng cái có những điểm mạnh của riêng nó .một vài phương pháp dò biêncó thể sử dụng tốt trong một số ứng dụng và thực hiện kém (không hiệu quả)trong ứng dụng khác. Đôi khi nó được sử dụng thí nghiệm để xác định đâu là phương pháp dò biên tốt nhất cho một ứng dụng. Phương pháp dò biên đơn giản nhất và nhanh nhất là xác định giá trị cực đằit một loạt các phép thuần nhất (đồng nhất)trừ điểm ảnh.phép toán trừ mỗi 8 điểm ảnh phụ cận (vây quanh)từ một điểm trung tâm của một cửa sổ 3x3 trong hình 1.2 đầu ra của phép toán là giá trị tuyệt đối cực đại của mỗi phần khác nhau. homogenety operator image 11 11 11 11 1216 16 13 15 Phép toán đồng nhất ảnh Hình 1.2 sử dụng các thuật toán đồng nhất. THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M điểm ảnh mới=max{|11-11|,|11-13|,|11-15|,|11-16|,|11-11|,|11-16|,|11-12|,|11-11|}=5 Tương tự thuật toán thuần nhất là thiết bị dò biên khác .các thao tác của nó nhanh hơn bởi vì nó chỉ phụ thuộc vào 4 phép trừ mỗi điểm ảnh khác với thuật toán thuần nhất cần 8 phép trừ.các phép trừ là phần trên trái -phần dưới phải,giữa trái -giữa phải ,dưới trái –trên phải ,và giá trị giữa trên-giá trị dưới ở giữa(hình1.3) homogenety operator image 11 11 11 11 1216 16 13 15 Thuật toán thuần nhất ảnh Hình 1.3 Sử dụng thuật toán khác. điểm ảnh mới=max{|11-11|,|13-12|,|15-16|,|11-16|}=5 2.1. Phép lấy đạo hàm bậc nhất cho phương pháp dò biên. Nếu chúng ta đang tìm kiếm mọi đường biên nằm ngang nào nó sẽ nhận được tính toán sự khác nhau giữa một giá trị điểm và giá trị điểm tiếp theo,hoặc lên trên hoặc xuống từ đầu(được gọi là sự tách khác nhau)ví dụ giả thiết đỉnh trái gốc. THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M Hc=yk(x,y)=(x,y)-(x,y+1) trên thực tế nó tương đương với việc thu nhỏ hình với mẫu 2x1 1 -1 Tương tự Hr=Xk(x,y)=(x,y)-(x-1,y) Sử dụng kết quả -1 1 Hc và Hr là các giá trị xác định cột và dòng. Đôi khi nó rất tiện lợi để phát hoạ cả Xk và Yk việc kết hợp chúng tạo nên độ lớn gradien(ví dụ cường độ của biên).việc kết hợp chúng bằng việc gộp hoàn toàn chúng có thể cho giá trị trung bình hai biên loại bỏ ngoài lẫn nhau(một là xác thực,một là không xác thực),vì vậy nó là tốt nhất cho việc tính tổng các giá trị thực(không cần quan tâm đến dấu )hoặc tính tông các bình phương của nó và khi đó có thể lấy căn bậc hai bình phương của kết quả thu được . Nó cũng chia Xk bởi Yk và xác định một chiều gradien(góc của biên ở giữa các vùng):       = − y)ce(x,X_differen y)ce(x,Y_differen tanirectiongradient_d 1 Độ lớn có thể tính bằng tổng vectơ Hc và Hr: )y,x(H)y,x(H)y,x(H 2c2r += THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M Đôi khi cho việc tính toán đơn giản , độ lớn được tính là: )y,x(H)y,x(H)y,x(H cr += Việc định hướng biên có thể tìm bởi ( ) ( )y,xH y,xH tan r c1− =θ trong hình ảnh thực tế ,các hàng ít khi được định nghĩa tốt như vậy,thường thì sự thay đổi giữa các vùng là từ từvà sặc sỡ hơn. Hình ảnh sau đây là điển hình việc đọc biên.mẫu này đã càn để tính tỷung bình gradien thông qua một số các điểm ảnh ,hơn là việc tính toán với hai con số 3444332100 2342334010 3333433100 3233430200 2420001000 3302000000 Các toán tử đạo hàm được áp dụng khá nhiều. Ở đây ta chỉ xét một số toán tử tiêu biểu: Robert, Sobel,… 2.2. Phương pháp dò biên Sobel Toán tử sobel nhạy cảm với các biên chéo hơn so với các biên thẳng đứng và các biên nằm ngang.chuẩn sobel 3x3 thương đựoc sử dụng như: X THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M 121 000 121 −−− Y 101 202 101 − − − ảnh gốc : 3444332100 2342334010 3333433100 3233420200 2420001000 3302000000 |A|+|B| 8842212122 42421014104 061216201086 414121410464 giới hạn tại 12 0000110 00000100 00111002 11110000 THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN Dựa trên phân tích một chiều, lý thuyết này có thể được áp dụng vào trường hợp hai chiều, tính toán được chính xác xấp xỉ đạo hàm ảnh hai chiều.Toán tử Sobel thực hiện phép đo gradient không gian hai chiều trong một ảnh. Điển hình nó được sử dụng tìm ra giá trị tuyệt đối xấp xỉ độ rộng gradient tại mỗi điểm trong độ xám ảnh đầu vào.Phương pháp dò biên Sobel sử dụng cặp mặt nạ xoắn 3X3, ước lượng gradient theo cột x, hàng y.Một mặt nạ xoắn thường nhỏ hơn nhiều so với ảnh thực.Mặt nạ là slide trên ảnh, thao tác thực hiện các điểm ảnh trên cùng một lúc.Mặt nạ Sobel được chỉ ra ở hình dưới. Độ dài đường dốc được tính bởi công thức: Tính xấp xỉ: K IL O BO O K S. CO M |G| = |Gx| + |Gy| Mã của phương pháp dò biên Sobel : FILE: edgeSob.c - WORKS!! AUTH: Bill Green DESC: 2 3x3 Sobel masks for edge detection DATE: 07/23/02 REFS: edgeLap.c */ #include #include #include #include /*-------STRUCTURES---------*/ typedef struct {int rows; int cols; unsigned char* data;} sImage; /*-------PROTOTYPES---------*/ long getImageInfo(FILE*, long, int); void copyImageInfo(FILE* inputFile, FILE* outputFile); void copyColorTable(FILE* inputFile, FILE* outputFile, int nColors); int main(int argc, char* argv[]) { FILE *bmpInput, *bmpOutput; THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M sImage originalImage; sImage edgeImage; unsigned int X, Y; int I, J; long sumX, sumY; int nColors, SUM; unsigned long vectorSize; unsigned long fileSize; int GX[3][3]; int GY[3][3]; unsigned char *pChar, someChar; unsigned int row, col; someChar = '0'; pChar = &someChar; /* 3x3 GX Sobel mask. Ref: www.cee.hw.ac.uk/hipr/html/sobel.html */ GX[0][0] = -1; GX[0][1] = 0; GX[0][2] = 1; GX[1][0] = -2; GX[1][1] = 0; GX[1][2] = 2; GX[2][0] = -1; GX[2][1] = 0; GX[2][2] = 1; /* 3x3 GY Sobel mask. Ref: www.cee.hw.ac.uk/hipr/html/sobel.html */ GY[0][0] = 1; GY[0][1] = 2; GY[0][2] = 1; GY[1][0] = 0; GY[1][1] = 0; GY[1][2] = 0; GY[2][0] = -1; GY[2][1] = -2; GY[2][2] = -1; if(argc < 2) { printf("Usage: %s bmpInput.bmp\n", argv[0]); exit(0); THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M }; printf("Reading filename %s\n", argv[1]); /*-------DECLARE INPUT & OUTPUT FILES-------*/ bmpInput = fopen(argv[1], "rb"); bmpOutput = fopen("edgeSob.bmp", "wb"); /*---SET POINTER TO BEGINNING OF FILE----*/ fseek(bmpInput, 0L, SEEK_END); /*-------GET INPUT BMP DATA--------*/ fileSize = getImageInfo(bmpInput, 2, 4); originalImage.cols = (int)getImageInfo(bmpInput, 18, 4); originalImage.rows = (int)getImageInfo(bmpInput, 22, 4); edgeImage.rows = originalImage.rows; edgeImage.cols = originalImage.cols; /*--------PRINT DATA TO SCREEN----------*/ printf("Width: %d\n", originalImage.cols); printf("Height: %d\n", originalImage.rows); printf("File size: %lu\n", fileSize); nColors = (int)getImageInfo(bmpInput, 46, 4); printf("nColors: %d\n", nColors); /*------ALLOCATE MEMORY FOR FILES--------*/ vectorSize = fileSize - (14+40+4*nColors); printf("vectorSize: %lu\n", vectorSize); THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M edgeImage.data = farmalloc(vectorSize*sizeof(unsigned char)); if(edgeImage.data == NULL) { printf("Failed to malloc edgeImage.data\n"); exit(0); } printf("%lu bytes malloc'ed for edgeImage.data\n", vectorSize); originalImage.data = farmalloc(vectorSize*sizeof(unsigned char)); if(originalImage.data == NULL) { printf("Failed to malloc originalImage.data\n"); exit(0); } printf("%lu bytes malloc'ed for originalImage.datt\n", vectorSize); /*------COPY HEADER AND COLOR TABLE---------*/ copyImageInfo(bmpInput, bmpOutput); copyColorTable(bmpInput, bmpOutput, nColors); fseek(bmpInput, (14+40+4*nColors), SEEK_SET); fseek(bmpOutput, (14+40+4*nColors), SEEK_SET); /* Read input.bmp and store it's raster data into originalImage.data */ for(row=0; row<=originalImage.rows-1; row++) { for(col=0; col<=originalImage.cols-1; col++) { fread(pChar, sizeof(char), 1, bmpInput); *(originalImage.data + row*originalImage.cols + col) = *pChar; } } THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M /*--------------------------------------------------- SOBEL ALGORITHM STARTS HERE ---------------------------------------------------*/ for(Y=0; Y<=(originalImage.rows-1); Y++) { for(X=0; X<=(originalImage.cols-1); X++) { sumX = 0; sumY = 0; /* image boundaries */ if(Y==0 || Y==originalImage.rows-1) SUM = 0; else if(X==0 || X==originalImage.cols-1) SUM = 0; /* Convolution starts here */ else { /*-------X GRADIENT APPR XIMATION------*/ for(I=-1; I<=1; I++) { for(J=-1; J<=1; J++) { sumX = sumX + (int)( (*(originalImage.data + X + I + (Y + J)*originalImage.cols)) * GX[I+1][J+1]); } } if(sumX>255) sumX=255; if(sumX<0) sumX=0; /*-------Y GRADIENT APPROXIMATION-------*/ THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M for(I=-1; I<=1; I++) { for(J=-1; J<=1; J++) { sumY = sumY + (int)( (*(originalImage.data + X + I + (Y + J)*originalImage.cols)) * GY[I+1][J+1]); } } if(sumY>255) sumY=255; if(sumY<0) sumY=0; SUM = abs(sumX) + abs(sumY); /*---GRADIENT MAGNITUDE APPROXIMATION (Myler p.218)----*/ } *(edgeImage.data + X + Y*originalImage.cols) = 255 - (unsigned char)(SUM); /* make edges black and background white */ fwrite( (edgeImage.data + X + Y*originalImage.cols), sizeof(char), 1, bmpOutput); } } printf("See edgeSob.bmp for results\n"); fclose(bmpInput); fclose(bmpOutput); farfree(edgeImage.data); /* Finished with edgeImage.data */ farfree(originalImage.data); /* Finished with originalImage.data */ return 0; } THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M /*----------GET IMAGE INFO SUBPROGRAM--------------*/ long getImageInfo(FILE* inputFile, long offset, int numberOfChars) { unsigned char *ptrC; long value = 0L; unsigned char dummy; int i; dummy = '0'; ptrC = &dummy; fseek(inputFile, offset, SEEK_SET); for(i=1; i<=numberOfChars; i++) { fread(ptrC, sizeof(char), 1, inputFile); /* calculate value based on adding bytes */ value = (long)(value + (*ptrC)*(pow(256, (i-1)))); } return(value); } /* end of getImageInfo */ /*-------------COPIES HEADER AND INFO HEADER----------------*/ void copyImageInfo(FILE* inputFile, FILE* outputFile) { unsigned char *ptrC; unsigned char dummy; THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M int i; dummy = '0'; ptrC = &dummy; fseek(inputFile, 0L, SEEK_SET); fseek(outputFile, 0L, SEEK_SET); for(i=0; i<=50; i++) { fread(ptrC, sizeof(char), 1, inputFile); fwrite(ptrC, sizeof(char), 1, outputFile); } } /*----------------COPIES COLOR TABLE-----------------------------*/ void copyColorTable(FILE* inputFile, FILE* outputFile, int nColors) { unsigned char *ptrC; unsigned char dummy; int i; dummy = '0'; ptrC = &dummy; fseek(inputFile, 54L, SEEK_SET); fseek(outputFile, 54L, SEEK_SET); THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M for(i=0; i<=(4*nColors); i++) /* there are (4*nColors) bytesin color table */ { fread(ptrC, sizeof(char), 1, inputFile); fwrite(ptrC, sizeof(char), 1, outputFile); } } Giải thích Sobel: Mặt nạ Sobel được phủ trên một vùng của ảnh vào, thay đổi giá trị của điểm ảnh và sau đó chuyển đổi ảnh sang phải và tiếp tục sang phải cho đến khi nó tìm ra vị trí cuối cùng của hàng.Sau đó nó lại bắt đầu tại vị trí đầu của hàng kế tiếp.Ví dụ dưới đây chỉ ra mặt nạ được phủ trên vùng trái phía đầu của ảnh và hiển thị bởi đường màu xanh.Phương thức đó chỉ ra một điểm ảnh sẽ được tính toán.Tâm của mặt nạ được xác định trên một điểm ảnh ta đang thao tác trên ảnh.Giá trị I và J được sử dụng để chuyển file con trỏ. Ví dụ: ảnh 22 tương ứng giá trị mặt nạ m22. Chú ý rằng các điểm ảnh ở hàng đầu tiên và cuối cùng cũng như cột cuối cùng không thể được thực hiện bởi mặt nạ 3X3.Bởi vì khi xác định điểm giữa của mặt nạ trên một điểm ảnh ví dụ ở hàng đầu tiên, mặt nạ sẽ ở bên ngoài viền ảnh. THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN Mặt nạ GX làm nổi biên theo hướng nằm ngang .Trong khi mặt nạ GY làm nổi biên theo hướng thẳng đứng.Sau khi xác định độ lớn của cả 2, kết quả dò biên theo cả 2 hướng được đưa ra. 2.3 Phép toán được quan tâm khác : Toán tử Roberts có hiểu quả nhỏ hơn so với các thuật toán khác ,nó dễ tạo ra các tạp nhiễu.          − =           − = 000 010 001 H 000 010 100 H cr Thuật toán Prewit nhạy cảm đối với các biên thẳng đứng và ngang hơn so với các biên đường chéo.           − − − =           −−− = 101 101 101 H 111 000 111 H cr K IL O BO O K S. CO M mặy nạ Frei-chen.           −−− =           − − = 121 000 121 H 100 202 100 H cr 3. Dò bậc hai Trong nhiều ứng dụng ,chiều rông biên không được quan tâm đến .trong những ứng dụng khác ,như các thiết bị dò tìm ,nó khá được chú trọng đến .thuật toán gradien đã nói ở trên đã giải đáp giữa hai vẫn đề trên tại vùng mà biên đang xét .nó là tốt nhất cho việc xây dựng dần các đường biên gốc . đúng như ý tưởng ,việc tìm một đường biên cần phải chỉ ra mọi đường biên tại trung tâm của một biên . được đề cập ở đây là sự định vị .nếu việc xác định một biên tạo ra một bản đồ hình ảnh với các biên khác nhau mở rộng các điểm ảnh ,nó là khó khăn để định vị các trung tâm của các biên .nó trở thành cần thiết để mượn một tiến trình nghèo nàn để làm bớt bề rộng của biên tới một điểm ảnh .phần này cung cấp tốt hơn sự định vị biên . Ví dụ: Một hình ảnh như sau: 987654321 987654321 987654321 987654321 987654321 Toán tử cơ bản Sobel dò biên thẳng đứng như miêu tả ở trên sẽ nhượng bộ một giá trị đúng kéo dài từ bên này sang bên kia hình ảnh.Ví dụ nếu: THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M 101 202 101 − − − được sử dụng thì kết quả là: 8888888 8888888 8888888 Thực hiện giống như chuẩn trên đây “tất cả 8 hình ảnh đã nhượng bộ “. 00000000 Nó không khác như các thuật toán khác với một đường thẳng ,ví dụ nếu y=3x-2 2 2 dx yd and3 dx dy = Một lần chúng ta có đường dốc ,nếu đường dốc đã được phân biệt và kết quả là không ,nó chỉ ra rằng đường gốc là đường thẳng . Các hình ảnh thường là màu xám mức”khuynh hướng”với chúng ,…một mặt các vùng là sáng hơn các vùng khác ,nhưng ở đó không có biên nào sẽ được tim ta trong vùng ,hiệu ứng đánh bóng là trơn tru,nói ngắn gọn một nguồn sáng mà nó là rõ ràng hơn ở thời điểm kết thúc ,hoặc thay đổi màu dần dần qua bề mặt. điểm thuận lợi khác của phương pháp lấy đạo hàm bậc hai là dò các viền biên là những đường cong khép kín . điều này rất quan trọng trong việc phân đoạn hình ảnh .ngoài ra,nó không phản ứng lại các vùng của sự thay đổi tuyến tính smoot trong cường độ . THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M kỹ thuật Laplace là một thí dụ trong kỹ thuật lấy đạo hàm bậc hai .nó tương đối như những toán tử khác bởi vì nó tác dụng theo mọi hướng .nó sẽ tô sáng điểm biên trong tất cả các hướng .toán tử laplace sẽ đưa ra các biên không chuẩn xác hơn ( sharper)so với đa số các kỹ thuật khác .các vùng sáng bao gồm giá trị dương và âm của cường độ dốc(slope). Biên laplace của một ảnh có thể tìm được bởi kết hợp với các mặt nạ như : 010 141 010 − −− − or 111 181 111 −−− −− −−− Tập hợp các toán tử laplace được sử dụng rông rãi .nó có hiệu quả loại bỏ gradient tổng quát của ánh sáng hoặc màu từ một hình ảnh nó chỉ tìm ra và tăng sự thay đổi rời rạc (chậm)hơn,cho thí dụ ,với toán tử sobel.nó không đưa ra mọi thông tin trên hướng mà nó xem xét như một chức năng của sự dân dân thay đổi .nó làm tăng tạp nhiễu ,mặc dù các toán tử laplace lớn hơn và những họ tương đồng của các toán tử có khuynh hướng lờ đi tạp nhiễu . 3.1. Xác định cắt điểm không Đối với biên đang xét phương thức của việc cắt điểm không với một vài yêu cầu giới hạn là thông qua một mặt nạ 3x3 qua hình ảnh mà đang xác định giá trị max và min.nếu sự khác nhau giữa các giá trị max và min vượt quá giới hạn định đã cho trước .thông báo số lớn các biên với giới hạn nhỏ hơn.chú ý chiều rộng của tất cả các biên là một điểm ảnh mở rộng . một kỹ thuật dò biên lấy đạo hàm bậc hai là ít nhạy cảm với nhiễu là laplace của gauss(log).dò biên LoG do gauss thực hiện làm nhẵn trước ứng dụng của Laplace.cả hai toán tử có thể thực hiện bằng việc hợp với một mặt nạ của biểu mẫu: 2 22 2 )y(x 2 22 4 e2 yx11y)LoG(x, σ +−       σ + − piσ = THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN ở đây x,y đang xét là các dòng và cột của một hình ảnh ,0 là một giá trị của sự tán sắc mà các điều khiển có kết quả spread. Do hình dạng của nó ,hàm này được gọi là lọc .hình biểu diễn đoạn của toán tử dò biên LoG với các giá trị khác nhau của o .hàm được mở rộng hơn ,biên mở rộng mà nó sẽ tìm được.thu hẹp một hàm sẽ tìm được hình dạng và các chi tiết các biên hơn. Hình 1.4 Giao của LoG với giá trị Giá trị lớn hơn của 0, mở rộng sự xoắn lại mặt nạ cần thiết .cắt điểm không đầu tiên của hàm LoG tại σ2 .The width of the positive center lobe is twice that. để có một cuộn mặt nạ mà chứa đựng nhứng giá trị khác không của hàmLoG yêu cầu chiều rộng bằng ba lần chiều rộng của vành dương trung tâm. Phương pháp dò biên dựa trên hàm nhẵn gauss nhằm giảm bớt tạo nhiễu trong hình ảnh .nó sẽ làm giảm bớt đi các biên đã tìm không đúng và cũng tìm được các biên mơ rộng . Đa số các mặt nạ dò biên ít khi lớn hơn 7x7 .vì hình dạng của thuật toán LoG ,nó yêu cầu nhiều mặt nạ kích thước lớn hơn .ban đầu phản đối (work in)sự phát triển thuật toán log dã làm việc với một mặt nạ kích thước 35x35. bởi vì những yêu cầu tính toán lớn của thuật toán log ,thuật toán khác của gauss (dog)có thể sử dụng như một phép tính xấp xỉ cho log.dog có thể được cho: 2 2 2 yx 2 1 2 yx 2 e 2 ey)DoG(x, 2 2 22 2 1 22 piσ − piσ =         piσ + −         piσ + − Thuật toán dog đựoc thưc hiện bởi phép quẫn lại một hình ảnh với một mặt nạ bằng kết quả của phép trừ hai mặt nạ gauss với các giá trị khác nhau.kết qua tỷ số  1/ 2 = 1.6 thu được trong phép tính xấp xỉ của LoG.Hình 4.5 so sánh hàm LoG ( = 12.35) với hàm DoG (1 = 10, 2 = 16). Hình 1.5 Hàm LoG và hàm DoG. Một thuận lợi của DoG là khả năng định rõ bề rộng của các biên để dò tìm bằng các giá trị khác nhau của và . ở đây xé một hai cặp mặt nạ .mạt nạ 9x9 sẽ tìm được các biên rộng hơn mặt nạ 7x7. Mặt nạ7x7, K IL O BO O K S. CO M0011100 0233320 1355531 13516531 1355531 0233320 0011100 −−− −−−−− −−−− −−−− −−−− −−−−− −−− Mặt nạ 9x9, 000111000 022333320 033111230 131999131 1319199131 131999131 033111230 022333320 000111000 −−− −−−−−−− −−−−−−− −−−−−− −−−−−− −−−−−− −−−−−−− −−−−−−− −−− 3.2. Dò biên màu Phương thức của sự dò tìm các biên trong ảnh màu phụ thuộc vào việc định nghĩa biên của bạn . định nghĩa một biên là gián đoạn (tính không liên tục ) độ chói trong một hình ảnh . đò biên sẽ được thực hiện trê kênh cường độ của một màu trong không gian HIS. định nghĩa khác đòi hỏi rằng một biên tồn tại nếu có mặt kênh màu đỏ ,xanh lục và xanh.dò biên có thể được làm bằng việc thực hiện trên mỗi màu thành phần của nó ,sau đó phối hợp các màu thành phần ,hình ảnh thu được màu vẫn giữ nguyên (still color).xem hình 1.6. THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN Hình 1.6(a)hình ảnh gốc ;(b)kênh màu đỏ ;(c)kênh màu xanh lục;(d) kênh màu xanh;(e)biên kênh màu đỏ;(e)Biên kênh màu xanh lục ;(e)biên kênh màu xanh. Dò biên cũng có thể thực hiện trên mỗi phần màu và các thành phần có thể được tổng hợp lại đẻ tạo ra một bản đồ biên dải màu xám .ngoài ra ,các thành phần màu có thể là tổng các vec to để tạo ra bản đồ biên dải màu xám. 2 blue 2 green 2 red GGGy)G(x, ++= Nó đã được chỉ ra rằng phần lớn các biên dựa trên các phân tử màu của một hình ảnh ngoài ra cũng dựa trên thành phần cường độ . 4. Phương pháp dò biên Phương pháp dò biên Laplace. Ma trận Laplace 5 X 5 được sử dụng trong một mặt nạ xoắn để xấp xỉ đạo hàm bậc hai.Không giống phương pháp Sobel xấp xỉ đường dốc, thay thế cho hai mặt nạ Sobel 3 X 3 theo hướng x và y.Laplace sử dụng một mặt nạ 5 X 5 cho đạo hàm bậc hai trong cả hướng x và y.Tuy nhiên bởi vì những mặt nạ này xấp xỉ phép đo đạo hàm bậc hai trên ảnh.Chúng rất dễ bị hỏng, gây nhiễu. Đây được xem như so sánh với phương pháp Sobel.Mặt nạ Laplace và mã dưới đây: /* FILE: edgeLap.c - WORKS! AUTH: P.Oh DESC: 5x5 Laplace mask for edge detection DATE: 05/02/02 23:30 REFS: edgedeta.c K IL O BO O K S. CO M */ #include #include #include #include /*-------STRUCTURES---------*/ typedef struct {int rows; int cols; unsigned char* data;} sImage; /*-------PROTOTYPES---------*/ long getImageInfo(FILE*, long, int); void copyImageInfo(FILE* inputFile, FILE* outputFile); void copyColorTable(FILE* inputFile, FILE* outputFile, int nColors); int main(int argc, char* argv[]) { FILE *bmpInput, *bmpOutput; sImage originalImage; sImage edgeImage; unsigned int X, Y; int I, J; long SUM; int nColors; unsigned long vectorSize; unsigned long fileSize; int MASK[5][5]; unsigned char *pChar, someChar; THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M unsigned int row, col; someChar = '0'; pChar = &someChar; /* 5x5 Laplace mask. Ref: Mysler Handbook p. 135 */ MASK[0][0] = -1; MASK[0][1] = -1; MASK[0][2] = -1; ASK[0][3] = -1; MASK[0][4] = -1; MASK[1][0] = -1; MASK[1][1] = -1; MASK[1][2] = -1; MASK[1][3] = -1; MASK[1][4] = -1; MASK[2][0] = -1; MASK[2][1] = -1; MASK[2][2] = 24; MASK[2][3] = -1; MASK[2][4] = -1; MASK[3][0] = -1; MASK[3][1] = -1; MASK[3][2] = -1; MASK[3][3] = -1; MASK[3][4] = -1; MASK[4][0] = -1; MASK[4][1] = -1; MASK[4][2] = -1; MASK[4][3] = -1; MASK[4][4] = -1; if(argc < 2) { printf("Usage: %s bmpInput.bmp\n", argv[0]); exit(0); }; printf("Reading filename %s\n", argv[1]); /* open files for reading and writing to */ bmpInput = fopen(argv[1], "rb"); bmpOutput = fopen("edgeLap.bmp", "wb"); /* start pointer at beginning of file */ fseek(bmpInput, 0L, SEEK_END); THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M /* retrieve and print filesize and number of cols and rows */ fileSize = getImageInfo(bmpInput, 2, 4); originalImage.cols = (int)getImageInfo(bmpInput, 18, 4); originalImage.rows = (int)getImageInfo(bmpInput, 22, 4); edgeImage.rows = originalImage.rows; edgeImage.cols = originalImage.cols; printf("Width: %d\n", originalImage.cols); printf("Height: %d\n", originalImage.rows); printf("File size: %lu\n", fileSize); /* retrieve and print Number of colors */ nColors = (int)getImageInfo(bmpInput, 46, 4); printf("nColors: %d\n", nColors); vectorSize = fileSize - (14+40+4*nColors); printf("vectorSize: %lu\n", vectorSize); edgeImage.data = farmalloc(vectorSize*sizeof(unsigned char)); if(edgeImage.data == NULL) { printf("Failed to malloc edgeImage.data\n"); exit(0); } printf("%lu bytes malloc'ed for edgeImage.data\n", vectorSize); originalImage.data = farmalloc(vectorSize*sizeof(unsigned char)); if(originalImage.data == NULL) { printf("Failed to malloc originalImage.data\n"); THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M exit(0); } printf("%lu bytes malloc'ed for originalImage.datt\n", vectorSize); copyImageInfo(bmpInput, bmpOutput); copyColorTable(bmpInput, bmpOutput, nColors); fseek(bmpInput, (14+40+4*nColors), SEEK_SET); fseek(bmpOutput, (14+40+4*nColors), SEEK_SET); /* Read input.bmp and store it's raster data into originalImage.data */ for(row=0; row<=originalImage.rows-1; row++) { for(col=0; col<=originalImage.cols-1; col++) { fread(pChar, sizeof(char), 1, bmpInput); *(originalImage.data + row*originalImage.cols + col) = *pChar; } } for(Y=0; Y<=(originalImage.rows-1); Y++) { for(X=0; X<=(originalImage.cols-1); X++) { SUM = 0; /* image boundaries */ if(Y==0 || Y==1 || Y==originalImage.rows-2 || Y==originalImage.rows-1) SUM = 0; else if(X==0 || X==1 || X==originalImage.cols-2 || X==originalImage.cols- 1) SUM = 0; THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M /* Convolution starts here */ else { for(I=-2; I<=2; I++) { for(J=-2; J<=2; J++) { SUM = SUM + (int)( (*(originalImage.data + X + I + (Y + J)*originalImage.cols)) * MASK[I+2][J+2]); } } } if(SUM>255) SUM=255; if(SUM<0) SUM=0; *(edgeImage.data + X + Y*originalImage.cols) = 255 - (unsigned char)(SUM); /* make edges black and background white */ fwrite( (edgeImage.data + X + Y*originalImage.cols), sizeof(char), 1, bmpOutput); } } printf("See edgeLap.bmp for results\n"); fclose(bmpInput); fclose(bmpOutput); farfree(edgeImage.data); /* Finished with edgeImage.data */ farfree(originalImage.data); /* Finished with originalImage.data */ return 0; } THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M /*----------GET IMAGE INFO SUBPROGRAM--------------*/ long getImageInfo(FILE* inputFile, long offset, int numberOfChars) { unsigned char *ptrC; long value = 0L; unsigned char dummy; int i; dummy = '0'; ptrC = &dummy; fseek(inputFile, offset, SEEK_SET); for(i=1; i<=numberOfChars; i++) { fread(ptrC, sizeof(char), 1, inputFile); /* calculate value based on adding bytes */ value = (long)(value + (*ptrC)*(pow(256, (i-1)))); } return(value); } /* end of getImageInfo */ /*-------------COPIES HEADER AND INFO HEADER----------------*/ void copyImageInfo(FILE* inputFile, FILE* outputFile) { unsigned char *ptrC; unsigned char dummy; THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M int i; dummy = '0'; ptrC = &dummy; fseek(inputFile, 0L, SEEK_SET); fseek(outputFile, 0L, SEEK_SET); for(i=0; i<=50; i++) { fread(ptrC, sizeof(char), 1, inputFile); fwrite(ptrC, sizeof(char), 1, outputFile); } } /*----------------COPIES COLOR TABLE-----------------------------*/ void copyColorTable(FILE* inputFile, FILE* outputFile, int nColors) { unsigned char *ptrC; unsigned char dummy; int i; dummy = '0'; ptrC = &dummy; fseek(inputFile, 54L, SEEK_SET); fseek(outputFile, 54L, SEEK_SET); THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M for(i=0; i<=(4*nColors); i++) /* there are (4*nColors) bytesin color table */ { fread(ptrC, sizeof(char), 1, inputFile); fwrite(ptrC, sizeof(char), 1, outputFile); } } Giải thích Laplace: Toán tử Laplace thực hiện chính xác như Sobel, phương pháp này có một chút đơn giản bởi nó sử dụng một mặt nạ thay vì hai. 5. Phương pháp dò biên hình chóp(pyramid EDGE detection) Nó thường xảy ra với các biên quan trọng trong hình ảnh đã được tách rời thành các khoảng từ hình ảnh đó và tương đối dàng để xác định.Tuy nhiên, đó có thể là một số các biên đậm trong hình ảnh đó và tương đối dễ dàng để xác định( từ hình ảnh người sử dung j đang xét) bởi vì chúng ngắn hoặc rời rạc. Vấn đề là làm thế nào để lảm nổi bật biên lớn (substantial) nhưng lờ đi biên không đạt(ngắn). Sử dụng: làm tăng các biên lớn (đậm và dài) nhưng bỏ qua các biên mờ hoặc ngắn. Nguyên lý: hình ảnh được cắt bớt thành bốn phần bằng việc cjia đôi chiều dài của cạnh( cả chiều ngang và chiều dọc). Mỗi điểm trong một hình ảnh thu được bằng trung bình của bốn điểm ảnh tương ứng trong hình ảnh đầy đủ.Lặp lại quá trình này cho đến khi hình ảnh được tạo ra ở đây các biên lớn vãn còn rõ ràng nhưng các biên khác đã được loại bỏ. Hình chóp ở đây là đường ngang trong hướng khác. Việc dò biên đã áp dụng với hình ảnh nhỏ và điểm ảnh biên đã tìm được ở đó, việc dò biên áp dụng bốn điểm THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M ảnh tương ứng trong hình ảnh lớp tiếp theo- và dựa trên hình ảnh có kích thước lớn đầy đủ. Thuật toán: Đặt kích thước của hình ảnh gốc m x n. Tạo một hình ảnh tiếp theo có kích thước m/2 x n/2 bằng việc ước lượng giá trị cho mỗi 0<i<m và <j<n. [ ]1)j1,I(i1)jI(i,j)1,I(ij)I(i, 4 1 2 j , 2 i newI +++++++=      Bình phương tương ứng của bốn phần tử trong hình ảnh gốc đươc tính trung bình để đưa giá trị và hình ảnh mới. Lặp lại quá trình được lặp lại( có thể dùng để quy) x lần, và mỗi giữ lại hình ảnh thu được. Lúc này với hình ảnh nhỏ nhất, thực hiện một số thuật toán dò biên- như sobel. Trong các điểm ảnh ở đây các biên đã đượ tìm ra khi thực hiện thuật toán dò biên trên nhóm của bốn điểm ảnh tương ứng trong hình ảnh lốn nhất tiếp theo.Ta tiếp tục thực hiện giảm bớt các biên tốt nhất đến cuối hình chóp của hình ảnh cho đến khi các biên chính trong hình ảnh gốc đã tìm được. 6. Crack edge relation(Tách giới hạn biên) Giới hạn biên hình ảnh: Hầu hết các giá trị điểm ảnh là hiện hữu ở biên hình ảnh, những giá trị biên nhỏ phù hợp cho mức xám không đáng kể, làm thay đổi kết quả từ lượng tạp nhiễu, ánh sáng nhỏ không đều… Chọn một giới hạn chung thích hợp thường là khó khăn và đôi khi không thể đạt được; P-giới hạn xếp kề có thể áp dụng t ừ định nghĩa giới hạn. Như một sự lựa chọn, không giảm độ lớn cực đại và hiện tượng trễ giới hạn có thể được sử dụng như là đã đưa vào phép dò biên chi tiết. Phục hồi biên: THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M Khung cuối cùng từ các phương pháp trước chịu ảnh hưởng lớn bởi hình ảnh gốc. Tất cả thuộc tính hình ảnh trong bối cảnh liên quan với nhau có thể tăng chất lượng hình ảnh cuối cùng. Hầu hết các thuộc tính hình ảnh, tính đến cả biên thực sự mờ là đánh giá chính xác hơn trừ khi ngữ cảnh biên là hoàn toàn làm sạch – cơ bản trên độ dài của các biên liên quan trong tìm kiếm đặc biệt, sự tin cậy của mỗi biên là tăng hay giảm. Một vị trí biên mờ giữa 2 biên rõ là một ví dụ cụ thể; nó là khả năng lớn dể vị trí biên mờ là một phần của đường biên cuối cùng. Nếu trong 1 trường hợp khác, một biên rõ vị trí của nó không tồn tại nó sẽ không là phần nhỏ của bất kì đường biên nào. Giãn đường biên là phương pháp lập đi lập lại để độ tin cậy của đường biên hội tụ về 0 hay 1. Sự tin cậy của mỗi đường biên e trong lần giãn đầu tiên là độ lớn bình thường của đường biên rõ. Thuật toán: 1. Đánh giá độ tin cậy C(1)(e) cho tất cả các đường biên e tách ra trong hình ảnh. 2. Tìm kiểu đường biên của mỗi đường biên cơ bản trên đường biên tin cậy trong nhóm liên quan. 3. cập nhật độ tin cậy C(k+1)(e) của mỗi đường biên e theo kiểu của nó và theo độ tin cậy cho trước C(k)(e). 4. Dừng lại, nếu độ tin cậy đã hội tụ về 0 hay 1. Lặp lại bước (2) và (3) cho các trường hợp khác. - Các bước chính của thuật toán ở trên là ước lượng nhưng điểm tốt nhất bởi ước lượng của kiểu đường biên và theo cách này độ tin cậy của đường biên đã giảm bớt. THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M - Ước lượng là tính toán ở kiểu i nếu: Type(i)=max(type(k)) k=0,1,2,3 Type(0)=(m-a)(m-b)(m-c) Type(1)=a(m-b)(m-c) Type(2)=ab(m-c) Type(i)=abc a, b, c là giá trị thường thấy gắn liền với đường biên mẫu m= max(a,b,c,q) đưa vào lượng q đảm bảo type(0) khác 0 và mang giá trị a. - Một ví dụ khi chọn q=0,1 một ước lượng (a,b,c)=(0.5,0.05,0.005) là ước lượng kiểu 1 khi đó kiểu ước lượng (0.3,0.2,0.2) là ước lượng kiểu 3. - Đánh giá kết quả đạt được bằng cách đếm đơn giản những con cố của đường biên gốc từ ước lượng ở trên một giá trị giới hạn. - Kiểu biên được tìm thấy khi móc nối đơn giản các kiểu biên và độ tin cậy của đường biên là giảm đi trong lân cận tiếp theo. - Tăng độ tin cậy C(k+1)(e) = min (1, C(k)(e)+δ) - Giảm độ tin cậy C(k+1)(e) = min (1, C(k)(e)-δ) - Sự giãn đường biên mô tả ở trên nhanh chóng được dùng tạo đường biên ban đầu trong lần lặp đầu tiên. - Nó thường hội tục chậm và cho kết quả xấu hơn mong muốn khi lặp những số lớn. - Nguyên nhân của nó được tìm từ toàn bộ số lớn nhất của đường biên kiểm định nằm ngoài tiêu chuẩn của hình ảnh, điều không phải tìm kiếm cho kết quả tốt nhất. - Vấn đề là tìm đường biên tin cậy từ một giới hạn chắc chắn và nội giới hạn khác, giới hạn làm tăng lên độ bóng bẩy của hình ảnh gốc. - Một bước đã được thêm vào để tìm đường biên tin cậy: Nếu C(k+1)(e)>T1 thì assign(C(k+1)(e))=1 THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M Nếu C(k+1)(e)<T2 thì assign(C(k+1)(e))=0 T1,T2 là các tham số điều khiển sự hội tụ dần của phép giãn biên và độ chính xác của đường biên cuối cùng. 7. Kỹ thuật đạo hàm tích chập – phương pháp Canny Phương pháp này thực hiện cách lấy đạo hàm của một ảnh chập với bộ lọc Gauss. Đạo hàm của một ảnh được lọc: yx ffIGf +=⊗∇=∇ )( (3.11) với fx, fy là đạo hàm theo x và y của f Do vậy: )()()()( IGIGIGIGf yxyx ⊗+⊗=⊗∇+⊗∇=∇ (3.12) Lấy đạo hàm riêng theo x và y của G ta được: ) 2 exp( 2 2 22 ),( σσ yxx x yxG + − − = ) 2 exp( 2 2 22 ),( σσ yxy y yxG + − − = Gx(x) G(y) fx fy Gy(y) G(x) Hình 5: Mô hình tính của phương pháp Canny 8. Dò biên theo quy hoach động 8.1. Mô tả phương pháp I(x,y) Arctan fy/fx 22 yx ff + THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M Dò biên theo phương pháp gradient là xác định cực trị cục bộ của gradient theo các hướng; còn phương pháp Laplace dựa vào cắt điểm không của đạo hàm bậc hai. Phương pháp dò biên theo quy hoạch động là phương pháp tìm cực trị tổng thể của các quá trình nhiều bước. Nó dựa vào nguyên lý tối ưu của Bellman. Nguyên lý Bellman phát biểu như sau: “con đường tối ưu giữa 2 điểm cho trước cũng là tối ưu giữa 2 điểm bất kỳ nằm trên đường tối ưu đó”. Thí dụ, nếu C là một điểm trên đường tối ưu giữa A và B thì đoạn CB cũng là con đường tối ưu từ C đến B không kể đến C bằng cách nào. E B C A D Trong kỹ thuật này, ta giả sử bản đồ biên đã được xác định và được biểu diễn dưới dạng một đồ thị liên thông N chặng. Hơn nữa, giả sử hàm đánh giá được tính theo công thức: ∑∑∑ = − = − = −−−= N k NN N k kk N k kN xxdxxxgNxxS 2 1 1 1 1 1 ),()()()(),,...,( βθθα Với: Xk, k=1,…,N: biểu diễn các đỉnh của đồ thị trong chặng thứ k; d(x,y): khoảng cách giữa 2 đỉnh x và y tính theo các định nghĩa tương ứng về khoảng cách; THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M |g(xk)| và θ(xk) là gradient biên độ và gradient hướng ở đỉnh xk; α và β là các tham số không âm. Đường bao tối ưu sẽ nhân được bằng cách nối các đỉnh x , k=1,…,N nào đó thỏa mãn, sao cho S(x1,…,xN) đạt cực đại. Ta định nghĩa hàm như sau: 11 ,.. 1 )},,..,({),( − =Φ Nxx NN NxxSMaxNx Khi đó ta được: ),()()()()1,,..,(),,..,( 11111 −−− −−++−= NNkkNNN xxdxxxgNxxSNxxS βθθα Với cách thức này, thay vì tìm tối ưu toàn cục của S(x1,,…,xN,N) một vấn đề phức tạp, ta đi tìm tối ưu của N chặng của tối ưu 2 biến. Trong mỗi chặng, với mỗi xk ta phải tìm tối ưu Φ(xk,k). Ví dụ: Giả sử ta có bản đồ biên biểu diễn đồ thị liên thông sau: D 4 7 Φ(xk 6 5 D(11,12) E(16) F(23) A 5 B A 5 C B 3 2 6 I(8) (18,28) 2 3 G(8) H(8,10) j(13,10) 1 2 3 4 5 k Theo phương pháp trên ta có Φ(xk,k)=5. với k=2 có Φ(D,2)=max(11,12)=12. Điều đó có nghĩa là con đường từ A đến D di qua C và ACD là biên được chọn với k=2. Một cách tương tự, với k=4 có 2 con đường được chọn là ACDEF và AGHJ. Tuy nhiên, với k=5 thì đoạn JB bị loại và chỉ tồn tại con đường duy nhất với cực đại là 28. Như vậy biên được xác định là ADEFB. THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M 8.2. Thuật toán Theo phân tích trên, thuật toán dò biên theo qui hoạch động được mô tả một cách hình thức như sau: • Xuất phát từ điểm ban đầu XA, ta xác định con đường gồm các đỉnh để đạt đến đỉnh XB • Việc dò tìm này giống như phép duyệt đồ thị theo bề sâu: tại thời điểm hiện thời xi (lúc xuất phát là XA), ta xác định các điểm kế tiếp, dựa vào 8 lân cận theo hướng của điểm hiện tại và điểm trước đó. Nếu hướng đó hợp lệ, ta chọn nó như một đỉnh trên con đường cần tìm. Ngược lại, để tìm đỉnh có khả năng ta sẽ chọn 1 trong 8 lân cận của đỉnh đang xét với chi phi lớn nhất. Có thể có nhiều đỉnh thỏa mãn và như vậy ta cần lưu trữ các đỉnh này coi như các đỉnh có khả năng. Nếu không có đỉnh nào được chọn trong 8 lân cận đó, ta phải quay lui và chọn đỉnh khác đã lưu trữ. • Quá trình được lặp lại cho đến đỉnh được xem xét hiện tại chính là đích X8 Để cài đặt giải thuật này, cần sử dụng các cấu trúc dữ liệu và các thủ tục sau:  Stack winerstack: lưu trữ các đỉnh trên con đường tối ưu từ đỉnh xuất phát X đến đỉnh đích X8.  Stack tempstack: lưu trữ các đỉnh có khả năng để xem xét lúc quay lui một khi thất bại tạm thời.  Véc tơ Index: gồm 9 phần tử. Mỗi phần tử của véc tơ gồm 3 trường: hàng, cột và giá. Giá là tiêu chí xét điểm thỏa mãn;  Image: ảnh vào  XA, XB, last: có cấu trúc như một phần tử của véc tơ Index  Find_Direc (last, current): hàm cung cấp giá trị về hướng của điểm đang xét và điểm trước nó. - Thủ tục Find_Successor(ImageIn,X,last, Index): tìm các điểm tiếp theo có thể và đặt vào véc tơ Index. Điểm tiếp theo này phải nằm THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M trong giới hạn của ảnh, khác với điểm hiện thời và điểm trước đó và cường độ mức xám phải lớn hơn ngưỡng T. Khi điểm ảnh được chọn, trường giá sẽ tăng lên một lượng: bằng mắc xám của điểm ảnh đó. - Thủ tục Init_index(Index): đặt lại giá trị cho mỗi phần tử của véc tơ Index bằng -1 mỗi khi khởi tạo một đợt tìm mới. - Thủ tục sort_pixel(Index): sắp xếp lại véc tơ index theo trường giá tăng dần để tìm các đỉnh có khả năng làm cực đạiΦ Giải thuật dò biên theo qui hoạch động được viết như sau: Edge_Dynamic(XA,XB,ImageIn,T,Index,Last,WinerStack) /*XA, XB, T, ImageIn: các tham số vào WinerStack” tham số ra. Chứa các đỉnh biên trên đường từ XA đến XB*/ 1. if XA=XB then kết thúc; 2. khởi tạo ban đầu Last=XA; Push(WinerStack,XA); ImageIn[XA]=0;{đánh dấu để không xét lại} Init_Index(Index); Find_Successor(ImageIn, Xi,T,Index, last); Sort_pixel(Index); If Index[8]=-1 then {điểm hiện tại không có điểm tiếp theo – đã xét hết} Begin Xi<-tiếp theo trong index Init_Index(Index); End 3. vòng lặp chính While true do Begin Push(WinerStack,Xi); THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M ImageIn[Xi]=0; If Xi=XB then exit; {kết thúc} Find_Successor(ImageIn, Xi,T,Index, last); D=Find_Direc(Last,Xi); Last=Xi; If (d>0) & (ImageIn[Index[d]] là thỏa then Xi=Index[d]; Sort_pixel(Index); /* xác định đỉnh có khả năng*/ For i=1 to 8 do If Index[i].gia-1 then Push(TempStack, Index[i]); If Index[8]-1 & ImageIn[index[8]]=0 then Xi=Index[8]; Else While (TempStack not Empty) & (ImageIn[Xi]=0) do Begin Xi=pop(TempStack); If TempStack is Empty then quay lui; While (WinerStack not Empty and XiX0 )do X0=pop(winerStack); End Init_Index(Index); End 4. Kết thúc 9. Một số thuật toán khác • Thuật toán: tìm đường cong sử dụng biến đổi Hough THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M 1. Lượng tử hóa không gian số tổng giới hạn của tham số a. Không gian tham số với n chiều được cho bởi tham số của véc tơ a. 2. bộ nhớ n chiều là mảng A(a) với cấu trúc lượng tử hóa của không gian tham số; tập hợp các phần tử tới 0. 3. Từ một điểm ảnh (x1,x2) trong độ dốc thích hợp của hình ảnh, tăng tất cả các ô nhớ A(a) nếu f(x,a)=0 A(a)=A(a)+∆A Cho tất cả giá trị a bên trong giới hạn dùng trong bước (1) 4. tìm số lớn nhất trong mảng A phù hợp với sự mô tả đường cong f(x,a) hiện có trong hình ảnh gốc. - Nếu chúng ta tìm được đường tròn, phân tích biểu thức f(x,a) được hình tròn mong muốn là : (x1-a)2 + (x2-b)2= r2 - bộ chứa cấu trúc dữ liệu phải là không gian 3 chiều - phép biến đổi Hough là kĩ thuật mạnh cho phép tìm ra đường cong, theo phát triển luật số mũ của bộ chứa cấu trúc dữ liệu sự ra tăng của những hạn chế về tham số đường cong là điều kiện thuận lợi để tìm ra đường cong có những tham số nhỏ. - Nếu ưu tiên những thông tin về quản lý biên được sử dụng thì lượng tính toán cần thiết có thể giảm đáng kể. - Ngoài việc sử dụng thông tin đường biên định hướng, tất cả các ô bộ chứa A(a,b) là tăng lên trong không gian tham số nếu con trỏ (a,b) là một đường tròn với tâm x. Sự hiểu biết mang tính định hướng chỉ là số nhỏ trong bộ nhớ cần tăng lên. Nếu đường biên định hướng là lượng tử hóa 8 giá trị có thể, chỉ giá trị thứ 8 của đường tròn cần thêm phần nhỏ trong tăng dung lượng ô chứa Sử dụng đường tròn định hướng, ứng với tham số a và b có thể được định nghĩa từ công thức sau: THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M a=x1-R1cos(Ψ(x)) b=x1-Rsin(Ψ(x)) Ψ(x) })(,){( ∆Φ−Φ∆Φ−Φ∈ xx ∆Φ là số đường biên định hướng cũ trong ô x, ∆Φ là số lớn nhất đã biết của đường cong định hướng Ta tìm ra rằng vòng tròn tìm thấy có đóng góp lớn từ các ô bộ nhớ A(a) bằng dung lượng đường biên trong ô x. • Thuật toán: Tổng quan biến đổi Hough 1. đặt 1 bảng R mô tả yêu cầu của đối tượng 2. Dạng cấu trúc dữ liệu A miêu tả khả năng trước đó xem như những con trỏ A(x1,x2,T). tập hợp ô nhớ giá trị A(x1,x2,T)=0 3. Từ một điểm (x1,x2) trong độ dốc giới hạn, hình ảnh đã được xác định đường biên định hướng ∆Φ ; tìm tất cả các khả năng trước đó con trỏ xR và tăng tất cả A(xR,T): A(xR,T)= A(xR,T)+ ∆A Cho tất cả các giá trị đạt được của vòng lặp và cỡ thay đổi ))(cos()(11 TSxx R +ΦΦΓ+= α ))(sin()(22 TSxx R +ΦΦΓ+= α 4. Tìm những vùng phù hợp được cho bởi số lớn nhất trong ô A cấu trúc dữ liệu. • Thuật toán: Định dạng vùng từ từng phần các khung Từ mỗi khung điểm x tìm một đường biên đối với a một khoảng cách không vượt quá a cho giá trị lớn nhất M. Nếu 1 điểm biên đã tìm, đánh dấu một điểm trên đường thẳng kết nối khi đó có một vùng nhớ tiềm năng. Tính số đánh dấu cho mỗi điểm trong hình ảnh, số đánh dấu cho biết một điểm là đường kết nối giữa các điểm biên. Lấy b(x) là số đánh dấu cho điểm x Số đánh dấu b(x) là: B(x) =0.0 từ b(x)=0 THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN K IL O BO O K S. CO M =0.1 từ b(x)=1 =0.2 từ b(x)=2 =0.5 từ b(x)=3 =1.0 từ b(x)>3 Phương pháp này là cách biểu diễn chính xác các điểm đường bao quanh. THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN

Các file đính kèm theo tài liệu này:

  • pdfBáo cáo chuyên đề xử lý ảnh- Các phương pháp dò biên.pdf
Luận văn liên quan