Giáo trình xử lý ảnh y tế Tập 1b P7 doc

8 253 0
Giáo trình xử lý ảnh y tế Tập 1b P7 doc

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

Thông tin tài liệu

image_length=nsq/image_width; printf("image length is %d", image_length); break; } fptr_tmp=fopen("temp_img.dat","w+"); gotoxy(70,25); textattr(WHITE+(GREEN<<4)+BLINK); cputs("WAIT"); max=(float)0.0; min=(float)255.0; true_length=(int)((float)image_length*0.90); true_width=image_width-NT; /* Allocating memory for Image Transfer Buffer, w. */ w=(unsigned char **)malloc(NT*sizeof(char *)); for(i=0;i<NT;i++) *(w+i)=(char *)calloc(image_width,sizeof(char)); /* Clear Image Transfer Buffer. */ for(i=0;i<NT;i++) for(j=0;j<image_width;j++) *((*(w+i))+j)=(unsigned char)0; /* Algorithm */ for(n1=0; n1<image_length;n1++) { gotoxy(1,8); printf (" Transferred line %-4d to image transfer buffer.",n1); /* Transfer row n1 of the image to the last row of w. */ for(j=0;j<image_width;j++) { ch=(unsigned char)fgetc(fptr); *((*(w+N2))+j) = ch; } for(n2=0; n2<image_width; n2++) { zn2=(float)0.0; for(k1=1; k1<=N; k1++) for(k2=1; k2<=N; k2++) { if (k1>=k2) continue; if( ((n2-k2)<0) || ((n2+k2)>=image_width) ) continue; if( ((n2-k1)<0) || ((n2+k1)>=image_width) ) continue; sum =(unsigned int)(*((*(w+N-k1))+(n2-k2))); sum+=(unsigned int)(*((*(w+N-k2))+(n2-k1))); sum+=(unsigned int)(*((*(w+N+k1))+(n2-k2))); sum+=(unsigned int)(*((*(w+N-k2))+(n2+k1))); sum+=(unsigned int)(*((*(w+N-k1))+(n2+k2))); sum+=(unsigned int)(*((*(w+N+k2))+(n2-k1))); sum+=(unsigned int)(*((*(w+N+k1))+(n2+k2))); sum+=(unsigned int)(*((*(w+N+k2))+(n2+k1))); zn2+=(*((*(h+N+k1))+(N+k2)))*((float)sum); } for(k=1;k<=N;k++) { if( ((n2-k)<0) || ((n2+k)>=image_width) ) continue; sum=(unsigned int)(*((*(w+N-k))+(n2-k))); sum+=(unsigned int)(*((*(w+N+k))+(n2-k))); sum+=(unsigned int)(*((*(w+N-k))+(n2+k))); sum+=(unsigned int)(*((*(w+N+k))+(n2+k))); zn2+=(*((*(h+k+N))+(k+N)))*((float)sum); sum=(unsigned int)(*((*(w+N))+(n2-k))), sum+=(unsigned int)(*((*(w+N-k))+n2)); sum+=(unsigned int)(*((*(w+N))+(n2+k))); sum+=(unsigned int)(*((*(w+N+k))+n2)); zn2+=(*((*(h+N))+(N+k)))*sum; } sum=(unsigned int)(*((*(w+N))+n2)); zn2+=(*((*(h+N))+N))*((float)sum); /* Excluding boundary values from determining the maximum and minimum. */ if((n1>N2)&&(n1<true_length)&&(n2>N2)&&(n2<true_width)) { if(zn2>max) max=zn2; if(zn2<min) min=zn2; } /*************************************************** Maximum and minimum is determined only for the region extending from (NT,NT) to (true_width, true_length); where, true_width=image_width-NT and true_length=image_length*0.9. The reason for this is that the last few lines in the digitized image are usaully not part of the original raster scanned analog image. These last lines are lost in the retrace between frames. Since we also make the assumption of zero boundary conditions which could result in an abrupt transition in gray levels we exclude the first NT lines, and the first and last NT columns from the filtered image in determining the maximum and minimum. *****************************************************/ fprintf(fptr_tmp,"%f ",zn2); /* The buffer is implicit in this last statement. */ } /* shift rows of w */ temp=*w; for(j=0; j<N2; j++) *(w+j)=*(w+j+1); *(w+N2)=temp; } fclose(fptr); /* close input-image file */ gotoxy(70,25); textattr(WHITE+(BLACK<<4)); cputs ( " "); gotoxy(1,11); printf("Filtering is now completed."); printf("\nMax. and min. values in filtered image ->%f , %f" ,max,min); printf("\nNext , adjusting bias and storing final image. "); rewind(fptr_tmp); again: gotoxy(1,15); printf ( " "); gotoxy(1,15) ; printf ("Enter file name for filtered image ->" ) ; scanf("%s " , file_name); if((stricmp(" temp_img.dat " , file_name))==0 ) { printf ("This is a reserved file name. Use some other name."); goto again; } gotoxy(1,16); printf(" "); ind=access(file_name,0); while(!ind) { gotoxy(1,16); 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,15); printf( " "); gotoxy(1,15); 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"); diff=max-min; for(n1=0; n1<image_length; n1++) { gotoxy(1,17); printf("scaling line %-4d.",n1); for(n2=0; n2<image_width; n2++) { fscanf(fptr_tmp,"%f ",&zn2); /* scaling output image between 0 and (max+min). */ zn2= ((zn2-min)/diff) * (float)255.0; putc((unsigned char)zn2,fptr1); } } fclose(fptr_tmp); remove("temp_img.dat"); gotoxy(70,25); textattr(WHITE+(BLACK<<4)); cputs(" "); fclose(fptr1); /* close output-image file */ gotoxy(1,20); printf ( "DONE."); } Bài tập 3.2 1. Thiết kế bộ lọc thông cao dùng hàm Butterworth với 3-dB điểm tần số 0.4, 0.5, 0.6, 0.7, 0.8 và 0.9. Sử dụng phương pháp được mô tả trong chương 2. 2. Chạy mỗi bộ lọc trên ảnh IKRAM.IMG sử dụng chương trình 3.2 với bộ lọc tuần hoàn đối xứng. 3. Bạn nhận thấy gì trên các ảnh lọc khác nhau, Ví dụ, làm nổi cực đại ảnh với ngưỡng tần số 3-dB? Chúng mờ hơn, nhiễu hơn, v.v . Giải thích những gì quan sát được. 4. So sánh thời gian thực hiện chương trình 3.2 đã được viết cho bộ lọc tuần hoàn đối xứng với chương trình 3.1 được viết cho trường hợp chung. 5. ở phần nào trong chương trình 3.2 hay 3.1 dễ bị tắc nghẽn? (Ví dụ, phần của chương trình có hiệu quả nhất trong việc tăng thời gian thực hiện). 6. Phát triển lại cả hai chương trình 3.1 và 3.2 để chúng có thể thao tác trực tiếp trên màn hình số hoá. Chạy chương trình lọc sẽ cung cấp cho bạn khái niệm chính xác cái gì bộ lọc có thể làm và không thể làm được đối với ảnh. Tuy nhiên, phần mềm lọc ảnh chỉ có thể được tận dụng cho xử lý ngoại tuyến của ảnh số, ví dụ, một ảnh được lưu trữ trên ổ cứng và sau đó được xử lý bằng máy tính. Thời gian xử lý sẽ phụ thuộc vào tốc độ của máy tính và hiệu quả của phần mềm thực hiện. Xử lý ngoại tuyến sẽ rất hữu ích trong lĩnh vực mà thời gian không phải là yêu cầu chính, như trong tăng cường ảnh của ảnh x-quang, một ảnh cũ, ảnh thiên văn của các ngôi sao. Xử lý ngoại tuyến thường được sử dụng cho các bài toán tự nhiên. Ví dụ, x-quang, đầu tiên phim x-quang được lấy ra và sau đó được xử lý, vì thế xử lý là ngoại tuyến trong tự nhiên. Xử lý trực tuyến hay xử lý thời gian thực, hay nói cách khác, xử lý ảnh cùng với tốc độ mà chúng được truyền bằng camera hoặc bằng thiết bị ảnh hay một thiết bị độc lập khác. Trong một số trường hợp, xử lý thời gian thực có nghĩa là 30 khung ảnh/giây, ở đây một khung ảnh là một ảnh hoàn chỉnh. Nếu kích thước của một ảnh là 512  512 điểm ảnh, thì bộ xử lý phải có khả năng xử lý 512  512  30 điểm ảnh/giây = 7.86432 triệu điểm ảnh/giây trong yêu cầu để xử lý ảnh trong thời gian thực. Xử lý thời gian thực không là chủ đề đề cập trong chương này, nó sẽ được nói đến trong chương 16. Mục đích của chủ đề này nhằm giúp bạn đánh giá nguyên nhân đôi khi cần đến những phần cứng được thiết kế đặc biệt. Trong chương 4 chúng ta sẽ đi đến những kỹ thuật khác nhau dùng để tăng cường ảnh. 3.5 Hiển thị ảnh Nếu như bạn chưa có được thiết bị số hoá với bộ đệm ảnh và một màn hình đen trắng để hiển thị các ảnh mức xám, bạn vẫn có thể hiển thị những ảnh này trên màn hình VGA hoặc màn hình đa tần số. Tất nhiên, bạn phải cần đến một vỉ mạch VGA với 512 KB bộ nhớ hoặc nhiều hơn. ảnh mức xám được cung cấp trên đĩa kèm theo (chúng có phần mở rộng là *.IMG) hầu hết có kích thước 256  256 điểm ảnh. Chương trình dùng để hiển thị ảnh trên vỉ mạch VGA cũng được cung cấp trên đĩa kèm theo. Đọc tệp README.DOC để xem chi tiết. Những chương trình này chạy dưới DOS và làm việc với hầu hết các vỉ mạch video. Nếu bạn có vấn đề khi hiển thị ảnh dưới DOS, mà máy của bạn lại cài đặt Windows, bạn có thể dùng trình Paint Brush để hiển thị ảnh. Để hiển thị ảnh dưới Windows, trước hết bạn cần phải chuyển đổi nó sang dạng bitmap. Một ảnh được Windows bitmap hoá thường có phần mở rộng là BMP. Để chuyển đổi một ảnh bất kỳ trên đĩa của bạn sang dạng bitmap bạn hãy sử dụng chương trình BIN2BMP.EXE trên đĩa của bạn. Chú ý rằng các ảnh có kích thước 262,144 byte trên đĩa của bạn là các ảnh màu với độ phân giải 512  256 điểm ảnh và 15 bit/màu, những ảnh này chúng ta sẽ sử dụng trong chương 11. Ảnh đen trắng sẽ được hiển thị dưới Windows chỉ là những ảnh mức xám nếu như Windows đặt ở chế độ 256 màu. Bạn có thể tự đặt chế độ này bằng cách kích đúp chuột vào nhóm "Main", sau đó kích đúp chuột vào biểu tượng "Windows Setup". Kích chuột vào "Option", tiếp theo bấm chuột vào "Change System Settings". Kích chuột vào menu "Display", một menu sẽ hiện ra. Đến mục: "Other display (requires disk from OEM)”. Đưa đĩa driver đi kèm với vỉ mạch VGA và thực hiện theo chỉ dẫn. Bạn cũng có thể phải cần đến đĩa cài đặt của Windows để hoàn thành việc cài đặt. 43 CHƯƠNG 4 LÀM NỔI ẢNH 4.1 Chỉ dẫn Nội dung của phần này là giới thiệu một số công cụ cơ bản dùng để tăng cường độ phân giải của ảnh cho con người cảm nhận. Những vấn đề được đề cập đến trong phần này:  Mô hình ảnh.  Lọc đồng hình.  Lọc tương phản pha.  Thay đổi biểu đồ phân bố mức xám.  Lọc trung vị. Chúng tôi cũng cung cấp cho bạn các chương trình C và kết quả chạy các chương trình này trên một số ảnh để kiểm tra. Như các chương khác, một số bài tập được cho kèm theo. Các bài tập này giúp cho bạn hiểu rõ vấn đề và có sự đánh giá tốt hơn ứng dụng của lĩnh vực này. 4.2 Mô hình phản xạ độ sáng Một bức ảnh được tạo nên qua phép chiếu của một cảnh trong không gian ba chiều lên một mặt hai chiều hay mặt phẳng. Hàm phân phối cường độ sáng, f(x,y), thể hiện trên mặt phẳng này đặc tính của ảnh và được coi rằng là một mô hình phụ thuộc vào hai yếu tố. Yếu tố thứ nhất là sự phản chiếu của rất nhiều vật thể trong cảnh và ký hiệu là r(x,y). Yếu tố thứ hai là tổng độ sáng nhận được từ các vật thể, yếu tố này sẽ được ký hiệu là i(x,y). Cường độ ánh sáng, f(x,y), và độ chói, i(x,y), là hàm phụ thuộc vào cả hai giá trị x và y.     ),(0 ),(0 yxi yxf (4.1) hệ số phản xạ, r(x,y), bị giới hạn bởi 0 và 1. 1),(0   yxr (4.2) Trong đó r(x,y) = 0 chỉ ra rằng ở đó ánh sáng bị hấp thụ toàn phần và r(x,y) = 1 chỉ ra rằng ở đó ánh sáng phản xạ toàn phần. Nếu một bề mặt có độ phản xạ bằng 0, thì hàm cường độ sáng của ảnh cho bề mặt đó cũng bằng 0. Nếu một bề mặt có độ phản xạ bằng 1, thì f(x,y) sẽ bằng với độ sáng nhận được bởi bề mặt này. 44 Theo định nghĩa: ),( ),( ),( yxi yxf yxr  (4.3) ),(),(),( yxiyxryxf  (4.4) ở đây r(x,y) đặc trưng cho các vật thể trong ảnh. Khi các vật mang các chi tiết trong ảnh như đường viền giữa các vật thể, các đường biên trong vật thể, , thì hàm r(x,y) sẽ chứa các tần số cao hơn i(x,y), hàm đặc trưng cho độ chói và thường có thay đổi khá đều đặn trên ảnh. Một phương pháp dùng để tăng cường chất lượng của ảnh là làm giảm sự tác động của yếu tố độ sáng và tăng cường các chi tiết của ảnh. Nó được thực hiện bằng cách chia ảnh thành hai khối khi đi qua bộ nhấn tần số cao. Các bước xử lý tiếp được mô tả trong một loại bộ lọc đặc biệt gọi là bộ lọc đồng hình. 4.3 Lọc đồng hình Một giải pháp cung cấp độ nổi cho các vật thể trong một ảnh đã cho là làm giảm tác động của độ chói. Nó được thực hiện bằng cách đầu tiên chia tín hiệu ảnh thành hai thành phần r(x,y) và i(x,y), và sau đó tăng cường thành phần tần số cao. Điều này có thể thực hiện bằng cách lấy logarit của hàm cường độ sáng f(x,y). Kết quả sau đó được lọc qua bộ lọc 2-D có đặc tính như trong hình 4.1. Hình 4.1 Biểu diễn dạng bộ lọc đồng hình. Lấy đối lôgarit kết quả cho ta kết quả cuối cùng. Toàn bộ quá trình này được mô tả ở hình 4.2 hoặc theo các biểu thức sau: )),(ln()),(ln()),(ln( yxiyxryxf   (4.5) ),(*)),(ln(),( yxhyxfyxo  (4.6) H(  1 ,  2 D(  1 ,  2 ) D 0  L  H . với ảnh. Tuy nhiên, phần mềm lọc ảnh chỉ có thể được tận dụng cho xử lý ngoại tuyến của ảnh số, ví dụ, một ảnh được lưu trữ trên ổ cứng và sau đó được xử lý bằng m y tính. Thời gian xử lý sẽ. tuyến hay xử lý thời gian thực, hay nói cách khác, xử lý ảnh cùng với tốc độ mà chúng được truyền bằng camera hoặc bằng thiết bị ảnh hay một thiết bị độc lập khác. Trong một số trường hợp, xử. hợp, xử lý thời gian thực có nghĩa là 30 khung ảnh/ gi y, ở đ y một khung ảnh là một ảnh hoàn chỉnh. Nếu kích thước của một ảnh là 512  512 điểm ảnh, thì bộ xử lý phải có khả năng xử lý 512

Ngày đăng: 10/07/2014, 22:20

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan