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

7 265 0
Giáo trình xử lý ảnh y tế Tập 2 P19 potx

Đang tải... (xem toàn văn)

Thông tin tài liệu

248 FillPibRect(0,0,0,511,255,0); printf("Enter name of file containing colored image >"); scanf("%S",file_name); fptri=fopen(file_name,"rb"); if(fptri==NULL) { printf("file %s does not exist.\n"); exit(1); } for(i=0;i<256;i++) { fread(buff,512,2,fptri); FPutPibRow(buff,0,511,i); } fclose(fptri); } 11.6 Tín hiệu chói Tín hiệu chói của một ảnh màu dựa trên mức trắng và đen cơ bản của bức ảnh đó. Như chỉ dẫn trong phần 11.2, tín hiệu chói cho bởi Y = R + 4,5907G + 0,0601B (11.3) Biểu thức (11.3) thực sự tạo ra một ảnh đen trắng nếu chúng ta tạo ra một chương trình chuyển ảnh màu từ vỉ mạch PIB (512  256) sang ảnh độ chói. Chiều rộng ảnh độ chói là 256  256. Ảnh độ chói được chia từ 0 đến 255 (8 bit). Mã của chương trình cung cấp ở chương trình 11.5. Chương trình 11.5 "COLTOBW.C".Transforming a color image acquired from the PIB board (512 x 256) to a luminance image suitable for display on the VGA card. /* program to convert color imagefrom PIB board (256x512) to gray-levelimage (256x256) which you can later display on your VGA card using DISP.C */ #include <stdio.h> #include <stdlib.h> #include <io.h> #include <conio.h> #include <ctype.h> 249 void main() { int R,G,B,i,j,buffi[512],yt; char ch,buffo[256],file_name[15]; float y; FILE *fptri,*fptro; clrscr(); printf("Enter name of file containing color image- ->"); scanf("%s",file_name); fptri=fopen(file_name, "rb"); if(fptri==NULL) { printf("File %s does not exist",file_name); exit(1); } yt=wherey(); again: gotoxy(1,yt); delline(); printf("Enter name of file to store BW image >"); scanf("%s",file_name); if(access(file_name,0)==0) { printf("File exists. Wish to overwrite? (y or n) >"); while(((ch=tolower(getch()))!='y')&&(ch!='n')); putch(ch); switch(ch) { case 'y': break; case 'n': gotoxy(1,yt); delline(); goto again; } } fptro=fopen(file_name,"wb"); for(i=0;i<256;i++) { 250 fread(buffi,1024,1,fptri); for(j=0;j<512;j+=2) { B=(0x001F & buffi[j]); G=(0x03E0 & buffi[j]) >> 5; R=(0x7C00 & buffi[j]) >> 10; y=R+4.5907*G+0.0601*B; ch=(char)(y*1.45568+0.5); /* ch=Y/Ymax*255.0 i.e. scale range between 0 to 255. */ /* Y=0.30*R+0.59*G+0.11*B; ch=(char)(Y*8.225806+0.5); */ buffo[j>>1]=ch; } fwrite(buffo,256,1,fptro); } fclose(fptri); fclose(fptro); } Hệ số nhân Y trong chương trình 11.5 được cho theo : Biến đổi này cho số mức nằm trong khoảng giữa 0 và 255. Chú ý rằng cho vỉ mạch PIB, số mức lớn nhất cho mỗi màu chính là 32. Một biểu thức nội suy cho độ sáng dùng để biến đổi tín hiệu truyền hình màu sang tín hiệu đen trắng: Y = 0,30R + 0,59G + 0,11B (11.4) Biểu thức này dựa theo cảm giác của mắt vào ba màu chính. Để kiểm tra chương trình 11.5 chúng ta sử dụng ảnh "IHABCOL.IMG". Kết quả dùng biểu thức (11.3) giới thiệu trong hình 11.7. Biểu thức (11.4) luôn cho một kết quả đúng, còn biểu thức (11.3) cho ta một ảnh mức xám có độ sáng tốt hơn. Để hoàn thiện kiến thức cơ bản của chúng ta về ảnh màu chúng tôi sẽ cung cấp cho bạn một chương trình dùng cho vỉ mạch PIB để hiển thị ba màu (đỏ, lục, lam) dưới dạng ảnh màu. Một ảnh sẽ được nạp vào vỉ mạch PIB trước tiên khi sử dụng LOADPIB. 0.32)0601.05907.41( 0.255  251 Hình 11.7 ảnh mức xám của ảnh "IHABCOL.IMG". Chương trình 11.6 “RGBCOMP.C”. Hiển thị một trong 3 màu chính của ảnh màu trên PIB. /*Program 11.6 "RGBCOMP.C". Program for displaying one of the three primary Image components of a color image on the PlB board. The color Image should be loaded first on the PIB board.*/ /* Program for producing r or g or b component image for a color image loaded on the PIB board. */ #include <custom.h> #include <stdio.h> #include <conio.h> void main() { unsigned color,ch; int y; char file_name; clrscr(); printf("\nwhich image component would you like to see\n"); 252 printf("Press r for red \n g for green\n b for blue\\n"); while(((ch=getch())!='r')&&(ch!='g')&&(ch!='b')); switch(ch) { case 'r': color=0xFC00; break; case 'g': color=0x83E0; break; case 'b': color=0x811F; } for(y=0;y<240;y++) FillPibRow(color,0,511,y,2); } Bạn có thể dùng chạy chương trình 11.6 trên "IHABCOL.IMG" để hiện ba khối màu chính, được cung cấp từ vỉ mạch PIB. Ba khối màu chính cũng giống như ảnh độ chói, ngoại trừ một được phủ bằng màu đỏ, một phủ bằng màu lam, một phủ bằng màu lục. 11.7 Lọc ảnh màu Không có gì khác nhau cơ bản giữa lọc một ảnh đen trắng và lọc một ảnh màu. Với ảnh màu chúng ta có thể thực hiện lọc bằng một trong hai phương pháp. Chúng ta có thể lọc ba màu chính như lọc một ảnh đen trắng, hoặc lọc ảnh độ chói sau đó sử dụng kết quả để đưa ra ảnh màu. Cả hai phương pháp này hoàn toàn đúng, tuy nhiên, phương pháp sau hay được dùng hơn vì một số lý do. Xử lý riêng ảnh độ chói thì bạn sẽ tiết kiệm được số phép tính toán, và nếu bạn dùng phần cứng cho lọc thời gian thực thì phương pháp này sẽ rất tiết kiệm phần cứng. 11.7.1 Lọc riêng ba màu chính Phương pháp này được trình bày như hình 11.8. Tất cả các màu chính được lọc riêng biệt, sau đó được khuyếch đại bù lại suy giảm do bộ lọc gây ra. Phương pháp này, nếu làm bằng phần cứng, sẽ đòi hỏi ba bộ lọc riêng biệt. Ảnh màu Lọc màu đỏ Lọc màu Lọc màu lục Khuếch đại Khuếch đại Khuếch đại Ảnh đã lọc 253 Hình 11.8 Lọc riêng biệt ba màu chính. Bài tập 11.1 1. Lập một chương trình lọc ảnh màu dùng sơ đồ hình 11.8. Bộ lọc có thể là kiểu FIR hoặc là kiểu IIR, và không nhất thiết phải có cùng đáp ứng tần số, ví dụ, tín hiệu đỏ có thể lọc qua bộ lọc thông cao, tín hiệu lam qua bộ lọc thông thấp, và màu lục đi qua bộ lọc thông tất. 2. Kiểm tra chương trình trên ảnh "AUTHOR.IMG" đã có sẵn trên đĩa. Dùng bộ lọc FIR thông cao được thiết kế theo kiểu xấp xỉ với tần số  c = 1.0 rad/đơn vị cho tất cả ba màu thành phần. 11.7.2 Lọc riêng ảnh tín hiệu chói Một tính chất của hỗn hợp màu (xem phần 11.2) là một điểm ảnh màu thì độc lập với độ chói của ảnh trên một phạm vi rộng. Dựa trên tính chất này, ta có thể lọc một ảnh màu mà không làm thay đổi các màu của nó. Vì vậy mà bộ lọc chỉ cho ra tín hiệu chói. Ảnh đã được lọc tín hiệu chói có thể dùng để sửa lại mức của ba màu chính mà không thay đổi tỷ lệ R:G:B tại tất cả các điểm. Chương trình là cách giải thích tốt nhất cho sơ đồ hình 11.8. Cũng cần phải nói rằng các màu chính lấy ra đã được sửa lại mức tại tất cả các điểm bằng hàm khuyếch đại, hàm này rút ra bằng chia tín hiệu chói lấy ra cho các điểm mà ta đã lấy tín hiệu chói vào. Nếu như trong phương pháp trước, ba bộ lọc cho ba màu chính có đáp ứng tần số độc lập, thì phương pháp này sẽ cho kết quả gần như độc lập với phương pháp trước. Bài tập 11.2 Lập một chương trình C lọc ảnh màu dùng sơ đồ hình 11.9. Chú ý nếu Y i = 0.0, thì tín hiệu ra khỏi bộ lọc có R 0 = G 0 = B 0 = 0.0. Kiểu bộ lọc có thể là FIR hoặc là IIR. 11.8 Lựa chọn hệ số sửa lại sắc màu và lọc Một vấn đề khó khăn trong xử lý ảnh màu là sửa lại sắc màu của một màu đặc biệt mà không làm ảnh hưởng các màu còn lại. Một phương pháp hay dùng đó là sửa lại các màu chính đến mức chính xác có thể, cùng lúc cân bằng các màu còn lại để hình ảnh có màu tự nhiên. Mặc dù, độ chính xác là sự cân bằng tất cả các sắc màu sao cho hình ảnh có màu sắc tự nhiên bằng các thay đổi ba sắc màu chính. Phương pháp lựa chọn thay đổi sắc màu của các màu đặc biệt mà không ảnh hưởng cân bằng màu với phần còn lại của ảnh. Phương pháp này gọi là thay đổi sắc màu có lựa chọn. Nó có khả năng làm tăng lên hoặc giảm đi một màu đặc biệt bằng cách dùng bộ lọc màu lựa chọn. Câu hỏi đặt ra là: Làm thế nào chúng ta có thể nhận ra sắc màu đặc biệt? Câu trả lời cho vấn đề này dựa theo biểu đồ màu. Một lớp màu được lấy ra bằng cách chia 254 biểu đồ màu thành các miền màu, mỗi miền chứa một màu đặc biệt (xem hình 11.10). Trong hình 11.10, G = lục, Y = vàng, ST = skin tone(amber), R = đỏ, M = đỏ tươi, B = lam, và C = xanh nước biển. Các đường thẳng (từ l 0 đến l 6 ) chia thành các màu dựa trên cảm giác của con người. Biểu thức của các đường thẳng này: 333.0 333.0 333.0 333.0      i i y x x y (11.5) ở đây P i (x i ,y i ) và {i = 0 đến 6} là điểm cho trong hình. Biểu thức cho các đường này có thể cho dưới dạng ii c x m y  (11.6) Hình 11.9 Phương pháp chỉ lọc tín hiệu chói. Hình 11.10 Phân chia màu sắc trong biểu đồ màu. ở đây m i và c i {i= 0 đến 6} cho trong bảng 11.2. Miền xung quanh điểm (0.333, 0.333), biểu diễn cho màu trắng trong sơ đồ màu, có thể xấp xỉ bằng một vòng tròn có bán kính r  0,03. Chương trình cho phân chia lớp màu, tính giá trị R, G, B cho một điểm theo: G (0.2757, 0.7147) M B l 6 l 5 l 4 l 3 l 2 l 1 l 0 (0.333, 0.333) W P 5 (0.208, 0.285) P 6 (0.229, 0.424) R(0.735, 0.265) P 2 (0.532, 0.465) P 1 (0.479, 0.517) P 0 (0.408, 0.585) P 3 (0.501, 0.160) P 4 (0.337, 0.086) B (0.167, 0.009) R G Y y x Y 1 Ảnh đã lọc. Y o Sinh ra Y 1 =R + 4.5907G + 0.0601B 1 Y Y RR o o  1 Y Y GG o o  1 Y Y BB o o  Bộ lọc. . (5 12 x 25 6) to a luminance image suitable for display on the VGA card. /* program to convert color imagefrom PIB board (25 6x5 12) to gray-levelimage (25 6x256) which you can later display. >> 10; y= R+4.5907*G+0.0601*B; ch=(char) (y* 1.45568+0.5); /* ch =Y/ Ymax *25 5.0 i.e. scale range between 0 to 25 5. */ /* Y= 0.30*R+0.59*G+0.11*B; ch=(char) (Y* 8 .22 5806+0.5); */ . (0 .22 9, 0. 424 ) R(0.735, 0 .26 5) P 2 (0.5 32, 0.465) P 1 (0.479, 0.517) P 0 (0.408, 0.585) P 3 (0.501, 0.160) P 4 (0.337, 0.086) B (0.167, 0.009) R G Y y x Y 1 Ảnh

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

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan