Để hiểu tường tận, bạnphả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.
Nội dung trích xuất từ tài liệu:
Giáo trình xử lý ảnh y tế Tập 1b P6 { if(zn2>max) max=zn2; if(zn2 { 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+(GREENcputs( );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ỳ đặctí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ầnhoà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ươngtrì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ằmtrên đĩa kèm theo có tên IKRAM.IMG. Yêu cầu khi chạy chương trình là chúng taphả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ậndụng chương trình với quy tắc Simpon để gấp đôi ảnh. Điều này được cung cấptrong 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ọcthông cao Butterworth, mỗi bộ với điểm 0.3 3-dB, thực hiện như bộ lọc FIR kíchthước 5 5, được tận dụng. Hình 3.2a cho thấy ảnh gốc (IKRAM.IMG). Hình3.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ôngthấ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ứcxá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 ảnhlọ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ẫncó 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.1Viết chương trình C để trung bình 2 ảnh. Nếu ảnh thứ hai là kết quả của lọc ảnhthứ 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 imagesusing circular symmetricals.*//*This Program is for filtering images using thealgorithm described in the text. The filter typeis FIR. Circular symmetry is assumed.The FIR filter coefficients can be obtained using theSimpsons double integration program described inChapter II. */#include #include #include #include #include #include #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 { fscanf(fptr,%f , &h[i][j]); printf(%f , *((*(h+i))+j)); } printf(
); } fclose(fptr);printf(.n Press any key to continue. Screen w ill becleared.);getch();clrscr();printf(FIR filter coeffients are taken from%s,file_name);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(
Press any key to exit.); getch(); exit(1); }nsq=filelength( fileno(fptr));printf(Is this a square image ?);printf(
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(
Image size = %d x %d, image_length, image_width); break; case n: printf(
Enter image_width-->); scanf(%d,&image_width); ...