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

Giáo trình xử lý ảnh y tế Tập 1a P17 pptx

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 (470.12 KB, 10 trang )


134
















deekTx
T
tx
tj
T
T
k
Tkj
aa



)(


2
)(
Thay đổi thứ tự tính tổng và tích phân,
















k
T
T
kTtj
aa
de
T
kTxtx
/
/
)(

2
)()(




Tính giá trị của tích phân chúng ta được







k
aa
kTt
T
kTt
T
kTxtx
)(
)(sin
)()(


(7.12)
Biểu thức (7.12) là phép nội suy cho phép khôi phục các tín hiệu liên tục theo
thời gian x
a

(t) từ các mẫu của nó.

Trường hợp 2-D: Các định lý lấy mẫu 2-D giả thiết rằng hàm giới hạn
băng f
a
(x,y) có thể khôi phục một cách hoàn toàn từ các mẫu mà thoả mãn
T
W
H
H

1
2
T
W
V
V

1
2
(7.13)
ở đây W
H
và W
V
biểu diễn giải thông theo hezt của tín hiệu 2-D theo chiều dọc
và theo chiều ngang. Nếu biểu thức (7.13) được thoả mãn, và f
a
(k
1

T
V
,k
2
T
H
)
biểu diễn tín hiệu lấy mẫu 2-D, thì f
a
(x,y) có thể khôi phục từ f
a
(k
1
T
V
,k
2
T
H
)
dùng biểu thức nội suy:







)(
)(



(7.14)



Chứng minh của các biểu thức (7.13) và (7.14) tương tự như trường hợp 1-
D và được để lại như một bài tập. Một chú ý là phổ tần số của một tín hiệu lấy
mẫu 2-D tuần hoàn trong miền tần số, như trong hình 7.4. Tín hiệu tương tự có
thể được khôi phục bằng cách tách ra một chu kỳ từ phổ tín hiệu mẫu.

)(
)(sin
2
2
H
H
H
H
Tky
T
Tky
T





135


7.4 Định lý lấy mẫu áp dụng lên các ảnh
Một ảnh được tạo nên bằng cách chiếu một cảnh 3-D lên mặt phẳng 2-D.
Phép chiếu này biểu diễn một phép biến đổi từ nhiều vào một. Có nghĩa là một
điểm ảnh không tương ứng duy nhất với một điểm trong cảnh 3-D. Điều này
được minh hoạ qua hình 7.5. Giả sử rằng ảnh này chứa N điểm ảnh theo hướng
x. Sau đó cho các vật thể S
1
và S
2
trong hình 7.5 chúng ta có

x
N
1
10

mét (7.15)

N
x
3
2

mét (7.16)
Định lý lấy mẫu đòi hỏi:

1
1
2
1

W
x 
(7.17)






















Hình 7.4 Phổ tần số của một tín hiệu lấy mẫu 2-D.
1

2


H
T

H
T


V
T

V
T


H
W
V
W

136


2
2
2
1
W
x  (7.18)
ở đây, W
1

là tần số cao nhất theo hướng x cho ảnh được tạo bởi một mình vật
thể S
1
, và W
2
là tần số cao nhất theo hướng x cho ảnh được tạo bởi một mình
vật thể S
2
. Bởi vì chúng ta chỉ có một ảnh bao gồm S
1
và S
2
nên W
1
= W
2
và N
được xác định theo
x
N W
2
2
3 1
2
  (7.19)
Vì thế N = 6W
2
(7.20)
Hình 7.5 Ánh xạ một cảnh 3-D lên mặt phẳng ảnh 2-D.
Thay N trong biểu thức (7.15) chúng ta được


112
1
2
1
6
10
6
10
WWW
x 

Vì thế, giả thiết lấy mẫu không thoả mãn cho vật thể S
1
, và ở đây các thông tin
của miền này trên ảnh không thể khôi phục qua phép nội suy. Nói một cách
khác, các vật thể gần camera có khả năng tốt hơn khi lấy mẫu, trong khi các
vật thể xa camera thì dễ dàng khi khôi phục mẫu.

137

7.5 Nhân đôi độ phân giải trên ảnh
Kết quả của định lý lấy mẫu có thể dùng để tăng độ phân giải trên ảnh. Dù
sao chăng nữa, dựa vào kết quả đã đạt được chúng ta có thể kết luận rằng nói
chung thì không thể tăng độ phân giải của ảnh lên được. Trong các ảnh, các
vật thể đáng quan tâm thông thường được che hết bề mặt của ảnh. Vì thế, nếu
các đối tượng trong nền không được cho độ phân giải dư thừa, các vật thể cận
cảnh thông thường có đủ mẫu để cho phép dùng các định lý lấy mẫu.
7.5.1 Nhân đôi độ phân giải dùng sự thể hiện tần số của lý thuyết
lấy mẫu

Chúng ta đã chú ý ở trong chương 6 rằng phổ tần số của một ảnh giảm
nhanh cùng với sự tăng của tần số. Chúng ta có thể dùng nhận xét này và định
lý lấy mẫu Whittaker-Shannon để tăng độ phân giải. Giải thuật này theo các
bước sau:
1. Rút ra FFT của ảnh có kích thước N  N, cụ thể

I k k FFT i n n
n n
( , ) { ( , )( ) }
1 2 1 2
1
1 2
 


phổ tần số sẽ phải có gốc toạ độ ở trung tâm của mảng FFT.
2. Thêm các điểm 0 vào FFT như giới thiệu trong hình 7.6 để tăng kích thước
của nó lên 2N  2N.
3. Rút ra biến đổi ngược FFT của biến đổi tần số mở rộng. Kết quả thu được
là ảnh gốc với độ phân giải tăng gấp đôi. Cần chú ý là các vật thể không
lấy đủ mẫu trong ảnh gốc thì không cung cấp một sự phát triển trong độ
phân giải.

Để thực hiện các phương pháp trên chúng ta sẽ bắt đầu với ảnh kích thước
128  128 điểm và 256 mức xám trong hình 7.7a. ảnh đã có sẵn trên đĩa với
file có tên là CAMEL.IMG. Thực hiện thuật toán trên được cho trong Chương
trình 7.2. Kết quả áp dụng trên ảnh được cho trong hình 7.7b. Rõ ràng là rất
khó khăn để nhận ra người cưỡi trên lạc đà, nếu ảnh gốc mặt người đó chưa
được lấy đủ mẫu.


Chương trình 7.2 ENLQFFT.C nhân đôi độ phân giải của một ảnh qua
FFT.

/*This program utilizes 2-D FFT to double the size
of an image.*/

#define pi 3.141592654

#include <stdio.h>
#include <math.h>
#include <alloc.h>

138

#include <stdlib.h>
#include <io.h>
#include <string.h>
#include <ctype.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);

void main()

{
int N,m,i,j,N2,N4,m2,n2,ind;
unsigned int *L;
float *wr,*wi;
FILE *fptri,*fptro,*fptrt;
double nsq;
float *buffo,*buffi;
unsigned char file_name[14],ch,*buffr;
float max,min,scale;

clrscr();
printf("Enter file name for image to be enlarged ->
");
scanf("%s", file_name);
fptri=fopen(file_name,"rb");
if(fptri==NULL)
{
printf("\n File does not exist.");
exit(1);
}
nsq=filelength(fileno(fptri));
N=(int)sqrt(nsq);
m=(int)(log10((double)N)/log10((double)2));
fptro=fopen("FFT1.img","wb+");

/* file for storing FFT of image.*/
again :
gotoxy(1,2);

139


printf ( "
");
gotoxy(1,2);
printf("Enter file-name for enlarged image -> ");
scanf("%s",file_name);
if(((stricmp("FFT1.img",file_name))==0)||
((stricmp("temp.img",file_name))==0)||
((stricmp("IFFT2.img",file_name))==0))
{
printf("This is a reserved file name. Use some
other name.");





















Hình 7.6 Thêm các số 0 vào FFT thu được ảnh có tần số mở rộng.
goto again;
}
gotoxy(1,2);
printf ( "
");
ind=access(file_name,0);
while(!ind)
{
gotoxy(1,3);


FFT của ảnh
N
N
2

1

2
2
T
T



T


0’s

0’s

0’s

0’s

2
N
2
N

140

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,3);
printf("
");
gotoxy(1,2);

printf ("
");
gotoxy(1,2);
printf("Enter file name >");
scanf("%s",file_name);
ind=access(file_name,0);
}
}


141


Hình 7.7 "CAMEL.IMG" và ảnh đã được phóng to.

N2=N<<1;

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

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

/* Allocating memory for twiddle factors. n2=N- 1 */
wr=(float *)malloc(n2*sizeof(float));
wi=(float *)malloc(n2*sizeof(float));

/*Generating LUT for twiddle factors.*/
WTS(wr,wi,N,-1);



142

/* Taking 2-D FFT. */
FFT2D(fptri,fptro,wr,wi,L,N,m,-1);
clrscr() ;
printf(" Adding zeros to FFT of image. \n");

/* Adding zeros to double the size of the FFT.*/
N4=N2<<1 ;
buffi=(float *)malloc(N2*sizeof(float));
buffo=(float *)malloc(N4*sizeof(float));
fptri=fopen("FFT1.img","rb");
fptrt=fopen("temp.img","wb+");
fptro=fopen("TFFT2.jmg","wb+");
for(i=0; i<N4; i++)
buffo[i]=(float)0.0;
/* store O's in the first N/2 lines.*/
for(i=0; i<(N>>1); i++)
fwrite(buffo,N4,sizeof(float),fptrt);
/* Store O's in the first and last N/2 rows.*/
for(i=0; i<N; i++)
fread(buffi,N2,sizeof(float),fptri);
for(j=0;j<N;j++)
buffo[j]=(float)0.0;
for(j=0;j<N2;j++)
buffo[j+N]=buffi[j];
for(j=(N2+N);j<N4;j++)
buffo[j]=(float)0.0;
fwrite(buffo,N4,sizeof(float),fptrt);

for(i=0; i<N4; i++)
buffo[i]=(float)0.0;
for(i=0;i<(N>>1);i++)
fwrite(buffo,N4,sizeof(float),fptrt);
fclose(fptri);
rewind(fptrt);

/* Taking the inverse FFT.*/
printf("Taking the inverse FFT.\n");
m2=m+1 ;

/* Generating bit reversal I(JT.*/
bit_reversal(L,m2,N2);
WTS(wr,wi,N2,1);
FFT2D(fptrt,fptro,wr,wi,L,N2,m2,1);
clrscr() ;

143

printf("Last stage in forming enlarged
image.");
fptri=fopen("IFFT2.img","rb");
fptro=fopen(file_name,"wb");
buffr=(unsigned char
*)malloc(N2*sizeof(char));
max=0; min=1.0e7;
for(i=0;i<N2;i++)
{
fread(buffo,N4,sizeof(float),fptri);
for(j=0;j<N2;j++)

{
scale=buffo[j<<1];
if(scale>max) max=scale;
if(scale<min) min=scale;
}
}
scale=(float)255.0/(max-min);
rewind(fptri);
for(i=0;i<N2;i++)
{
fread(buffo,N4,sizeof(float),fptri);
for(j=0;j<N2;j++)
buffr[j]=(unsigned char)((buffo[j<<1]-
min)*scale);
fwrite(buffr,N2,sizeof(char),fptro);
}

fcloseall();
remove("FFT1.img");
remove("temp.img");
remove("IFFT2.img");
printf("\nDone.");
}

7.5.2 Nhân đôi độ phân giải trên ảnh dùng phép nội suy không
gian
Trong phương pháp này ảnh đầu tiên được chứa lên một mảng có kích
thước 2N

2N với tất cả các hàng và các cột được xoá về không. ảnh được

chiếu lần lượt với các phép nội suy. Hình 7.8 liệt kê các phần của các phép nội
suy phổ biến nhất. Giải thuật nội suy vuông là thao tác sao chép trong đó
những điểm ảnh về cơ bản được sao chép vào những vị trí rỗng. Có thể thu
được toán tử nội suy tam giác nhờ sự kết hợp hai toán tử nội suy vuông, vì vậy

×