1. Trang chủ
  2. » Công Nghệ Thông Tin

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

6 252 0
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 185,97 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chu kỳ lấy mẫu T dùng cho biến đổi song tuyến tính được chọn bằng chu kỳ quét dòng của tín hiệu truyền hình, và bằng 63.555 micro giây cho tiêu chuẩn U.S.. Chương trình C sau đây sẽ chi

Trang 1

C j!

=

N

0 i j

0 k

i k

i k

i k i k i N k

ở đây 



n

m

Cho tất cả m < n Cân bằng các biểu thức (15.17) và (15.18) cho ta mối quan hệ giữa các hệ số b j và a i:



 

N

i j

k

i k j i N k j k i k i N k j i k

b

0 0

) ( ) (

Nếu vector (N + 1) cột b = [b 0 , b 1 , , b N ] T và vector (N + 1) cột a = [ a 0 , a 1 , .,a N ] T biểu diễn các hệ số chuyển đổi và hệ số gốc thì b được tính theo a qua

phép nhân ma trận

b = Qa (15.20)

Ở đây q ịj là các phần tử của ma trận Q, cho như sau:

j

k

k j i N k i k i k i N k j i k

ij C C q

0

15.4 Chuyển một bộ lọc số 2-D thành bộ lọc 2-D tương tự

Đầu tiên thiết kế một bộ lọc số 2-D dùng kỹ thuật mô tả trong các chương trước, chúng ta có thể chiếu bộ lọc này thành bộ lọc 2-D tương tự dùng biến đổi song tuyến tính cho trong biểu thức (15.11) Nếu hàm truyền đạt của bộ lọc số 2-D cho bởi:





 

 

N

m N

n

n m mn

N

m N

n

n m mn

z z b

z z a z

z H

0 0

2 1

0 0

2 1 2

1, )

Và hàm truyền đạt của bộ lọc 2-D tương tự được cho bởi

 

 

 

 

N m

N n

n m mn

N m

N n

n m mn

z s d

z s c z

s H

0 0

0 0

) ,

Các hệ số c phụ thuộc vào các hệ số a theo công thức

Trang 2

Ở đây  T

Nn n

n n

c 0 , 1 , 2 , ,

_

Nn n

n n

a 0 , 1 , 2 , ,

_

 , và tương tự cho

các hệ số d và a Q là một ma trận (N + 1)  (N + 1) toàn bộ các phần tử cho bởi

biểu thức (15.21) Chu kỳ lấy mẫu T dùng cho biến đổi song tuyến tính được chọn

bằng chu kỳ quét dòng của tín hiệu truyền hình, và bằng 63.555 micro giây cho tiêu chuẩn U.S NTSC Lý do của việc này là làm cho bộ lọc tuần hoàn đối xứng ở trong miền chữ nhật bao bởi  a = {-  /T,  /T} và  u = {-  /T,  /T}, ở đây  a là tần

số tương tự theo chiều ngang và  d là tần số số theo chiều dọc

Chương trình C sau đây sẽ chiếu hàm truyền đạt IIR 2-D số vào hàm truyền đạt tương tự

Chương trình 15.1 “ANA2DIIR.C” Chuyển bộ lọc 2-D số vào bộ lọc 2-D tương tự

/* This program is for mapping a 2-D IIR filter

to a 2-D analog filter It also provides you

with data files for Plotting magnitude and

phase response */

#define T 63.555e-6

#define pi 3.14159

#define Tt (T)

#define M2 (M)

#define wa_start (-pi/T)

#include <stdio.h>

#include <math.h>

#include <alloc.h>

#include <io.h>

#include <conio.h>

#include <process.h>

void Transf_matrix(float *,int);

main()

{

float

**a,**b,**temp,*Q,c,s,NR,NI,DR,DI,D,ph,wa,wd,dwa,dwd; float wame,wamo,was,sum1,sum2,t1,t2,ph1,ph2,**phase; int i,j,m,n,sign,N,M,k;

FILE *fptr,*fptro1,*fptro2;

char file_name[14];

clrscr();

Trang 3

printf("\nEnter file name containing IIR filter coefficients >");

scanf("%s",file_name);

fptr=fopen(file_name,"r");

if(fptr==NULL)

{

printf("\nThis file does not exist.");

exit(1);

}

fscanf(fptr,"%d",&N);

a=(float **)malloc((N+1)*sizeof(float *));

for(i=0;i<=N;i++)

*(a+i)=(float *)malloc((N+1)*sizeof(float)); b=(float **)malloc((N+1)*sizeof(float *));

for(i=0;i<=N;i++)

*(b+i)=(float *)malloc((N+1)*sizeof(float));

for(i=0;i<=N;i++)

for(j=0;j<=N;j++)

{

fscanf(fptr,"%e %e ",&a[i][j],&b[i][j]);

printf("\n%e %e",a[i][j],b[i][j]);

}

printf("\n\n");

fclose(fptr);

/*Generating the transformation matrix */

Q=(float *)malloc((N+1)*(N+1)*sizeof(float)); Transf_matrix(Q,N);

/* for(i=0;i<=N;i++)

{

printf("\n");

for(j=0;j<=N;j++)

printf("%f ",Q[i*(N+1)+j]);

}*/

temp=(float **)malloc((N+1)*sizeof(float *)); for(i=0;i<=N;i++)

*(temp+i)=(float *)malloc((N+1)*sizeof(float));

/* Transforming the a-coefficients */

for(n=0;n<=N;n++)

{

for(i=0;i<=N;i++)

{

Trang 4

temp[i][n]=0.0;

for(j=0;j<=N;j++)

temp[i][n]+=Q[i*(N+1)+j]*a[j][n];

}

}

for(i=0;i<=N;i++)

for(j=0;j<=N;j++)

a[i][j]=temp[i][j];

/* Transforming the b-coefficients */

for(n=0;n<=N;n++)

{

for(i=0;i<=N;i++)

{

temp[i][n]=0.0;

for(j=0;j<-N;j++)

temp[i][n]+=Q[i*(N+1)+j]*b[j][n];

}

}

for(i=0;i<=N;i++)

for(j=0;j<=N;j++)

b[i][j]=temp[i][j];

printf("\nEnter file name to store");

printf(" coeffts of 2-D analog filter >");

scanf("%s",file_name);

fptr=fopen(file_name,"w");

fprintf(fptr,"%d",N);

temp[0][0]=b[0][0];

for(i=0;i<=N;i++)

for(j=0;j<=N;j++)

{

a[i][j]/=temp[0][0];

b[i][j]/=temp[0][0];

fprintf(fptr,"\n%e %e ",a[i][j],b[i][j]);

printf("\n%e %e",a[i][j],b[i][j]);

}

fclose(fptr);

printf("\nEnter file name to store magnitude

response >");

scanf("%s",file_name);

fptro1=fopen(file_name,"w");

Trang 5

printf("\nEnter file name to store phase response >"); scanf("%s",file_name);

fptro2=fopen(file_name,"w+");

printf("\nEnter the number of points to be generated (e.g.32x32) >");

scanf("%dx%d",&M,&M);

fprintf(fptro1,"%d %d\n",M2,M2);

fprintf(fptro2,"%d %d\n",M2,M2);

fprintf(fptro1,"%e",0.0);

fprintf(fptro2,"%e",0.0);

wd=- pi;

dwd=2.0*pi/M;

for(i=0;i<M2;i++)

{

fprintf(fptro1," %e",wd);

fprintf(fptro2," %e",wd);

wd+=dwd;

}

phase=(float **)malloc(M2*sizeof(float *));

for(i=0;i<(M2);i++)

*(phase+i)=(float *)malloc(M2*sizeof(float));

wa=wa_start;

wd=-pi ;

dwa=2.0*pi/(M*T);

dwd=2.0*pi/M;

for(j=0;i<M2;i++)

{

fprintf(fptro1,"\n%e",wa*T);

for(j=0;j<M2;j++)

{

NR=NI=0.0;

DR=DI=0.0;

for(n=0;n<=N;n++)

{

c=cos(n*wd);

s=sin(n*wd);

sign=1;

wame=1.0;

was=wa*wa;

sum1=sum2=0.0;

for(m=0;m<=N;m+=2)

{

Trang 6

t1=sign*a[m][n]*wame;

t2=sign*b[m][n]*wame;

sign*=-1;

wame*=was;

sum1+=t1;

sum2+=t2;

}

NR+=sum1*c;

NI+=sum1*s;

DR+=sum2*c;

DI+=sum2*s;

} /*n-loop.*/

for(n=0;n<=N;n++)

{

c=cos(n*wd);

s=sin(n*wd);

sign=1;

wamo=wa;

was=wa*wa;

sum1=sum2=0.0;

for(m=1;m<=N;m+=2)

{

t1=sign*a[m][n]*wamo;

t2=sign*b[m][n]*wamo;

sign*=-1;

wamo*=was;

sum1+=t1 ;

sum2+=t2 ;

}

NR-=sum1*s;

NI+=sum1*c;

DR-=sum2*s;

DI+=sum2*c;

} /*n-loop.*/

D=sqrt(NR*NR+NI*NI)/sqrt(DR*DR+DI*DI); ph=atan2(NI,NR)-atan2(DI,DR);

if(j==0) ph1=ph;

else

{

ph2=ph;

if(fabs(ph2-ph1)>=(1.9*pi))

{

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

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w