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

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

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


241
cputs(" respectively.");
gotoxy(1,4);
cputs("You can also use the up and down arrow
keys.");
gotoxy(1,5);
cputs(" Then press + to increase or - to decrease");
cputs(" value.");
gotoxy(1,6);
cputs( " To exit adjustment press ESC\n");
gotoxy(30,8);
textattr(WHITE+(RED<<4));
cprintf("Hue %4d",k1);
gotoxy(30,9);
cprintf("Contrast %4d",k2);
gotoxy(30,10);
cprintf ( "Sat urati on %4d",k3);
gotoxy(30,11);
cprintf ( "Brightness %4d",k4);
a=getch();
ind2=1;
i=-1;
while(ind2)
{
if((a==D_ARROW)||(a==U_ARROW))
{
switch(a)
{
case D_ARROW:
i++;


if(i>3) i=0;
break;
case U_ARROW:
i ;
if(i<0) i=3;
}
switch(i)
{
case 0:
a='H'; break;
case 1:
a='C'; break;
case 2:
a='S'; break;
case 3:

242
a='B';
}
}
textattr(WHITE+(GREEN<<4));
gotoxy(1,10);
cprintf("Key pressed %c\n",a);
switch(a)
{
case 'h':
case 'H':
gotoxy(30,8);
cprintf("Hue %4d",k1);
while(((a=(char)getch())=='+')||(a=='-'))

{
switch(a)
{
case '+':
++k1 ;
if(k1>255) k1=0;
break;
case '-':
k1;
if(k1<0) k1=255;
}
SetHue(k1);
gotoxy(30,14);
cprintf("Key pressed %c",a);
gotoxy(30,8);
cprintf("Hue %4d",k1);
}
textattr(WHITE+(RED<<4));
gotoxy(30,8);
cprintf("Hue %4d",k1);
break;
case 'c':
case 'C':
gotoxy(30,9);
cprintf("Contrast %4d",k2);
while(((a=(char)getch())-='+')||(a-='-'))
{
switch(a)
{
case '+':

++k2 ;

243
if(k2>255) k2=0;
break;
case '-':
k2;
if(k2<0) k2=255;
}
SetContrast(k2);
gotoxy(30,14);
cprintf("Key pressed %c",a);
gotoxy(30,9);
cprintf("Contrast %4d",k2);
}
textattr(WHITE+(RED<<4));
gotoxy(30,9);
cprintf("Contrast %4d",k2);
break;
case 's':
case 'S':
gotoxy(30,10);
cprintf("Saturation %4d",k3);
while(((a=(char)getch())=='+')||(a=='-'))
{
switch(a)
{
case '+':
++k3;
if(k3>255) k3=0;

break;
case '-':
k3;
if(k3<0) k3=255;
}
SetSaturation(k3);
gotoxy(30,14);
cprintf("Key pressed %c",a);
gotoxy(30,10);
cprintf("Saturation %4d",k3);
}
textattr(WHITE+(RED<<4));
gotoxy(30,10);
cprintf("Saturation %4d",k3);
break;
case 'b':
case 'B':

244
gotoxy(30,11);
cprintf("Brightness %4d",k4);
while(((a=(char)getch())=='+')||(a=='-'))
{
switch(a)
{
case '+':
++k4 ;
if(k4>255) k4=0;
break;
case '-':

k4;
if(k4<0) k4=255;
}
SetBright(k4);
gotoxy(30,14);
cprintf("Key pressed %c",a);
gotoxy(30,11);
cprintf("Brightness %4d",k4);
}
textattr(WHITE+(RED<<4));
gotoxy(30,11);
cprintf("Brightness %4d",k4);
break;
case (char)27:
ind2=0;
break;
default:
a=getch();
break;
}
}
ind=0;
break;
case 'N':
case 'n':
ind=0;
break ;
default:
gotoxy(40,1);
break;

}
}
textattr((BLACK<<4));

245
clrscr();
textattr(WHITE+(BLUE<<4));
gotoxy(1,1);
cputs("Do you wish to freeze image (y or n) >");
while(((a=getch())!='y')&&(a!='n'));
gotoxy(40,1);
cprintf("%c",a);
if(a=='n')
{
textattr(LIGHTGRAY+(BLACK<<4));
clrscr();
exit(1);
}
CaptureFrame();
SetInDispMode();
gotoxy(1,2);
cputs( "DO You wish to save image on disk (y or n)
>");
while(((a=getch())!='y')&&(a!='n'));
gotoxy(46,2);
cprintf( "%c", a);
if(a=='n')
{
textattr(LIGHTGRAY+(BLACK<<4));
clrscr();

exit(1);
}
gotoxy(1,3);
cprintf("Enter name of fi I e to save image to ->");
scanf( "%s" , file_name);
fptro=fopen( file_name,"wb");
gotoxy(70,25);
textattr(WHITE+(GREEN<<4)+BLINK);
cputs( "WAIT");
for(i=0;i<256;i++)
{
FGetPibRow(buff,0,511,i);
fwrite(buff,512,2,fptro);
}
fclose(fptro);
gotoxy(70,25);
textattr(LIGHTGRAY+(BLACK<<4));
cputs(" ");
clrscr();

246
}

Để hiện thị màu bằng vỉ mạch VGA bạn có thể dùng chung bảng màu được
phát triển cho hiện biểu đồ màu. Bảng màu này không phải là bảng màu tốt
nhất cho tất cả các ảnh màu, và có thể tạo ra một bảng màu tối thiểu cho hiển
thị ảnh. Một phép gần đúng cho phát triển bảng màu 8 bit (256 màu) cho các
ảnh màu đặc biệt có thể mô tả bằng các bước sau đây:
Giá trị ban đầu của bốn mảng, tất cả của 256 mức, đến giá trị không:


palette.blue[256], palette.green[256], palette.red[256]
palette.count[256]

ở đây mỗi màu là một của bốn mảng số nguyên không dấu: đỏ, lục, lam, và số
thứ tự. Quét toàn bộ ảnh và cho mỗi điểm màu:

1. Nhân ba màu chính r, g, b với một hệ số hằng sao cho giá trị chỉ đến 255.
Trong ảnh 5 bit /màu chính có nghĩa là dịch trái 3 bit (ví dụ giá trị lớn
nhất cho màu chính là 31  8), hoặc bạn có thể chia khoảng cách giữa
các giá trị sao cho màu chính với cường độ sáng lớn nhất nàm trong
khoảng từ 0 đến 255.
2. Tính cường độ chói dùng y = 0,59g + 0,30r + 0,11b, hoặc bạn có thể
dùng công thức cho Y cho ở biểu thức (11.1). Làm tròn y đến giá trị
nguyên gần nhất. Nếu giá trị làm tròn là k, thì tăng palette.count[k] thêm
1.

Đặt n = palette.count[k]

Tính

palette.blue[k] = (n

palette.blue[k] + b)/(n + 1)

palette.green[k] = (n

palette.green[k] + g)/(n + 1)

palette.red[k] = (n


palette.red[k] + r)/(n + 1)

Ảnh màu có thể hiển thị như một ảnh mức cường độ sáng 8 bit tính dùng
biểu thức độ chói và mục màu tính ra. Chú ý là ảnh màu cung cấp trong cuốn
sách này có chiều rộng là 512, và chiều cao là 256 điểm. Ảnh sẽ chỉ hiện lên
cân xứng chỉ khi ta dùng vỉ mạch PIB ATI. Khi hiển thị ảnh dùng bộ chuyển
đổi đồ hoạ video, để cho ảnh có tỷ lệ hợp lý, bạn cần chuyển ảnh có kích thước
256  256. Chương trình thực hiện chuyển đổi này lưu giữ trên đĩa trong file
có tên là ATI_SCAL.C. Ảnh có thể hiện lên dưới chế độ Microsoft Window
bằng cách đầu tiên chuyển ảnh thành dạng bitmap cho Windows. Các file này

247
thường có phần mở rộng là BMP. Chương trình dùng chuyển một ảnh màu
thành file BMP được cung cấp trên đĩa dưới tên BIN2BMP.EXE. Một ảnh đã
được chuyển đổi có thể được xem bằng chương trình Paintbrush của
Windows. Chú ý rằng Windows phải ở chế độ hiển thị 256 màu. Thuộc tính
này xuất hiện khi bạn nhắp đúp vào nhóm chương trình "Main" và sau đó nhắp
đúp vào "Window Setup". Kích "Options", sau khi đã kích vào "Change
System Settíng". Bạn cần đĩa Windows' video driver cho phép máy tính và vỉ
mạch video chuyển sang chế độ mà bạn mong muốn.
Một số chương trình dùng để hiển thị ảnh màu dưới DOS dùng vỉ mạch
VGA cũng đã có sẵn trên đĩa. Đọc file README.DOC để hiểu thêm về các
chức năng này. Chương trình hiển thị DOS sẽ hiển thị ảnh PIB ATI. Bạn sẽ
cần chia hoặc biến đổi chúng theo dạng thích hợp cho window. Chương trình
hiển thị DOS sẽ làm việc trên hệ thống của bạn nếu vỉ mạch video của bạn
tuân theo tiêu chuẩn VESA. Nếu bạn có khó khăn trong hiện thị dưới môi
trường DOS, bạn hãy dùng trong môi trường Windows được giải thích ở trên.
Sẽ có một sự thay đổi rõ ràng chất lượng của ảnh hiện lên trên hệ thống có
khả năng thể hiện 32,768 màu so với ảnh hiện lên trên hệ thống có khả năng
thể hiện 256 màu. Để thấy rõ sự khác nhau này bạn cần chạy chương trình

11.4 để lấy và hiện lên các điểm ảnh trên vỉ mạch PIB, nếu vỉ mạch này đã
được cung cấp sẵn cho hệ thống của bạn, hoặc bạn có thể thay đổi chương
trình để thích hợp với vỉ mạch ảnh màu, nếu bạn có một sẵn một loại vỉ mạch
khác. Bạn có thể dùng ảnh "IHABCOL.IMG" đã có sẵn trên đĩa với kích thước
512  512 điểm ảnh.


Chương trình 11.4 "LOADPIB.C". Loading a Colored image on the
PIB board. The image is assumed to be of size 512 x 256 pixels.
/*This program is for loading a colored
image stored in a file onto the PIB board.*/

#include <stdio.h>
#include <custom.h>
#include <stdlib.h>
#include <conio.h>
void main()
{
int i ;
char buff[1024], file_name[30];
FILE *fptri;
clrscr();
InitPIB();
SetScreen(0);
SetInDispMode();
SetInterlace(1);

×