1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Làm nổi ảnh part 2 ppsx

10 139 0

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

THÔNG TIN TÀI LIỆU

Nội dung

53 4.5.2 San bằng lợc đồ mức xám Sự biến đổi biểu đồ phân bố các mức xám có thể đạt đợc một cách gần đúng bằng cách xét hàm mật độ xác suất liên tục p r (r) thay cho h(i). Cái mà chúng ta cần đến là có đợc một phép đổi ánh xạ mức xám trên ảnh gốc, thay biến r bởi một biến mới s vì vậy sự phân bổ mức xám trên ảnh biến đổi theo công thức sau: )(rTs (4.15) Biến đổi ngợc đợc cho bởi )( 1 sTr (4.16) Trong đó )(rT và )( 1 sT là hàm đơn giá trị đơn điệu tăng theo r và s. Nếu )(sp s chỉ rõ hàm mật độ xác xuất của ảnh đợc biến đổi thì từ lý thuyết xác xuất ta có thể viết: )( 1 )()( sTr rs ds dr rpsp (4.17) Chúng ta giả thiết rằng, tại một thời điểm, ảnh gốc và ảnh qua ánh xạ là các hàm liên tục với hai biến không gian độc lập x và y. Bây giờ hãy xem đến sự biến đổi r r dprTs 0 )()( (4.18) Trong đó vế bên phải đợc biết đến nh hàm phân bố tích luỹ (cumulative distribution function - CDF). Từ công thức (4.18) chúng ta có thể viết: )(rp dr ds r (4.19) Thay thế công thức (4.19) vào (4.17) chúng ta có 0.1 )( 1 )()( rp rpsp r rs (4.20) 54 Vì vậy, phép biến đổi cho bởi công thức (4.18) cho ảnh mức xám có phổ đồng đều. Biến đổi trên có thể đợc viết dới dạng tổng quát hoá nh sau: k j k jns 0 )( (4.21) Hoặc, chúng ta muốn ánh xạ ảnh mức xám nằm giữa 0 và 255, chúng ta có thể thay đổi k s nh sau: 255 0255 0 ss ss s k k (4.22) Chú ý rằng vì công thức (4.21) là một xấp xỉ của công thức (4.18) bằng cách cho rằng ảnh ánh xạ có thể có lợc đồ mức xám không thực sự đồng đều. Một nhân tố khác cũng không đợc quan tâm trong quá trình biến đổi, đó là với một số ảnh mà các mức xám không phủ kýn các miền thì CDF sẽ giữ lại hằng số ở những miền không đợc phủ kýn đó. Những nhân tố này sẽ cho kết quả trong ảnh ánh xạ mà ở đó lợc đồ mức xám là xấp xỉ gần nhất với lợc đồ mức xám đồng đều đợc rút ra từ ảnh gốc. Chơng trình 4.1 cho dới đây dùng cho việc san bằng lợc đồ mức xám. Chơng trình 4.1 "UNI_HIST.C". /* PROGRAM 4.1 UNI_HIST.C. Histogram equalization. */ /* Histogram equalization. */ #define MAX 16384 #include <stdio.h> #include <conio.h> #include <io.h> #include <math.h> #include <ctype.h> #include <stdlib.h> 55 void main() { int image_length,image_width,i,j,ch,true_length; unsigned long int histo[256],s[256]; char file_name[14]; unsigned char buff[MAX]; int k,n,ind; double nsq; float range; FILE *fptr,*fptr2; clrscr(); printf("Enter file name of image >"); scanf("%s",file_name); fptr=fopen(file_name,"rb"); if(fptr==NULL) { printf("%s does not exist.",file_name); exit(1); } printf("Enter file name for storing mapped image >"); scanf("%s",file_name); gotoxy(1,3); printf(" "); ind=access(file_name,0); while(!ind) { gotoxy(1,3); 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,3); printf( " "); gotoxy(1,2); printf(" "); 56 gotoxy(1,2); printf("Enter file name >"); scanf("%s",file_name); ind=access(file_name,0); } } fptr2=fopen(file_name,"wb"); nsq=(double)filelength(fileno(fptr)); printf("\nIs this a square image ? (y or n) "); while(((ch=tolower(getch()))!='y')&&(ch!='n')); putch(ch); switch(ch) { case 'y': image_length=image_width=sqrt(nsq); break; case 'n': printf("Enter image width > "); scanf("%d",&image_width); image_length=(int)(nsq/image_width); } printf("\n image size= %d x %d",image_length,image_width); true_length=0.95*image_length; /* Generate Histogram.*/ for(i=0;i<256;i++) histo[i]=0; for(i=0;j<true_length;i++) for(j=0;j<image_width;j++) histo[getc(fptr)]++; /* Generate CDF. */ s[0]=histo[0]; for(i=1;i<256;i++) s[i]=s[i-1]+histo[i]; /* scaling*/ range=(float)(s[255]-s[0]); for(i=1; i<256; i++) s[i]=(int)((float)(s[i]-s[0]))*255.0/range; /* Mapping into a uniform histogram.*/ rewind(fptr); k=0 ; 57 for(i=0; i<image_length; i++) for(j=0; j<image_width; j++) { ch=s[getc(fptr)]; buff[k]=(unsigned char)ch; k++; if((k==MAX)||(ch==EOF)) { for(n=0;n<k;n++) putc((int)buff[n],fptr2); k=0; } } fclose(fptr); fclose(fptr2); printf("\n\nDONE."); } Để kiểm tra việc san bằng lợc đồ mức xám chúng ta xem xét ảnh trên hình 4.12a. Đây là ảnh của một ngời tơng phản với nền sáng. Khi chụp ảnh này đã không dùng đèn để giảm độ sáng của nền. ảnh sau khi san bằng mức xám đợc cho trên hình 4.12b. Dễ dàng nhận thấy đợc sự thay đổi so với ảnh gốc. ảnh cung cấp cho bạn thử nghiệm đợc cung cấp sẵn trên đĩa kèm theo với tên "ISLAM.IMG". Hình 4.12 (a) ảnh gốc dùng cho san bằng lợc đồ mức xám. 58 Hình 4.12 (b) ảnh sau khi san bằng lợc đồ mức xám. 4.5.3 Thay đổi lợc đồ mức xám Kỹ thuật san bằng lợc đồ mức xám đa ra một phơng pháp trong đó có thể nâng cao chất lợng ảnh qua việc làm bình đẳng tầm quan trọng giữa các mức xám. Tuy nhiên, có thể trong một vài ứng dụng ngời ta cần nâng cao mức xám hay một khoảng mức xám nào đó. Vì vậy, cần phải ánh xạ ảnh mức xám để lợc đồ mức xám của nó tuân theo một phân phối đặc biệt. Chúng ta thực hiện điều này bằng cách nào, hãy quay lại một chút với ảnh mức xám liên tục, để )(rp r và )(zp z là hàm mật độ xác xuất tơng ứng của ảnh gốc và ảnh ánh xạ riêng biệt. Để chuyển đổi ảnh gốc thành ảnh có lợc đồ mức xám các mức xám đồng đều chúng ta dùng hàm ánh xạ CDF, ví dụ: r r dprTs 0 )()( (4.23) Nếu ảnh ánh xạ đã có sẵn, thì các mức xám của nó có thể đợc ánh xạ sang phổ lợc đồ mức xám đồng đều qua CDF nh sau: z z dpzGv 0 )()( (4.24) 59 Bởi vì ảnh ánh xạ vừa nhận đợc từ ảnh gốc, thì sau đó nó sẽ ánh xạ vào cùng ảnh có lợc đồ mức xám đợc làm bằng nhau (đồng bộ). Đó là: )()( rTzG (4.25) hay z r rz dpdp 0 0 )()( (4.26) Trong đó r và z là hai biến tơng ứng thể hiện mức xám của ảnh gốc và ảnh ánh xạ. Cái ta cần là thu đợc z nh là một hàm trực tiếp của r, nghĩa là: )())(( 1 rFrTGz (4.27) Để có đợc giải pháp theo công thức giải tích (4.26) cho trờng hợp chung có thể là khó khăn hoặc không thể làm đợc. Tuy nhiên, giải pháp đồ thị là rất có thể, và hình 4.13 minh hoạ thủ tục cho giải pháp này. Với một mức xám đợc chọn r 1 thu đợc T(r 1 ). Chiếu T(r 1 ) lên G(z) thu đợc mức xám ánh xạ z 1 . Bởi vì trong thực tế chúng ta thờng xử lý ảnh rời rạc chứ không phải ảnh liên tục, nên CDF sẽ đợc viết lại nh sau: r i o inrT 1 )()( (4.28) và z i m inzG 0 )()( (4.29) ở đây n 0 (i) và n m (i) là các mảng mà phần tử thứ i của nó chứa tổng số mức xám, có giá trị i trong ảnh gốc và ảnh ánh xạ. Sự xấp xỉ nảy sinh trong trờng hợp rời rạc, dẫn đến khó có thể đạt đợc các giá trị của r và z để )(rT đúng bằng )(zG . Tuy nhiên có thể tìm một giá trị của z sao cho với bất kỳ r biểu thức sau đây đợc thoả mãn: )1()()1( zGrTzG (4.30) (xem hình 4.14.) G(z) G(z 1 ) r 1 r z 1 z T(r) T(r 1 ) 60 Hình 4.13 Biểu diễn đồ thị của công thức (4.26). Hình 4.14 Biểu diễn đồ thị của trờng hợp mẫu. Do vậy, dựa trên các vấn đề thảo luận ở trên và hình 4.14 chúng ta có thể thực hiện từng bớc theo thủ tục sau để xác định ánh xạ giữa r và z. 1. Quy định lợc đồ mức xám cho ảnh ánh xạ. 2. Tính CDF )(rT và )(zG riêng rẽ sử dụng công thức (4.28) và (4.29) 3. Cho r = 0 đến 255 ( bớc nhảy bằng 1) thực hiện: a. Tìm z sao cho )1()()( zGrTzG b. Lu giữ trong mảng F, tại vị trí r, giá trị bằng của z; nghĩa là F(r) = z. Thủ tục trên mang lại mảng ánh xạ ))(()( 1 rTGrFz Kết quả này có thể đợc dùng để chuyển đổi ảnh gốc sang một ảnh có mức xám xấp xỉ với mức xám đã quy định. Với thủ tục trên để thực hiện chúng ta cần chia khoảng )(rT và )(zG vì thế chúng cung cấp cùng khoảng động của các mức xám. Chú ý rằng )(rT và )(zG là những hàm ánh xạ chúng ánh xạ ảnh gốc và ảnh chuyển G(z) r 1 r z 1 z T(r) 61 đổi thành ảnh san bằng mức xám. Vì thế, công thức (4.28) và (4.29) sẽ đợc viết lại nh sau: 255 )0()255( )0()( )( 0 TT Tin rT r i o (4.31) 255 )0()255( )0()( )( 0 GG Gin zG z i m (4.32) Việc quy định lợc đồ mức xám. Có một kỹ thuật chuẩn để sinh ra lợc đồ mức xám cho ảnh chiếu. Những kỹ thuật này đợc mô tả sau đây. Phân phối Gauss. Phân phối cho rằng 22 2/)( )( z ezh (4.33) Trong đó = kỳ vọng toán học hay trị trung bình. = sai phơng. Chú ý rằng h(z) giảm khoảng 90 phần trăm giá trị tối đa của nó tại 073.1/ z Do đó, biểu hiện bề rộng của phân phối. Tham số và có thể đợc điều chỉnh cho đến khi đạt đợc kết quả mong muốn trên ảnh ra. Cần chú ý rằng thực hiện phép chiếu các lợc đồ mức xám khác nhau phụ thuộc vào ảnh, bởi vậy cần phải tăng cờng ảnh. Tuyến tính từng đoạn (Piecewise linear). Một cách tiếp cận xen kẽ linh động hơn phơng pháp Gaussian là sử dụng các đoạn thẳng để biểu diễn phân phối mong muốn. Hình 4.15 đa ra phơng pháp nh vậy. Các tham số m HL ,, và h có thể đợc thay đổi đến tận khi thu đợc ảnh mong muốn. Hình 4.15 có thể đợc trình bày nh sau: L H 0 m 255 z h k j 1 p(z) 62 Hình 4.15 Hàm tuyến tính từng đoạn. 1. Tính: )tan( 1 1 1 L j m y )tan( Ljj yx 2. Với j xz 0 )tan( )( L z z zp và với mzx j jj j j z yxz xm yh zp )()( 3. Tính: )tan(255 25 )tan( 1 1 Hkk H k yx m y 4. Với k xzm kk k k z yxz mx hy zp )()( và với 255 zx k )255( 255 )( z x y zp k k z Phơng pháp xen kẽ trên, chỉ sử dụng hai đoạn thẳng, đợc chỉ trên hình 4.16. Với mz 0 L L z z m h zp )( . Hoặc, chúng ta muốn ánh xạ ảnh mức xám nằm giữa 0 và 25 5, chúng ta có thể thay đổi k s nh sau: 25 5 025 5 0 ss ss s k k (4 .22 ) Chú ý rằng vì công thức (4 .21 ) là một xấp xỉ của công. chúng ánh xạ ảnh gốc và ảnh chuyển G(z) r 1 r z 1 z T(r) 61 đổi thành ảnh san bằng mức xám. Vì thế, công thức (4 .28 ) và (4 .29 ) sẽ đợc viết lại nh sau: 25 5 )0( )25 5( )0()( )( 0 TT Tin rT r i o . nền sáng. Khi chụp ảnh này đã không dùng đèn để giảm độ sáng của nền. ảnh sau khi san bằng mức xám đợc cho trên hình 4.12b. Dễ dàng nhận thấy đợc sự thay đổi so với ảnh gốc. ảnh cung cấp cho

Ngày đăng: 29/07/2014, 04:20