Tải bản đầy đủ (.pdf) (8 trang)

Giáo trình xử lý ảnh y tế Tập 2 P1 doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (714.81 KB, 8 trang )


125

CHƯƠNG
7

CÁC THUỘC TÍNH CỦA ẢNH SỐ
7.1 Chỉ dẫn
Trong chương này chúng ta sẽ nghiên cứu các vấn đề sau:

 Tầm quan trọng của pha trong các ảnh số.
 Các giả thiết lấy mẫu 2-D với các ứng dụng trên các ảnh.
 Nhân đôi độ phân giải trên ảnh.
7.2 Tầm quan trọng của pha
Trong chương 6, phần 6.4.2, tầm quan trọng của đặc tính tuyến tính hoặc
đặc tính pha zero cho các bộ lọc 2-D đã được đề cập. Tuy nhiên, chúng ta chưa
kiểm tra tác dụng phân bố đặc tính pha của các ảnh số đối với các nội dung
thông tin có trên ảnh. Để làm vậy, chúng ta sẽ đưa ra hai thử nghiệm.

Thử nghiệm 1:

1. Rút ra 2-D FFT của một ảnh được cho.
2. Tính đặc tuyến pha:












)(
)(
tan
kx
kx
r
i
k


ở đây x
i
(k) biểu diễn cho các phần giá trị ảo và x
r
(k) biểu diễn các giá trị
thực của FFT.
3. Tính toán và lưu trong một file các giá trị phức

cos( ) sin( ),
 
k k
i i = -1

4. Rút ra biến đổi ngược FFT của file cuối cùng.

Để đưa các bước trên, chương trình 7.1 được cung cấp. Chương trình thực
hiện trên ảnh “IKRAM.IMG” của hình 3.2a (Chương 3). Kết quả được đưa ra

trên hình 7.1.

126




Chương trình 7.1 "PHASE.C". Kiểm tra tầm quan trọng của pha.

/* Program for testing the importance of phase in
digital images.*/

#define pi 3.141592654

#include <stdio.h>
#include <math.h>
#include <alloc.h>
#include <stdlib.h>
#include <io.h>
#include <string.h>
#include <conio.h>

void bit_reversal(unsigned int *, int , int);
void WTS(float *, float *, int, int);
void FFT(float *xr, float *xi, float *, float *,int,
int);
void transpose(FILE *, int, int);
void FFT2D(FILE *, FILE *, float *, float *,
unsigned int *,
int,int,int);



127

Hình 7.1 Tách riêng pha đối với ảnh "IKRAM.IMG".

void main()
{
int N,n2,m,i,j,NT;
unsigned int *L;
float *wr,*wi ;
double nsq,xr,xi,theta;
FILE *fptri,*fptro,*fptrt,*fptrr;
float *buffi,*buffo, max,min,scale;
unsigned char file_name[14], *buff,file_name2[14];

clrscr() ;
printf("Enter name of file containing FFT data >");
scanf("%s",file_name);
fptri=fopen(file_name,"rb");
if(fptri==NULL)
{
printf("\nFile does not exist.");
exit(1);
}
fptrt=fopen("temp.img","wb+");
again :
gotoxy(1,2);

128


printf("
");
gotoxy(1,2);
printf("Enter File for storing display IFFT data-
>");
scanf("%s",file_name);
if(((stricmp("temp.img",file_name2))==0)||
((stricmp("temp2.img",file_name2))==0))
printf("This is a reserved file name. Use some
other name.");
goto again;
fptrr=fopen(file_name,"wb");
nsq=(double)filelength(fileno(fptri))/(2*sizeof(floa
t));
N=(int)sqrt(nsq);
m=(int)(log10((double)N)/log10((double)2));

clrscr( ) ;
NT=2*N*sizeof(float);
buffi=(float *)malloc(NT*sizeof(float));
buffo=(float *)malloc(NT*sizeof(float));
buff=(char *)malloc(N*sizeof(char));
for(i=0;i<N;i++)
{
fread(buffi,NT,1,fptri);
for(j=0;j<N;j++)
{
xr=(double)buffi[2*j];
xi=(double)buffi[2*j+1];

theta=atan2(xi,xr);
buffo[2*j]=100.0*(float)cos(theta);
buffo[2*j+1]=100.0*(float)sin(theta);
}
fwrite(buffo,NT,1,fptrt);
}
fclose(fptri);
rewind(fptrt);

/* Allocating memory for bit reversal LUT.*/
L=(unsigned int *)malloc(N*sizeof(unsigned int));

/* Generate Look-up table for bit reversal.*/
bit_reversal(L,m,N);


129

/* Allocating memory for twiddle factors.*/
n2=(N>>1)-1;
wr=(float *)malloc(n2*sizeof(float));
wi=(float *)malloc(n2*sizeof(float));
fptro=fopen("temp2.img","wb+"),
WTS(wr,wi,N,1);
FFT2D(fptrt,fptro,wr,wi,L,N,m,1);
fptro=fopen("temp2.img","rb");
max=0.0; min=1.e10;
for(i=0;i<(N-30);i++)
{
fread(buffi,NT,1,fptro);

if(i<11) continue;
for(j=0;j<N;j++)

Hình 7.2 Tách riêng biên độ của ảnh "IKRAM.IMG".

{
if(buffi[2*j]>max) max=buffi[2*j];
if(buffi[2*j]<min) min=buffi[2*j];
}
}
rewind(fptro);
scale=255.0/(max-min);
for(i=0;i<N;i++)

130

{
fread(buffi,NT,1,fptro);
for(j=0;j<N;j++)
buff[j]=(char)((buffi[2*j]-min)*scale);
fwrite(buff,N,1,fptrr);
}
fcloseall();
remove("temp.jmq");
remove("tempLimg");
}

Thử nghiệm 2:

1. Rút ra FFT của một ảnh.

2. Rút ra đặc tính biên độ
| | ( ) ( )H x k x k
k
r i
 
2 2

3. Chứa trong một file dữ liệu phức
(| | . )H i
k

00
4. Rút ra biến đổi ngược FFT của file cuối cùng.

Chương trình 7.1 có thể dễ dàng thay đổi lại để kết hợp với các bước trên.
Kết quả chạy thử nghiệm 2 trên ảnh “IKRAM.IMG” được cho hình 7.2.
Có thể thấy rõ ràng từ hai thử nghiệm trên rằng đặc tính pha mang gần hết
các thông tin trong ảnh. Điều này đúng với hầu hết các ảnh, bởi vậy khi thực
hiện các phép toán như lọc 2-D với mục đích tăng cường ảnh ta nên tránh làm
biến dạng pha. Điều này cho thấy sự cần thiết của các toán tử 2-D tuyến tính
hoặc có pha zero.
7.3 Định lý lấy mẫu Whittaker-Shannon
Chúng ta sẽ bắt đầu bằng xem xét định lý lấy mẫu trong trường hợp 1-D.
Sau đây chúng ta sẽ nghiên cứu trường hợp các tín hiệu 2-D.

Định lý: Nếu một hàm x(t) không chứa tần số cao hơn W, có thể xác định
một cách hoàn toàn bằng một toạ độ mà dãy các điểm chia cách nhau 1/(2W).
Chu kỳ lấy mẫu được cho bởi

T

W

1
2


131

ở đây T tính theo giây và W tính theo herzt.
Chứng minh. Xem xét biểu diễn Fourier của một dãy các tín hiệu liên tục
x
a
(t)





 dejXtx
tj
aa
)(
2
1
)(

(7.1a)






 dtetxjX
tj
aa
)()(
(7.1b)
Nếu x(n) biểu diễn một dãy được rút ra từ việc lấy mẫu x
a
(t) tại các khoảng
bằng nhau T, chúng ta có thể dùng biểu thức (7.1a) để viết:





 dejXnTxnx
nTj
aa
)(
2
1
)()(

(7.2)
Từ biến đổi rời rạc Fourier chúng ta cũng rút ra










deeXnx
njj
)(
2
1
)(
(7.3)
ở đây
X e
j
( )

là biến đổi Fourier rời rạc của x(n). Bây giờ cần tính mối quan hệ
)( jX
a
theo X e
j
( )

.
Để xem xét mối quan hệ giữa các biểu thức (7.2) và (7.3) ta cần xem xét
biểu thức (7.2) như một tổng của các tích phân trong các khoảng có độ dài
2

/T.










r
T
r
T
r
nTj
a
dejXnx



)12(
)12(
)(
2
1
)(
(7.4)
Mỗi phần trong tổng có thể quy về tích phân trong khoảng từ
T


 đến
T


bằng cách thay đổi biến để rút ra








r
T
T
rnjnTj
a
dee
T
r
jjXnx





2
)
2

(
2
1
)( (7.5)
Nếu thay đổi thứ tự của tích phân và tính tổng và chú ý rằng
1
2

rnj
e

với
mọi giá trị nguyên của r và n, thì chúng ta rút ra

132


















de
T
r
jjXnx
nTj
T
T
r
a




)
2
(
2
1
)( (7.6)
Với thay thế , biểu thức (7.6) trở thành







de

T
r
j
T
jX
T
nx
nj
r
a













 )
2
(
1
2
1
)( (7.7)

có cùng dạng với biểu thức (7.3). Vì vậy, chúng ta có thể xác định





r
a
j
T
r
j
T
jX
T
eX )
2
(
1
)(


(7.8)
Tương tự, chúng ta có thể biểu diễn biểu thức (7.8) theo biến tần số tương
tự  như







r
a
Tj
T
r
jjX
T
eX )
2
(
1
)(

(7.9)

Biểu thức (7.8) và (7.9) cung cấp mối quan hệ giữa biến đổi Fourier thời
gian liên tục và biến đổi Fourier của một dãy các mẫu. Cho ví dụ, nếu
X j
a
( )

được giới thiệu trong hình 7.3a, thì X e
j
( )

sẽ được giới thiệu trong
hình 7.3b nếu W  (/T) (hoặc T  (2/2W)), cụ thể, nếu W tính theo hezt
)2/1( WT


. Vì thế, nếu lấy mẫu tại tốc độ tối thiểu gấp đôi tần số cao nhất
trong x j
a
( )

, thì
X e
j
( )

được xác định thành X j
a
( )

trong khoảng
T
T



 . Tần số lấy mẫu này thường được gọi là tần số Nyquist. Nếu T 
1/(2W), thì các bản dịch của X j
a
( )

sẽ bị chồng lên nhau như trong hình 7.3c.
Vấn đề này gọi là hiện tượng trùm phổ (aliasing).
Nếu T  1/(2W) (W tính theo hezt), thì có khả năng khôi phục x
a
(t) từ

x(nT) bởi một phép nội suy xấp xỉ, mà sẽ được chúng ta đề cập đến phần tiếp
theo.
Từ phép biến đổi Fourier thời gian liên tục:





T
T
tj
aa
dejXtx



)(
2
1
)( (7.10)

×