Xem mẫu
- ta có thể thu đư ợc cùng kết quả nếu ta áp dụng liên tiếp hai phép nội suy
vuông. Giải thuật chuyển đổi những sao chép cơ b ản theo bộ lọc thông thấp
sang ảnh để có được ảnh trơn hơn. Kết hợp thực hiện ba lần liên tục trên ảnh
với toán tử nội suy vuông tương đương với áp dụng toán tử nội suy Bell. Toán
tử nội suy bậc 3 có thể thu đư ợc nhờ kết hợp phép nội suy vuông và Bell hoặc
kết hợp toán tử nội suy vuông bốn lần. Sử dụng cùng khái niệm đó, chúng ta
có thể dễ d àng có được nội suy cao h ơn.
Hình vuông: 11
1 1
Tam giác: 121
242
121
Bell 13 31
39 93
39 93
13 31
Cubic B-Spline 1 4 6 4 1
4 16 24 16 4
6 24 36 24 6
4 16 24 16 4
1 4641
Hình 7.8 Các phép nội suy thông thường.
Những khái niệm trên có th ể được thực hiện trong phần mềm tương tự với
việc thực hiện lọc FIR. Bộ đệm chuyển đổi ảnh kích thước N (2 độ rộng
của ảnh) được tận dụng, ở đó N = 2 cho toán tử nội suy vuông, N = 3 cho toán
tử nội suy tam giác, v.v... Một hàng của ảnh được chuyển thành hàng cuối
cùng của bộ đệm chuyển đổi ảnh và lưu trữ tại các vị trí khác với các vị trí ở
giữa đặt bằng không. Tương quan của phép nội suy với bộ đệm truyền tới ảnh
và dịch chuyển hàng như trong phương pháp trong bộ lọc FIR, một hàng của
các giá trị 0 đ ược chuyển đổi thành hàng cuối cùng của bộ đệm chuyển đổi
ảnh. Những bước n ày được lặp đi lặp lại cho những phần còn lại của ảnh, bằng
cách lựa chọn sự chuyển đổi một h àng từ ảnh theo một hàng của các giá trị 0.
Thủ tục thực hiện thuật toán n ày được cho trong chương trình 7.3.
Chương trình 7.3 “ENLARGE.C”.
/* This program doubles the dimensions of an
image by interpolation. */
144
- #include
#include
#include
#include
#include
#include
#include
#include
int SQUARE[2][2]={ { 1, 1 },
{ 1, 1 }};
int TRIANGLE[3][3]= { { 1, 2, 1 },
{ 2, 4, 2 },
{ 1, 2, 1 } };
int BELL[4][4]={ { 1, 3, 3, 1 },
{ 3, 9, 9, 3},
{ 3, 9, 9, 3},
{ 1, 3, 3, 1} } ;
int CUBIC_B_SPLINE[5][5]={ { 1, 4, 6, 4, 1 },
{ 4, 16, 24, 16, 4 },
{ 6, 24, 36, 24, 6 },
{ 4, 16, 24, 16, 4 } };
void main()
{
char file_name[14],ch;
FILE *fptri,*fptro,*fptrt;
double nsq;
int image_length,image_width, N, N1,image_length2,
image_width2,i,j,ind,xt,yt;
unsigned int **a,n1,n2,k1,k2,sum,max,min,*bufft;
unsigned char **w,*buffi,*buffo,*temp;
float scale;
clrscr();
printf("Enter file name for input image -->");
scanf("%s",file_name);
fptri=fopen(file_name,"rb");
if(fptri==NULL)
{
printf("%s does not exist.",file_name);
145
- printf("\nPress any key to exit. ");
getch() ;
exit(1);
}
nsq=filelength(fileno(fptri));
printf("Is this a square image ?");
printf("\n i.e. Is image length =image width (y or
no) ? -->");
while(((ch=tolower(getch()))!='y')&&(ch!='n'));
putch(ch);
switch(ch)
{
case 'y' :
image_length=image_width=sqrt(nsq);
printf("\n Image size = %d x %d",image_length,
image_width);
break;
case 'n':
printf("\nEnter image_width-->");
scanf("%d",&image_width);
image_length=nsq/image_width;
printf("Image length is %d", image_length);
break;
again :
gotoxy(1,5);
printf("
");
gotoxy(1,5);
printf("Enter file name for enlarged image-->");
scanf("%s",file_name);
if((stricmp("temp.img",file_name))==0)
{
printf("This is a reserved file name. Use some
other name.");
goto again;
}
gotoxy(1,6);
printf ( "
");
ind=access(file_name,0);
while(!ind)
146
- {
gotoxy(1,6);
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,6);
printf ( "
");
gotoxy(1,5);
printf ( "
");
gotoxy(1,5);
printf("Enter file name -->");
scanf("%s",file_name);
ind=access(file_name,0);
}
}
fptro=fopen(file_name,"wb");
printf("\nEnter choice for interpolation \n");
printf(" 1.SQUARE. \n");
printf(" 2.TRIANGLE. \n");
printf(" 3.BELL. \n");
printf(" 4.CUBIC B-SPLINE. \n");
printf(" Enter choice (1,2,3 or 4) ");
while(((ch=getche())!='l')&&(ch!='2')
&&(ch!='3')&&(ch!='4'));
N1=ch-48;
N=N1+1 ;
a=(unsigned int **)malloc(N*sizeof(int *));
for(i=0;i
- break;
case 2: for(i=0;i
- for(j=0;j
- Để kiểm tra chương trình 7.3 chúng ta sẽ sử dụng ảnh "CAMEL.IMG" m à
ta đã sử dụng để kiểm tra trong phương pháp tần số. Kết quả sử dụng nội suy
bậc 3 đư ợc thể hiện trên hình 7.9. Như đ ã mong đợi, ảnh hơi m ờ, và chất
lượng thấp hơn ảnh thu được qua việc ứng dụng định lý lấy mẫu. Tuy nhiên,
có thể khôi phục ảnh mờ bằng cách sử dụng kỹ thuật không gian thông qua
việc sử dụng trực tiếp bộ lọc thông cao. Chúng ta sẽ đề cập nhiều hơn về vấn
đề này trong chương 8. Tổng quan về ảnh mờ sẽ đư ợc thảo luận trong chương
10.
7.6 Bộ lọc sai phân thống kê Wallis
Bởi vì phóng đại ảnh là một dạng của tăng cường ảnh, sẽ là thích hợp khi
giới thiệu bộ lọc sai phân thống kê tại thời điểm này. Kiểu lọc này đư ợc phát
triển bởi Wallis là đ ặc biệt hữu ích trong việc tăng cường các chi tiết trong
vùng tối. Vấn đề n ày nảy sinh trong ảnh x-quang như ch ỉ trên hình 7.10. Trong
giải thuật lọc Wallis mỗi điểm được điều chỉnh bằng phép trừ giá trị trung bình
của các điểm lân cận và chia với độ lệch chuẩn của các điểm lân cận của nó.
Ảnh lọc Wallis thường đ ược trung bình với ảnh gốc. Nguyên nhân phải thực
hiện việc trung b ình ảnh này là để ngăn cản việc loại bỏ to àn bộ nền. Kích
thước của vùng lân cận th ường được nói đến như bậc của bộ lọc. Kết quả của
áp dụng bộ lọc Wallis bậc 5 được chỉ trên hình 7.11.
Hình 7.9 Phóng to ảnh "CAMEL.IMG" d ùng phương pháp gần đúng.
Bài tập 7.1
150
- 1 .Tìm kiếm và phân tích tài liệu của H.S.Hou và H.C.Andrews. Trên cơ sở
đó, viết chương trình C cho phép phóng to, thu nhỏ ảnh dùng các toán tử bậc
3.
2 .Vấn đề về miền tần số cũng được đề cập bởi T.C.Chen và R.J.P.De
Figueiredo. Đọc và phân tích tài liệu đó.
Hình 7.10 Ảnh của tia x.
151
- Hình 7.11 Xử lý ảnh hình 7.10 với bộ lọc Wallis.
Bài tập 7.2
Viết ch ương trình C cho bộ lọc thống kê Wallis. Cho phép người sử dụng
có thể trung bình ảnh đầu ra với ảnh gốc. Cho phép người sử dụng nhập bậc
của bộ lọc.
Kiểm tra chương trình trên ảnh XRAY.IMG và RIBS.IMG có sẵn trên đĩa
kèm theo.
152
- CHƯƠNG
8
THIẾT KẾ CÁC BỘ LỌC FIR 2-D DÙNG
FFT VÀ CÁC HÀM CỬA SỔ
8.1 Chỉ dẫn
Các bộ lọc có điểm gẫy, hay còn gọi là các bộ lọc có dải chuyển tiếp dốc tạo
nên các nhiễu gợn lên phổ biên độ cả ở dải thông lẫn dải chắn khi thiết kế với
các phương pháp mô tả ở các chương trước. Chúng được gọi là các dao động
Gibbs làm ảnh hư ởng đến chất lượng của ảnh lọc. Vì vậy cần phải có một biện
pháp làm giảm bớt và trơn tru các dao động này. Một biện pháp tỏ ra có hiệu
qu ả là áp dụng các hàm cửa sổ. Hàm thu được khi nhân với đáp ứng xung bộ
lọc với h àm này làm trơn các dao động Gibb. Chúng ta sẽ áp dụng các hàm
này và so sánh phổ biên độ có dùng và không dùng hàm cửa sổ. Để tận dụng
các thủ tục 2-D FFT trong chương 6, chúng ta sẽ sử dụng chúng trong việc
thiết kế bộ lọc FIR. Chúng ta cần chú ý rằng cách tiếp cận FFT nhanh h ơn rất
nhiều so với tích phân hai lớp ở chương 2. Để cung cấp th êm một số kiến thức
hoàn thiện cho công việc, chúng ta sẽ xem xét lĩnh vực về độ phân giải của
ảnh. Lĩnh vực này đ ã có một số phát triển được biết dưới với cái tên truyền
hình độ phân giải cao (IDTV hoặc EDTV). Các hệ truyền hình này cho ngư ời
xem một số dòng gấp đôi truyền hình thông thư ờng, và như vậy là cho một
hình ảnh đẹp h ơn. Từ chương 14 đến chương 16 đề cập đến tín hiệu truyền
hình và truyền h ình độ phân giải cao cho xử lý ảnh hai chiều.
8.2 Thiết kế bộ lọc FIR dùng FFT
Một bộ lọc FIR có thể thiết kế theo các bước sau đây :
1. Mô tả phổ biên độ và phổ pha H(m,n) bằng một mảng có kích thư ớc M
M M
M mà điểm tần số zero (0,0) nằm tại điểm , . M phải là bội số của
2 2
2.
2. Rút ra IFFT của H(m,n)(-1)m+n. Kết quả là đáp ứng xung h (m,n)(-1)m+n có
M M
trung tâm nằm tại , .
2 2
146
nguon tai.lieu . vn