Làm nổi và tách đường biên ảnh

12 651 3
Làm nổi và tách đường biên ảnh

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Làm nổi và tách đường biên ảnh Xử lý ảnh số

Chơng 5 Làm nổi tách đờng biên ảnh 5.1 Chỉ dẫn Các kỹ thuật xử lý ảnh đều quan tâm đến việc làm nổi hoặc tách lấy đờng biên ảnh. Đờng biên trong một ảnh đen trắng đợc định nghĩa là các đoạn rời rạc hoặc là thay đổi đột ngột của cờng độ mức xám. Sự thay đổi này chứa các thông tin về ảnh, và phần đóng góp của chúng trong phổ ảnh sẽ tìm thấy cuối miền tần số cao. Một đ- ờng biên ảnh, trong trờng hợp tổng quát có thể trải theo bất kỳ hớng nào, có thể biến thiên về cờng độ sáng. Trong chơng này, chúng ta sẽ lấy ra đờng biên ảnh bằng đặc tuyến tần số của chúng. Ta sử dụng bộ lọc FIR đợc thiết kế nh bộ lọc thông cao đối xứng vòng tròn vào công việc này. Sau đó, ta sẽ đa ra một số phép xử lý đờng biên lấy từ đặc tuyến không gian của đờng biên ảnh. 5.2 Làm nổi đờng biên ảnh qua bộ lọc FIR Vì đờng biên ảnh chiếm ở dải tần số cao trong phổ của ảnh, nên ta có thể làm nổi hoặc tách đờng biên ảnh qua bộ lọc thông cao. Dùng cho chức năng này, ta có thể dùng bộ lọc tơng phản pha có điểm cắt tần số đủ cao để làm nổi đờng biên ảnh làm mờ các chi tiết khác của ảnh có tần số thấp. Vấn đề đặt ra là chúng ta tìm ra điểm cắt tần số này nh thế nào. Điểm này đợc tìm ra bằng phơng pháp thử nghiệm điều chỉnh dần dần. Ví dụ, ta có thể sử dụng ảnh đã qua bộ lọc trung vị ở hình 4.19 trong chơng 4, ảnh này thu đợc khi sử dụng lợc đồ mức xám lọc trung vị trên ảnh "ISLAM.IMG" có trên đĩa đi kèm theo. Hình 5.1a hình 5.1b cho kết quả dùng PCF thiết kế nh lọc FIR kích thớc 5 ì 5 với các điểm cắt c là 1.7 2.0. Các kết quả cho thấy là trong trờng hợp này đờng biên ảnh nổi trội với c = 2.0 . Một phơng pháp khác hay dùng để làm nổi đờng biên ảnh là dùng bộ lọc Laplace, định nghĩa nh sau: (5.1) ở đây f(x,y) là hàm cờng độ của ảnh. Đặc tính tần số của Laplace đợc định nghĩa nh sau: 2 2 2 121 ),( +=H (5.2) 62 y yxf x yxf yxf 2 2 2 2 2 ),(),( ),( + = Để hiểu hoạt động của phơng pháp Laplace trong việc trích ra đờng biên, xem sơ đồ ví dụ hình 5.2. Chúng là sự đơn giản hoá sờn âm sờn dơng đờng biên. Hình 5.1 (a) Kết quả sử dụng bộ lọc PCF với 7.1= c . (b) Kết quả sử dụng lọc PCF với 0.2= c . Hình 5.2 Đạo hàm bậc nhất bậc hai của đờng biên. 63 f(x) a 2 2 2 121 ),( +=H b 2 2 2 121 ),( +=H c Rõ ràng là đạo hàm bậc hai có thể dùng để phát hiện đờng biên ảnh. Thông thờng, các điểm cắt zero của đạo hàm bậc hai là nơi có đờng biên ảnh. Cần phải nhớ rằng đạo hàm của một hàm hai biến tại bất kỳ điểm nào cũng phụ thuộc vào hớng lấy đạo hàm. Các bộ lọc FIR có thể dùng xấp xỉ một Laplace bởi dùng hàm cho bởi biểu thức (5.2) nh hàm lọc trong chơng 2, chơng trình 2.1 (hàm H(w 1 ,w 2 )). ảnh trong hình 5.3 cho ta kết quả dùng Laplace thiết kế nh một bộ lọc FIR 9 ì 9 trên ảnh cho trong hình 4.19. Bài tập 5.1 Viết một chơng trình dùng để tách đờng biên ảnh dùng: 1. Bộ lọc thông cao tơng phản pha dùng nh một bộ lọc FIR. 2. Một hàm Laplace dùng nh một bộ lọc FIR. 5.3 Tách đờng biên ảnh qua cách tiếp cận khoảng cách Dùng đặc tuyến khoảng cách đờng biên, chúng ta có thể đa ra một số cách tiếp cận để phát hiện ra đờng biên. Để cung cấp cơ sở về kỹ thuật này, chúng ta sẽ bắt đầu xem xét mẫu sau đây: -1 2 -1 -1 2 -1 -1 2 -1 Hình 5.3 Kết quả của lọc ảnh trên ảnh hình 4.19. Giả sử rằng, trong trờng hợp này, ảnh chỉ có hai mức xám là 0 1, một đờng biên dọc ảnh có chiều dài tối thiểu là 3 điểm ở một nơi nào đó trên ảnh. Để tách lấy đờng biên dọc ảnh thì chúng ta phải chồng lên quét mẫu lên trên bề mặt ảnh. Tại bất kỳ vùng nào chúng ta nhân phần tử chứa trong mẫu với với mức xám tơng ứng đ- ợc che bởi mỗi phần tử của mẫu, sau đó tính tổng các kết quả. Bởi vì tổng của tất cả các phần tử của mẫu bằng không, kết quả sẽ là không cho nền khác không cho các nơi khác. Nếu cột giữa của mẫu trùng với một đờng biên có ít nhất ba điểm theo chiều cao, cột giữa phải che các giá trị 1, cột trái che các giá trị 0, chúng ta có giá trị là 3, theo (-1* 0) + (-1* 0) + (-1* 0) + 2*1 + 2* 1 + 2* 1 + (-1* 1) + (-1* 1) + (-1* 1) = 3 Thuật toán trên có thể biểu diễn bằng biểu thức sau đây: = = ++= 1 1 1 1 22112121 1 2 ),(),(),( k k knknIkkhnny (5.3) ở đây h(k 1 ,k 2 ) là phần tử của mẫu, với h(0,0) ở trung tâm của mẫu I(n 1 ,n 2 ) là mức c- ờng độ sáng của ảnh. Biểu thức (5.3) biểu thị cho tơng quan chéo giữa mẫu với ảnh. Mặc dù thuật toán này chỉ áp dụng cho ảnh nhị phân, một ảnh chỉ có hai mức xám, nó cũng có thể áp dụng trong trờng hợp tổng quát cho ảnh có nhiều mức xám nh chúng ta sẽ xem xét sau này trên ảnh thật. Một số các mẫu thờng đợc gọi là một đờng biên hoặc là một mặt nạ xử lý, đã đợc cho sẵn trong tài liệu. Các loại mặt nạ hay dùng nhất sẽ đợc đề cập sau. 5.3.1 Toán tử Robert Nó bao gồm hai mặt nạ sau đây : Đáp ứng từ tất cả mặt nạ này đợc tính từ biểu thức (5.3). Chiều dài đờng biên ảnh có thể rút ra bằng cách dùng bất kỳ phép xử lý không tuyến tính nào sau đây. 64 W 1 -11 W 2 -11 y i j y i j y i j( , ) ( , ) ( , )= + 1 2 2 2 (5.4) { } y i j y i j y i j( , ) max ( , ) , ( , )= 1 2 (5.5) { } y i j y i j y i j( , ) ( , ) ( , )= + 1 2 (5.6) Trong đó y 1 (i,j) y 2 (i,j) là đáp ứng rút ra từ mẫu W 1 và W 2 . Hai biểu thức cuối cùng đợc dùng thờng xuyên nhất. Hớng của đờng biên (i,j), tính theo phơng nằm ngang, có thể rút ra bởi ),( ),( tan 4 ),( 1 2 1 jiy jiy ji = (5.7) Các phần tử trong mặt nạ gọi là các trọng số. 5.3.2 Toán tử Sobel Phơng pháp Sobel đợc thiết kế để xấp xỉ hàm gradient rời rạc. Mặt nạ xử lý Sobel có dạng sau: Và ảnh chiều dài đờng biên tính ra từ tính toán dùng biểu thức (5.4), 5.5) hoặc (5.6). Hớng của đờng biên tính từ: ( . ) tan ( , ) ( , ) i j y i j y i j = 1 2 1 (5.8) Chú ý rằng W 1 dùng để tách lấy đờng biên dọc ảnh, còn W 2 dùng để tách lấy đờng biên ngang của ảnh. 5.3.3 Các mặt nạ gradient khép kín Chúng đợc phát triển dựa trên sự đánh giá tất cả các hớng có thể của một đờng biên ảnh trong một ảnh rời rạc. Bởi vậy thay vì chỉ áp dụng hai mặt nạ nh hai phơng pháp trớc, tám mặt nạ đã đợc dùng, mỗi cái cung cấp một cạnh đờng biên dọc theo một trong tám hớng có thể của vòng (xem hình 5.4). Bốn kiểu khác nhau của các mặt nạ của phơng pháp này cho ở phía dới. Chúng là sự phát triển dựa trên mô hình dữ liệu cơ sở cho đờng biên trong ảnh. 65 1-12-21-1 W 1 -1-2-1121 W 2 1 2 7 6 5 4 3 E NE N NW W SW S SE Hình 5.4 Các hớng xử lý. Các toán tử Prewitt. Có hai kiểu toán tử sau: Kiểu 1: = 111 121 111 0 W = 111 121 111 1 W = 111 121 111 2 W = 111 121 111 3 W = 111 121 111 4 W = 111 121 111 5 W = 111 121 111 6 W = 111 121 111 7 W Kiểu 2: = 111 000 111 0 W = 110 101 011 1 W = 101 101 101 2 W = 011 101 110 3 W = 111 000 111 4 W = 110 101 011 5 W = 101 101 101 6 W = 011 101 110 7 W Với kiểu thứ 2 bạn chỉ cần bốn mặt nạ đầu tiên vì tính đối xứng giữa chúng với bốn mặt nạ cuối cùng. Toán tử vòng Sobel. Toán tử này đợc tính theo tám mặt nạ sau: = 121 000 121 0 W = 210 101 012 1 W = 101 202 101 2 W = 012 101 210 3 W = 121 000 121 4 W = 210 101 012 5 W = 201 102 001 6 W = 012 101 210 7 W cũng do tính đối xứng mà bạn chỉ cần dùng bốn mặt nạ đầu tiên . Toán tử vòng Kirsh. Các toán này đợc xem nh là các toán tử thuần nhất. Nó tạo ra một sự thay đổi nhỏ trong gradient tạo ra các sự so sánh lần lợt nh các phơng pháp trớc đây. Tám mặt nạ này đợc mô tả nh sau: 66 = 333 303 555 0 W = 333 305 355 1 W = 335 305 335 2 W = 355 305 333 3 W = 555 303 333 4 W = 553 503 333 5 W = 533 503 533 6 W = 333 503 553 7 W Trong phơng pháp xử lý tuần hoàn thì các đờng biên ảnh có thể phát hiện ra theo: y i j y i j y i j( , ) max{| ( , ), ,| ( , )|}= 0 7 (5.9) ở đây y 0 , y 1 là các sửa lại qua các mặt nạ W 0 , W 1 trên ảnh. Góc (i,j) tính theo ph- ơng nằm ngang xác định bằng: ( , )i j = hớng trong phạm vi của giá trị lớn nhất của y k (i,j) = tan -1 y i j y i j k ( , ) ( , ) 0 (5.10) Bây giờ chúng ta sẽ kiểm tra một số phép xử lý này. Chúng ta sẽ phát triển hai ch- ơng trình, một cho các xử lý của Sobel (dùng hai mặt nạ) một cho các xử lý của Kirsh. Các bớc phát triển cho chơng trình này tơng tự nh các bớc phát triển cho chơng trình lọc FIR. Chơng trình gốc của xử lý Sobel đợc cho ở dới đây: Chơng trình 5.1 SOBEL.C Chơng trình để rút ra chiều dài đờng biên ảnh dùng xử lý Sobel. /* This program is for obtaining the edges using the Sobel directional operator. */ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <alloc.h> #include <conio.h> #include <io.h> #include <ctype.h> /* Sobel masks. */ int S1[3][3]={{1, 0, -1}, {2, 0, -2}, {1, 0, -1}}; int S2[3][3]={{ -1, -2, -1}, {0, 0, 0}, {1, 2 , 1 }}; void main() { int i,j,n1,n2,image_width, image_length,k1,k2,ind; char file_name[14],ch; unsigned char **w; unsigned char *temp,tmp; int y1, y2; float nsq; unsigned int zn2; FILE *fptr, *fptr1; clrscr(); printf("Enter file name for input image ->"); scanf("%s",file_name); if((fptr=fopen(file_name,"rb"))==NULL) { printf("%s does not exist.", file_name ); printf("\nPress any key to exit."); 67 getch() ; exit(1); } nsq=filelength(fileno(fptr)); printf("Is this a square image ?"); printf("\n i.e. Is image_length=image width (y or n)? -> "); while(((ch=tolower(getch()))!='y')&&(ch!='n')); putch(ch); switch(ch) { case 'y': image_length=image_width=sqrt(nsq); printf("\n Image size = %d x %d",image_length, image_width); break; case 'n': printf("\nEnter image_width >"); scanf("%d",&image_width); image_length=nsq/image_width; printf("image length is %d", image_length); break; } printf("\nEnter file name for filtered image ->"); scanf("%s",file_name); ind=access(file_name,0); while(!ind) { gotoxy(1,6); printf("File exists. Wish to overwrite? (y or n) >"); while(((ch=tolower(getch()))!='y')&&(ch!='n')); putch(ch); switch(ch) { case 'Y': ind=1; break; case 'n': gotoxy(1,6); printf(" "); gotoxy(1,5); printf(" "); gotoxy(1,5); printf("Enter file name >"); scanf("%s",file_name); ind=access(file_name,0); } } fptr1=fopen(file_name,"wb"); gotoxy(70,25); textattr(WHITE+(GREEN<<4)+BLINK); cputs("WAIT"); /* Allocating memory for Image Transfer Buffer, w. */ w=(unsigned char **)malloc(3*sizeof(char *)); for(i=0;i<3;i++) *(w+i)=(char *)calloc(image_width,sizeof(char)); /* Clear Image Transfer Buffer. */ 68 for(i=0;i<3;i++) for(j=0;j<image_width;j++) *((*(w+i))+j)=(unsigned char)0; /* Algorithm */ for(n1=0; n1<image_length;n1++) { gotoxy(1,9); printf (" Transfered line %-4d to image transfer buffer. ",n1); /* Transfer row n2 of the image to the last row of W. */ for(j=0;j<image_width;j++) { ch=(char)fgetc(fptr); *((*(w+2))+j) = (unsigned char)ch; } for(n2=0; n2<image_width; n2++) { y1=y2=(int)0; for(k1=-1; k1<=1; k1++) for(k2=-1; k2<=1; k2++) { if( ((n2+k2)<0) || ((n2+k2-1)>=image_width) ) continue; tmp=(*((*(w+1+k1))+(n2+k2-1))); y1+=S1[1+k1][1+k2]*tmp; y2+=S2[1+k1][1+k2]*tmp; } y1=abs(y1); y2=abs(y2); zn2=(y1>y2)?y1:y2; putc(zn2,fptr1); /* The buffer is imPlicit in this last statement. */ } /* Shift rows of w */ temp=*w; for(j=0; j<2; j++) *(w+j)=*(w+j+1); *(w+2)=temp; } gotoxy(70,25); textattr(WHITE+(BLACK<<4)); cputs ( " "); gotoxy(1,8); fclose(fptr); /* close input image file */ fclose(fptr1); /* close output-image file */ } Chơng trình cho các phép xử lý Kirsh cũng đợc trình bày ở dới đây. Chơng trình 5.2 KIRSH.C Chơng trình cho phát hiện đờng biên ảnh dùng toán tử Kirsh. /*Program 5.2 "KIRSH.C". Program for edge detection using the Kirsh operators.*/ /* This program is for obtaining the edges using Kirsh Compass operator. */ #include <stdio.h> 69 #include <stdlib.h> #include <math.h> #include <alloc.h> #include <conio.h> #include <io.h> #include <ctype.h> /* Kirsh operators. */ int T[8][3][3]={ { {5,5,5}, {-3,0,-3}, {-3,-3,-3},}, {{5,5,-3}, {5,0,-3}, {-3,-3,-3}, }, {{5,-3,-3}, {5,0,-3}, {5,-3,-3},}, {{-3,-3,-3}, {5,0,-3}, {5,5,-3},}, {{-3,-3,-3}, {-3,0,-3}, {5,5,5},}, {{-3,-3,-3}, {-3,0,5}, {-3,5,5},}, {{-3,5,5}, {-3,0,5}, {-3,-3,5},}, {{-3,5,5}, {-3,0,5}, {-3,-3,-3},} }; void main() { int i,j,n1,n2,image_width, image_length,k1,k2,ind; char file_name[14],ch; unsigned char **w; unsigned char *temp,tmp; int y[8] ; float nsq; unsigned int zn2; FILE *fptr, *fptr1; clrscr (); printf("Enter file name for input image ->"); scanf("%s",file_name); if((fptr=fopen(file_name,"rb"))==NULL) { printf("%s does not exist.", file_name); printf("\nPress any key to exit."); getch (); exit(1); 7 } nsq=filelength(fileno(fptr)); printf("Is this a square image ?"); printf ("\n i.e. Is image_length=image_width (y or n)? ->"); while(((ch=tolower(getch()))!='y')&&(ch!='n')); putch(ch); switch(ch) { case 'y': image_length=image_width=sqrt(nsq); printf("\n Image size = %d x %d",image_length, image_width); break; case 'n': printf("\nEnter image_width >"); scanf("%d",&image_width); image_length=nsq/image_width; printf("image length is %d", image_length); break; } printf("\nEnter file name for filtered image ->"); scanf("%s",file_name); ind=access(file_name,0); while(!ind) { gotoxy(1,6); printf("File exists. Wish to overwrite? (y or n) >"); while(((ch=tolower(getch()))!='Y')&&(ch!='n')); putch(ch); switch(ch) { case 'y': ind=1; break; case 'n': gotoxy(1,6); printf (" "); gotoxy(1,5); printf(" "); gotoxy(1,5); printf("Enter file name >"); scanf("%s",file_name); ind=access(file_name,0); } } fptr1=fopen(file_name,"wb"); gotoxy(70,25); textattr(WHITE+(GREEN<<4)+BLINK); cputs("WAIT"); /* Allocating memory for Image Transfer Buffer, w. */ w=(unsigned char **)malloc(3*sizeof(char *)); for(i=0;i<3;i++) *(w+i)=(char *)calloc(image_width,sizeof(char)); /* Clear Image Transfer Buffer. */ for(i=0;i<3;i++) for(j=0;j<image_width;j++) *((*(w+i))+j)=(unsigned char)0; 71 [...]... rộng để ảnh có kích thớc bất kỳ nhng thờng là không quá lớn Bài tập 5.1 72 Lập một chơng trình C cho phép lựa chọn sử dụng các kỹ thuật phát hiện đờng biên không gian Bài tập 5.2 Phơng pháp S Sarker K L Boyer đợc phát triển thành bộ lọc tách lấy đờng biên tốt nhất sử dụng bộ lọc có đáp ứng xung vô hạn (IIR) Chúng ta sẽ nói về IIR trong chơng 9; tuy nhiên, để hiểu đợc kết quả cho bởi Sarker Boyer... image file */ fclose(fptr1); /* close output-image file*/ } Để kiểm tra chơng trình này, chúng ta dùng ảnh trong hình 4.19 chơng 4 Kết quả dùng các phơng pháp Sobel Kirsh đợc cho trong hình 5.5 a 5.5 b Bạn sẽ nhận thấy rằng các xử lý của Kirsh có vẻ nh cung cấp cho ta nhiều chi tiết hơn về ảnh Cũng nh thế ta nhận thấy rằng phơng pháp dùng các xử lý không gian cho một kết quả tốt hơn là kỹ thuật... chơng 9; tuy nhiên, để hiểu đợc kết quả cho bởi Sarker Boyer chúng ta cha cần phải đọc chơng 9 1 Dựa trên kết quả phép lấy đạo hàm của chúng, phát triển bộ lọc FIR để phát hiện đờng biên ảnh 2 Sử dụng những bộ lọc này cho ảnh 4.19 của chơng 4 3 So sánh kết quả thu đợc qua việc tiếp cận với phơng pháp đợc nói đến trong chơng này Hình 5.5 (a) Kết quả thu đợc khi dùng xử lý Sobel trên hình 4.19 (b) Kết . Chơng 5 Làm nổi và tách đờng biên ảnh 5.1 Chỉ dẫn Các kỹ thuật xử lý ảnh đều quan tâm đến việc làm nổi hoặc tách lấy đờng biên ảnh. Đờng biên trong một ảnh đen trắng đợc định nghĩa. không gian của đờng biên ảnh. 5.2 Làm nổi đờng biên ảnh qua bộ lọc FIR Vì đờng biên ảnh chiếm ở dải tần số cao trong phổ của ảnh, nên ta có thể làm nổi hoặc tách đờng biên ảnh qua bộ lọc thông. của lọc ảnh trên ảnh hình 4.19. Giả sử rằng, trong trờng hợp này, ảnh chỉ có hai mức xám là 0 và 1, và một đờng biên dọc ảnh có chiều dài tối thiểu là 3 điểm ở một nơi nào đó trên ảnh. Để tách lấy đờng

Ngày đăng: 02/04/2014, 00:14

Từ khóa liên quan

Mục lục

  • Làm nổi và tách đường biên ảnh

    • 5.1 Chỉ dẫn

    • 5.2 Làm nổi đường biên ảnh qua bộ lọc FIR

    • 5.3 Tách đường biên ảnh qua cách tiếp cận khoảng cách

      • 5.3.1 Toán tử Robert

      • 5.3.2 Toán tử Sobel

      • 5.3.3 Các mặt nạ gradient khép kín

Tài liệu cùng người dùng

Tài liệu liên quan