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

8 291 1
Giáo trình xử lý ảnh y tế Tập 1b P6 pps

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

Thông tin tài liệu

{ if(zn2>max) max=zn2; if(zn2<min) min=zn2; } 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,10); printf("Filtering is now completed."); printf("\nMax. and min. values in filtered image =>%f,%f",max, min); printf("\n Next, bias will be adjusted and the final "); printf("\n filtered image will be saved in a file."); 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"); 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 255. */ zn2= (zn2-min)*(float)255.0/(max-min) + (float)0.4; 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."); } Chương trình 3.1 có thể được dùng để lọc ảnh với bộ lọc FIR với bất kỳ đặc tính nào. Tuy nhiên, vì mục đích của chúng ta là sử dụng bộ lọc đối xứng tuần hoàn trên ảnh, việc tính toán sẽ hiệu quả hơn nếu ta thay đổi chương trình với sự cải tiến của hệ số tuần hoàn. Trước khi thực hiện bất kỳ thay đổi nào trong chương trình 3.1 chúng ta sẽ sử dụng nó để lọc một ảnh. Ảnh dùng để kiểm tra là ảnh nằm trên đĩa kèm theo có tên IKRAM.IMG. Yêu cầu khi chạy chương trình là chúng ta phải thu được hệ số của bộ lọc FIR. Điều này dễ dàng đạt được bằng cách tận dụng chương trình với quy tắc Simpon để gấp đôi ảnh. Điều này được cung cấp trong chương 2, chương trình 2.1. Bộ lọc thông thấp đối xứng tuần hoàn và bộ lọc thông cao Butterworth, mỗi bộ với điểm 0.3 3-dB, thực hiện như bộ lọc FIR kích thước 5  5, được tận dụng. Hình 3.2a cho thấy ảnh gốc (IKRAM.IMG). Hình 3.2b giới thiệu ảnh lọc thông cao. Hình 3.2c là ảnh lọc thông thấp. Đúng như sự mong đợi, ảnh lọc thông cao rõ nét hơn ảnh gốc. Ảnh lọc thông thấp mờ hơn. Mặc dù vậy, ảnh lọc thông cao dường như thiếu sự phân lượng mức xám. Sự giảm bớt phân lượng mức xám có thể được coi là do hầu hết các ảnh có phổ giảm nhanh như một hàm của tần số. Một phương pháp cho ảnh kết quả rõ hơn và giữ được sự phân lượng mức xám cao hơn là trung bình ảnh gốc với ảnh lọc thông cao. Kết quả của phương pháp này được cho trong hình 3.3. Nếu bạn chưa mua được một khung hình số và một màn hình đen trắng, bạn vẫn có thể hiển thị ảnh mức xám trên màn hình VGA thông qua bộ thích ứng VGA. Chương trình thực hiện điều này được cung cấp sẵn trong đĩa kèm theo. (a) Hình 3.2 (a) Ảnh IKRAM.IMG gốc. (b) Ảnh lọc thông cao của IKRAM.IMG. (c) Ảnh lọc thông thấp của IKRAM.IMG. Bài tập 3.1 Viết chương trình C để trung bình 2 ảnh. Nếu ảnh thứ hai là kết quả của lọc ảnh thứ nhất, thì ảnh thứ hai sẽ được dịch dọc và/hoặc ngang so với ảnh thứ nhất. Chương trình sẽ nhắc nhở người sử dụng nhập lượng dịch chuyển. Hình 3.3 Ảnh gốc đã thêm ảnh lọc thông cao. Chương trình 3.2 "FIRSYM.C". Lọc ảnh dùng bộ lọc tuần hoàn đối xứng. /*Program 3.2 “FIRSYM.C”. Filltering of digital images using circular symmetricals.*/ /*This Program is for filtering images using the algorithm described in the text. The filter type is FIR. Circular symmetry is assumed. The FIR filter coefficients can be obtained using the Simpson's double integration program described in Chapter II. */ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <alloc.h> #include <conio.h> #include <io.h> #include <ctype.h> #include <string.h> void main() { int i,j,n1,n2,N,NT,N2,image_width, image_length,k1,k2,k; int true_length,true_width,ind; char file_name[14]; unsigned char **w, ch; unsigned char *temp; float **h,max,min,diff; float nsq, zn2, tmp; FILE *fptr, *fptr1, *fptr_tmp; unsigned int sum; clrscr(); printf ("Enter file name containing FIR filter coefficients ->" ); scanf ( "%s", file_name); if((fptr=fopen(file_name, "r" ))==NULL) { printf("%s does not exist.",file_name ); exit(1); /* calculating order of filter. */ nsq=0; while(fscanf(fptr,"%f ", &tmp)!=EOF) nsq++; rewind(fptr); NT=sqrt(nsq); printf("Order of filter %d x %d",NT,NT); N=(NT-1)>>1; N2=N<<1 ; /* Allocating memory for filter coefficients h[i][j] */ h=(float **)malloc(NT*sizeof(float *)); for(i=0;i<NT;i++) *(h+i)=(float *)calloc(NT,sizeof(float)); printf("\n FILTER COEFFICIENTS.\n"); for(i=0;i<NT;i++) { for(j=0;j<NT;j++) { fscanf(fptr,"%f ", &h[i][j]); printf("%f ", *((*(h+i))+j)); } printf("\n"); } fclose(fptr); printf ("\.n Press any key to continue. Screen w ill be cleared."); getch(); clrscr(); printf ("FIR filter coeffients are taken from %s",file_name); printf("\nEnter 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); } 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); . hiện bất kỳ thay đổi nào trong chương trình 3.1 chúng ta sẽ sử dụng nó để lọc một ảnh. Ảnh dùng để kiểm tra là ảnh nằm trên đĩa kèm theo có tên IKRAM.IMG. Y u cầu khi ch y chương trình là chúng. ngang so với ảnh thứ nhất. Chương trình sẽ nhắc nhở người sử dụng nhập lượng dịch chuyển. Hình 3.3 Ảnh gốc đã thêm ảnh lọc thông cao. Chương trình 3.2 "FIRSYM.C". Lọc ảnh dùng. cao của IKRAM.IMG. (c) Ảnh lọc thông thấp của IKRAM.IMG. Bài tập 3.1 Viết chương trình C để trung bình 2 ảnh. Nếu ảnh thứ hai là kết quả của lọc ảnh thứ nhất, thì ảnh thứ hai sẽ được dịch

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