Nếu ngân sách bạn cho phép, tôi đề nghị bạn nên có một hệ thống như trong
hình 1.3. Nó bao gồm một máy tính PC có kèm theo thiết bị xử lý ảnh. Nối với
cổng vào của thiết bị thu nhận ảnh là một video camera, và cổng ra nối với một
màn hình. Thực tế, phần lớn các nghiên cứu của chúng ta được đưa ra trên ảnh
mức xám (ảnh đen trắng). Bởi vậy, hệ thống của bạn sẽ bao gồm một thiết bị xử lý
ảnh đen trắng và một màn hình đen trắng....
Nội dung trích xuất từ tài liệu:
Giáo trình xử lý ảnh y tế Tập 1b P15
#include
#include
#include
#include
void bit_reversal(unsigned int *, int , int);
void WTS(float *, float *, int, int);
void FFT(float *xr, float *xi, float *, float *,
int , int);
void main()
{
int i,k,m,N,n2,sign;
unsigned int *L;
float *wr,*wi,*xr,*xi;
char file_name[14];
FILE *fptr;
printf(\nEnter name of file containing data points->
);
scanf(%s,file_name);
if((fptr=fopen(file_name,rb))==NULL)
{
printf(file %s does not exist.);
exit(1);
}
printf(Enter # of data points to be read -->);
scanf(%d,&N);
m=(int)(log10((double)N)/log10((double)2.0));
k=1;
for(i=0;i/* Generate Look-up table for bit reversal. */
bit_reversal(L,m,N);
/* Allocating memory for FFT arrays ( real and imag.)
*/
xr=(float *)malloc(N*sizeof(float));
xi=(float *)malloc(N*sizeof(float));
/* Setting-up the data in real and imag. arrays.*/
for(i=0;i>1)-1;
wr=(float *)malloc(n2*sizeof(float));
wi=(float *)malloc(n2*sizeof(float));
/*Generating LUT for
twiddle factors. */
WTS(wr,wi,N,-1);
/* Taking FFT. */
FFT(xr, xi, wr, wi, m, N);
printf(Enter file name for storing FFT output.--->);
scanf(%s,file_name);
fptr=fopen(file_name,w);
for(i=0;iunsigned int MASK,C,A,j,k,i;
for(k=0;ki;
A{
/* FFT algorithm,
Decimation-in-time algorithm.
Note:
1. N=2 to the power of m.
2. The input arrays are assumed to be rearranged in
bit-reverse order.
You will need to use routine bitreversal for
that purpose.
3. The twiddle factors are assumed to be stored in
LUT's wr[I and wi[j. You will
need to use routine LUT for calculating and storing
twiddle factors.*/
int ip,k,kk,l,incr,iter,j,i;
float Tr,Ti;
ip=1;
kk=(N>>1);
incr=2 ;
for(iter=0; iter l=k*kk-1 ;
for(j=k; j>=1;
ip N / 2 1 N 1
f (k )WN kn kn
f (k )W
F ( n) N
k 0 k N / 2
N / 2 1
N
nN / 2
f (k )W N kn
f (k ) W 2
k 0
Bây giờ, chia dãy F(n) thành hai dãy dựa trên giá trị chẵn và lẻ của n.
N / 21
N
[ f (k ) W ( 2n).N / 2 f (k
)]W N kn
F ( 2n) /2
2
k 0
N / 2 1
N
)]WN k 22 n1)
(
[ f (k ) W (2n 1).N / 2 f (k
F (2n 1) /
2
k 0
W N nN e j 2n 1.0
Chú ý rằng
W N (2n1).N / 2 e j (2 1)n 1.0
Vì vậy
N / 21
N
)]WN kn
[ f (k ) f (k
F ( 2n) /2
2
k 0
N / 21
N
) WN k ]WN kn
[ f (k ) f (k
F (2n 1) /2
2
k 0
N
Đặt f 10 ( k ) f ( k ) f ( k )
2
N
)]WN k
f 11 ( k ) [ f ( k ) f ( k
2
Vì vậy
N / 21
f10 (k ).W N kn
F ( 2n) /2
(6.39)
k 0
97
N / 2 1
f11 (k ).W N kn
F (2n 1) /2
(6.40)
k 0
Các biểu thức (6.39) và (6.40) có thể biểu diễn bằng dưới dạng biểu đồ bướm
như trong hình 6.6.
Chúng ta có thể tiếp tục chia nhỏ các tổng cho trong các biểu thức (6.39) và
(6.40), tiếp tục l ...