Giáo trình xử lý ảnh y tế Tập 3 P19 pdf

8 305 0
Giáo trình xử lý ảnh y tế Tập 3 P19 pdf

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

Thông tin tài liệu

400 /*Program 13.12 "QUANCHK.C". Program to display quantized blocks.*/ /* This program displays the quantized file block by block. Values that were not retained by the quantizer program are typed out as zeros. */ #include <stdio.h> #include <conio.h> #include <io.h> #include <alloc.h> #include <string.h> #include <process.h> Hình 13.19 Lược đồ mức xám của các hệ số AC đã được chia. void main() { int i,j,k1,k2,N,N1,NB,NS,Nt,*T,k,kk; unsigned char *buff; FILE *fptr,*fptr2; char file_name[14],ch,*imaget,temp[14]; clrscr(); printf("\n"); printf("Enter file name in which you stored quantized image,\n"); textattr( BLUE+(YELLOW<<4)+BLINK); cputs( " Do NOT give any extension - -> " ) ; scanf( "%s" , file_name); 401 textattr(WHITE+(BLACK<<4)); imaget=strchr(file_name,'.'); if( imaget!=NULL) { j=strcspn(file_name,"."); file_name[j]='\0'; } imaget=strcpy(temp,file_name); imaget=strcat(temp,".hdr"); fptr=fopen(temp,"rb"); if(fptr==NULL) { printf("\nNo such file exists.\n"); exit(1); } NB=getc(fptr); N=getc(fptr); N=getc(fptr)+(getc(fptr)<<8); Nt=NB*NB ; NS=NB*N ; N1=N/NB ; buff=(unsigned char *)malloc(NS*sizeof(char)); T=(int *)malloc(Nt*sizeof(int)); kk=Nt/8 ; fread(buff,sizeof(char),kk,fptr); /* Zonal Sampling matrix. */ k=0; for(i=0;i<kk;i++) { for(j=0;j<8;j++) { T[k]=buff[i]&(128); T[k] >>=7; k++; buff[i]<<=1; } } fclose(fptr); imaget=strcpy(temp,file_name); imaget=strcat(temp,".AC"); fptr=fopen(temp,"rb"); if(fptr==NULL) { 402 printf("\nNo such file exists.\n"); exit(1); } imaget=strcpy(temp,file_name); imaget=strcat(temp,".DC"); fptr2=fopen(temp,"rb"); if(fptr2==NULL) { printf("\nNo such file exists.\n"); exit(1); } clrscr(); gotoxy(1,20); printf("Press any key to continue, or ESC to exit."); gotoxy(1,1); for(i=0;i<N1;i++) { for(j=0;j<N1;j++) { for(k1=0;k1<NB;k1++) { for(k2=0;k2<NB;k2++) { if(T[k1*NB+k2]==0) printf(" %3d",0); else { if((k1+k2)==0) printf(" %3d",getc(fptr2)*2); else printf(" %3d",getc(fptr)); } } printf("\n"); } ch=getch(); if(ch==27) exit(1); clrscr(); gotoxy(1,20); printf("Press any key to continue, or ESC to exit."); gotoxy(1,1); } } } 403 Thuật toán khôi phục lượng tử hoá được mô tả bởi chương trình C sau đây. Chú ý là biểu thức khôi phục được mô tả bằng ijijijij crc   ) ~ ( (13.67) ở đây ij c ~ là các hệ số lượng tử. Chương trình 13.13 "DEQUANTZ.C" Chương trình đảo ngược lượng tử hoá của tệp đã được lượng tử hoá trước. /*Program 13.13 "DEQUANTZ.C". Program to dequantize a previously quantized file.*/ /* This program restores a file quantized by program 'QUANTIZE.EXE' . The output file can be used as input to IFCT2D.EXE to obtain the original image.*/ #include <stdio.h> #include <math.h> #include <conio.h> #include <io.h> #include <alloc.h> #include <string.h> #include <process.h> void main() { int i,j,NB,N,N1,NS,NQ,xt,yt,k; int kj,k1,k2,kk1,kkb,loc,ch,kk2,Nt,kk,NQ1; float *buffo,*sigma,*r,*mu; char file_name[14],*imaget,temp[14]; unsigned char *buffi; int *T; FILE *fptri,*fptro,*fptri2; clrscr(); printf("\nEnter file name in which you stored quantized image,\n "); textattr(BLUE+(YELLOW<<4)+BLINK); cputs(" Do NOT give any extension > "); scanf("%s",file_name); textattr(WHITE+(BLACK<<4)); 404 imaget=strchr(file_name,'.'); if(imaget!=NULL) { j=strcspn(file_name,"."); file_name[j]='\0'; } imaget=strcpy(temp,file_name); imaget=strcat(temp,".hdr"); fptri=fopen(temp,"rb"); if(fptri==NULL) { printf("\nNo such file exists.\n"); exit(1); } NB=getc(fptri); NQ=getc(fptri); N=getc(fptri)+(getc(fptri)<<8); Nt=NB*NB; NS=NB*N ; N1=N/NB; buffi=(unsigned char *)malloc(NS*sizeof(char)); buffo=(float *)malloc(NS*sizeof(float)); T=(int *)malloc(Nt*sizeof(int)); sigma=(float *)malloc(Nt*sizeof(float)); mu=(float *)malloc(Nt*sizeof(float)); r=(float *)malloc(NQ*sizeof(float)); kk=Nt/8; fread(buffi,sizeof(char),kk,fptri); /* Zonal Sampling matrix. */ k=0 ; for(i=0;i<kk;i++) { for(j=0;j<8;j++) { T[k]=buffi[i]&(128); T[k]>>=7; k++; buffi[i]<<=1; } } /* standard deviations and means.*/ fread(buffo,sizeof(float),(Nt<<1)+NQ,fptri ) ; for(i=0; i<Nt; i++) 405 { k=i<<1; sigma[i]=buffo[k]; mu[i]=buffo[k+1]; } k=Nt<<1; /* reconstruction levels.*/ for(i=0; i<NQ ; i++) { r[i]=buffo[k+i]; } fclose(fptri); imaget=strcpy(temp, file_name); imaget=strcat(temp, ".AC"); fptri=fopen(temp,"rb"); if(fptri==NULL) { printf("\nNo such file exists.\n"); exit(1); } imaget=strcpy(temp,file_name); imaget=strcat(temp,".DC"); fptri2=fopen(temp,"rb"); if(fptri2==NULL) { printf("\nNo such file exists.\n"); exit(1); } printf("\nEnter file name to store dequantized file- ->"); scanf("%s",file_name); fptro=fopen(file_name,"wb"); xt=wherex(); yt=wherey(); gotoxy(70,25); textattr(RED+(LIGHTGRAY<<4)+BLINK); cputs("WAIT"); gotoxy(xt,yt); NQ1=NQ>>1; for(i=0;i<N1;j++) { for(j=0;j<N1;j++) 406 { kj=j*NB; for(k1=0;k1<NB;k1++) { kk1=k1*N; kkb=k1*NB; for(k2=0;k2<NB;k2++) { if((k1+k2)==0) { buffo[kj]=(float)getc(fptri2)*2.0; continue; } else { loc=kk1+k2+kj; kk2=kkb+k2; if(T[kk2]==0) ch=NQ1; else ch=getc(fptri); buffo[loc]=r[ch]*sigma[kk2]+mu[kk2]; } } } } fwrite(buffo,sizeof(float),NS,fptro); } fcloseall(); xt=wherex(); yt=wherey(); gotoxy(70,25); textattr(WHITE+(BLACK<<4)); cputs(" "); gotoxy(xt,yt); } Bài tập 13.13 1. Khôi phục ảnh KARENQ rút ra từ bài tập 13.12. 2. áp dụng IFCT.EXE trên file đã khôi phục. 3. Hiển thị kết quả và so sánh với ảnh gốc. 4. Làm lại bài tập 13.11 và làm lại các bước từ 1 đến 3 của bài tập này, nhưng lần này dùng: a. Tỷ lệ các hệ số giữ lại là 0.25. 3 bit lượng tử hoá. 407 b. Tỷ lệ các hệ số giữ lại là 0.15. 3 bit lượng tử hoá. c. Hệ số các chi tiết giữ lại là 0.1. 5 bit lượng tử hoá. 5. So sánh kết quả rút ra từ bước 4. Bài tập 13.14 Làm lại bài tập 13.13 trên ảnh IKRAM.IMG. Một phương pháp nén ảnh khác bằng mã hoá ảnh là phương pháp định vị bit. Với phương pháp này bạn không cần mã hoá Huffman. Phương pháp này dựa trên sự định vị số khác nhau của các bit cho hệ số dựa trên giá trị đóng góp của các hệ số này khi khôi phục lại ảnh từ các giá trị FCT của nó. Cũng như các chú ý từ phần trên, các hệ số với sai lệch cao hơn sai lệch chuẩn thì sẽ mang nhiều tin tức hơn các hệ số có sai lệch ít hơn sai lệch chuẩn. Vì vậy số bit cho các hệ số phụ thuộc vào sai lệch chuẩn của nó. Nếu bpp được cho, tổng số các bit xác định cho khối được cho bởi B = bpp  NB  NB (13.68) ở đây NB  NB là kích thước của khối ảnh; và bit quy đổi được cho là                             2 2 log 2 1 ,0.0max)( ij ij b (13.69) ở đây b ij là số các bit quy đổi cho hệ số (i,j) và  là một biến được thay đổi cho đến khi biểu thức sau thoả mãn:     NB i NB j ij Bb 0 0 (13.70) ảnh nén. ảnh nén. ảnh. 2-D FCT Lư ợng tử hoá Mã hoá Huffman cho hệ số AC. RLC c ủa hệ số DC. Giải mã Huffman h ệ số AC. Giải mã RLC của hệ số DC. Lư ợng tử hoá ngư ợc. Đảo 2- D FCT ảnh giải nén. . xt=wherex(); yt=wherey(); gotoxy(70,25); textattr(WHITE+(BLACK<<4)); cputs(" "); gotoxy(xt,yt); } Bài tập 13. 13 1. Khôi phục ảnh KARENQ rút ra từ bài tập 13. 12. 2 phục. 3. Hiển thị kết quả và so sánh với ảnh gốc. 4. Làm lại bài tập 13. 11 và làm lại các bước từ 1 đến 3 của bài tập n y, nhưng lần n y dùng: a. Tỷ lệ các hệ số giữ lại là 0.25. 3 bit lượng. ) ~ ( ( 13. 67) ở đ y ij c ~ là các hệ số lượng tử. Chương trình 13. 13 "DEQUANTZ.C" Chương trình đảo ngược lượng tử hoá của tệp đã được lượng tử hoá trước. /*Program 13. 13 "DEQUANTZ.C".

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

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

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

Tài liệu liên quan