intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: Cinny Cinny | Ngày: | Loại File: PDF | Số trang:8

94
lượt xem
7
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Để hiểu tường tận, bạn phải đọc các chương theo đúng thứ tự mà nó được trình bày. Để hiểu đầy đủ thì yêu cầu phải chuẩn bị một số kiến thức cơ sở. Hiện nay, ngôn ngữ lập trình C được sử dụng phổ biến trong các bài toán kỹ thuật.

Chủ đề:
Lưu

Nội dung Text: Giáo trình xử lý ảnh y tế Tập 1b P6

  1. { if(zn2>max) max=zn2; if(zn2
  2. { 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
  3. 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.
  4. (a)
  5. 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
  6. 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 #include #include #include #include #include
  7. #include #include 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
  8. { 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);
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2