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

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

10 335 1
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

Tiêu đề Giáo Trình Xử Lý Ảnh Y Tế Tập 1a P18
Trường học Unknown University
Chuyên ngành Image Processing
Thể loại Giáo Trình
Năm xuất bản 2023
Thành phố Unknown City
Định dạng
Số trang 10
Dung lượng 775,3 KB

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

Nội dung

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 t

Trang 1

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 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 */

Hình vuông: 1 1

1 1

Tam giác: 1 2 1

2 4 2

1 2 1

Bell 1 3 3 1

3 9 9 3

3 9 9 3

1 3 3 1

Cubic B-Spline 1 4 6 4 1

4 16 24 16 4

6 24 36 24 6

4 16 24 16 4

1 4 6 4 1

Trang 2

#include <stdio.h>

#include <math.h>

#include <alloc.h>

#include <conio.h>

#include <io.h>

#include <stdlib.h>

#include <ctype.h>

#include <string.h>

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);

Trang 3

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)

Trang 4

{

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<N;i++)

*(a+i)=(unsigned int *)malloc(N*sizeof(int));

switch(N1)

{

case 1: for(i=0;j<N;i++)

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

a[i][j]=SQUARE[i][j];

Trang 5

break;

case 2: for(i=0;i<N;i++)

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

a[i][j]=TRIANGLE[i][j];

break;

case 3: for(i=0;i<N;i++)

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

a[i][j]=BELL[i][j];

break ;

case 4: for(i=0;i<N;i++)

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

a[i][j]=CUBIC_B_SPLINE[i][j];

}

image_width2=2*image_width;

image_length2=2*image_length;

/*Allocating memory for image transfer buffer.*/ w=(unsigned char **)malloc(N*sizeof(char *));

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

*(w+i)=(char *)calloc(image_width2,sizeof(char)); /*Clear image transfer buffer.*/

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

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

w[i][j]=(unsigned char)0;

/*Allocating memory for input and output buffers.*/ buffi=(char *)malloc(image_width*sizeof(char));

buffo=(char *)malloc(image_width2*sizeof(char)); bufft=(unsigned int

*)malloc(image_width2*sizeof(int));

fptrt=fopen("temp.img","wb+");

max=0; min=20000;

xt=wherex();

yt=wherey();

gotoxy(70,25);

textattr(WHITE+(GREEN<<4)+BLINK);

cputs("WAIT");

/*Interpolation.*/

for(n1=0;n1<image_length2;n1++)

{

if((n1%2)==0)

fread(buffi,image_width,sizeof(char),fptri); else /* Every other row is set to zero */

Trang 6

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

buffi[j]=(unsigned char)0;

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

w[N1][j<<1]=buffi[j];/*Every other location is set to zero */

for(n2=0;n2<image_width2;n2++)

{

sum=(int)0;

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

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

{

if((n2+k2-N1)<(int)0) continue;

sum+=a[k1][k2]*w[k1][n2+k2-N1];

}

bufft[n2]=sum;

if(sum>max) max=sum;

if(sum<min) min=sum;

}

fwrite(bufft,image_width2,sizeof(int),fptrt); /* Shift rows of w */

temp=*w;

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

*(w+j)=*(w+j+1);

*(w+N1)=temp;

}

rewind(fptrt);

scale=(float)255.0/((float)(max-min));

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

{

fread(bufft,image_width2,sizeof(int),fptrt); for(j=0;j<image_width2;j++)

buffo[j]=(unsigned

char)((float)(bufft[j]-min)*scale);

fwrite(buffo,image_width2,sizeof(char),fptro); }

fclose(fptrt);

fclose(fptri);

fclose(fptro);

remove("temp.img");

gotoxy(70,25);

textattr(WHITE+(BLACK<<4));

cputs(" ");

gotoxy(xt,yt);

}

Trang 7

Để 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

Trang 8

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

Trang 9

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

Trang 10

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à điểm tần số zero (0,0) nằm tại điểm

 2

, 2

M M

M phải là bội số của

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

trung tâm nằm tại 

 2

, 2

M M

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

HÌNH ẢNH LIÊN QUAN

Hình 7.8 Các phép nội suy thông thường. - Giáo trình xử lý ảnh y tế Tập 1a P18 pdf
Hình 7.8 Các phép nội suy thông thường (Trang 1)
Hình 7.9 Phóng to ảnh &#34;CAMEL.IMG&#34; dùng phương pháp gần đúng.  Bài tập 7.1 - Giáo trình xử lý ảnh y tế Tập 1a P18 pdf
Hình 7.9 Phóng to ảnh &#34;CAMEL.IMG&#34; dùng phương pháp gần đúng. Bài tập 7.1 (Trang 7)
Hình 7.10 Ảnh của tia x. - Giáo trình xử lý ảnh y tế Tập 1a P18 pdf
Hình 7.10 Ảnh của tia x (Trang 8)
Hình 7.11 Xử lý ảnh hình 7.10 với bộ lọc Wallis. - Giáo trình xử lý ảnh y tế Tập 1a P18 pdf
Hình 7.11 Xử lý ảnh hình 7.10 với bộ lọc Wallis (Trang 9)

TỪ KHÓA LIÊN QUAN

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