ẢNH Y HỌC
Giới thiệu chung
Digital Imaging and Communications in Medicine (DICOM) là tiêu chuẩn để bắt tay, lưu trữ, in ấn và thu/nhận hình ảnh trong y tế Tiêu chuẩn này bao gồm cả việc định nghĩa cấu trúc tập tin và giao thức truyền thông tin Giao thức truyền thông tin là một giao thức ứng dụng sử dụng nền tảng TCP/IP để giao tiếp lẫn nhau giữa các hệ thống Các tập tin DICOM có thể được trao đổi lẫn nhau giữa các hệ thống khi các hệ thống này có khả năng thu nhận hình ảnh và dữ liệu bệnh nhân theo định dạng DICOM.
Tiêu chuẩn DICOM cho phép việc tích hợp dễ dàng các máy thu nhận hình ảnh, server, trạm làm việc (workstation), máy in và các thiết bị phần cứng khác có nối mạng từ các nhà sản xuất khác nhau vào trong hệ thống PACS Các thiết bị khác nhau được đi kèm một bảng đáp ứng các tiêu chuẩn DICOM để làm rõ các lớp dịch vụ mà thiết bị này hổ trợ DICOM đã dần dần được chấp nhận rộng rãi ở các bệnh viện và phòng khám.
Lịch sử
DICOM hiện đã có phiên bản thứ 3 , được phát triển và nắm giữ bản quyền bởi Hiệp hội ngành Chẩn Đoán hình ảnh Hoa Kỳ (ACR) và Hiệp hội Các nhà sản xuất Điện-Điện tử Hoa Kỳ (NEMA).
Vào năm 1988 phiên bản thứ hai được phát hành Đây là phiên bản được chấp nhận rộng rãi của các nhà sản xuất Hình ảnh được truyền qua sợi cáp DICOM 50 chân Vào cuộc gặp thường niên của RSNA vào năm 1990, sản phẩm thương mại đầu tiên hổ trợ ACR/NEMA 2.0 đã được giới thiệu bởi GE Healthcare và một công ty tên Vortech (sau này được mua bởi Eastman Kodak) Không lâu sau đó phiên bản thứ 2 được phát hành với nhiều sự cải tiến Một vài phần mở rộng cho ACR/NEMA 2.0 đã được thiết lập, như Papyrus (được phát triển bởi Đại học Y Dược Geneva, Thụy Sĩ) và SPI (Standard Procduct Interconnect) Chuẩn liên kết nối các thiết bị (được phát triển bởi Siemens Medical Solutions và Philips Medical Systems).
Năm 1992, phiên bản thứ ba được ra mắt và đổi tên thành DICOM Nhiều lớp dịch vụ mới đã được định nghĩa, và tính năng hỗ trợ lớp mạng được thêm vào và bảng đáp ứng các điều kiện của DICOM được giới thiệu.
Định dạng dữ liệu DICOM
Định dạng dữ liệu DICOM khác so với các định dạng khác là các nhóm thông tin được tích hợp vào bên trong tập tin DICOM Do đó, nếu một tập tin X-quang phổi theo định dạng DICOM sẽ chứa các thông tin như tên bệnh nhân, mã ID bệnh nhân, vì vậy hình ảnh sẽ không bao giờ bị thất lạc thông tin.
Một đối tượng dữ liệu DICOM sẽ bao gồm các thuộc tính như họ và tên, mã ID,v.v. và cũng bao gồm các thuộc tính đặc biệt chứa dữ liệu pixel của hình ảnh Một đối
Trong nhiều mô hình , nó tương ứng với một ảnh đơn Tuy nhiên , chú ý là thuộc tính có thể chứa đựng nhiều “khung” , cho phép việc lưu trữ thành các vòng hoăc dữ liệu đa khung khác Ví dụ khác là dữ liệu NM, trong đó một ảnh NM được định nghĩa là một ảnh đa khung đa chiều Trong những trường hợp này dữ liệu ba hay bốn chiều có thể được đóng gói trong một đối tượng DICOM đơn Dữ liệu pixel có thể được nén bằng cách sử dụng nhiều tiêu chuẩn đa dạng, bao gồm JPEG, JPEG Lossless, JPEG 2000, và Run-length encoding (RLE) Việc nén LZW (Zip) có thể được sử dụng cho toàn bộ tập dữ liệu (không chỉ là dữ liệu pixel) nhưng hiếm khi được thực hiện. Định dạng cơ bản giống nhau được sử dụng cho tất cả các ứng dụng, kể cả mạng và cách dùng tệp , nhưng khi ghi vào một tệp, thông thường một " đầu mục " thực (chứa đựng những sao chép của vài thuộc tính khóa và những chi tiết của ứng dụng ghi nó) được bổ sung.
Các tập tin DICOM chứa một phần đầu mục , một phần thông tin dữ liệu ảnh , và một thể hiện SOP đơn Phần đầu mục chiếm 128 byte đầu, tiếp theo là các đặc tính DICM, đều viết hoa Ban đầu nó chứa toàn giá trị 0 nếu không được sử dụng (đôi khi những ứng dụng sẽ sử dụng nó cho dữ liệu sở hữu)
Theo sau đầu mục là thông tin dữ liệu ảnh Phấn này theo một định dạng tệp được đánh dấu, và chứa đựng thông tin về tệp , các số seri và đối tượng nghiên cứu và bệnh nhân mà nó thuộc về Thông tin này thường xuyên được phân tích và sử dụng như dữ liệu chỉ số hóa bởi những hệ thống PACSvà tài liệu lưu trữ.
Hình 1.1- Các tag trong định dạng dữ liệu DICOM
Trong mô hình DICOM, một bệnh nhân có thể có 1 N đối tượng nghiên cứu (đôi khi được tham chiếu tới như những sát hạch hay những thủ tục) Mỗi nghiên cứu gồm có 1 N seri Một seri nói chung bằng một kiểu đặc biệt (mô thái) của dữ liệu, hay vị trí của một bệnh nhân trên thiết bị thu nhận Mỗi seri chứa đựng 1 N thể hiện đối tượng DICOM ( đa số thông thường là hình ảnh , nhưng cũng có khi là báo cáo, đối tượng sóng v v.) Tất cả thông tin này được chứa đựng trong mỗi đối tượng DICOM của một nghiên cứu Bởi vậy, nếu một nghiên cứu được thực hiện trên một bệnh nhân, chứa đựng 2 seri , từng seri có 10 thể hiện, tất cả thể hiện sẽ chứa đựng thông tin bệnh nhân và nghiên cứu trong đầu mục nó Các thể hiện cũng chứa thông tin đối với các seri mà nó có , giống như với thông tin của thể hiện.
Hình 1.2-Mô hình thông tin
Như đã đề cập, bên trong đầu mục là nhiều phần tử dữ liệu được chứa trong các tag. Một vài phần tử có giá trị đơn, của những kiểu dữ liệu khác Những phần tử này có thể được lồng vào, chứa đựng những phần tử dữ liệu của mình Đó gọi là một chuỗi. Ngoài ra, có thể xảy ra tạo ra những tag của mình, chứa đựng những phần tử dữ liệu tự định nghĩa Đây được gọi một nhãn riêng tư, và thường không được nhận biết bởi các ứng dụng khác khi đọc tệp DICOM này Những nhãn riêng tư hữu ích khi muốn truyền tải những thông tin không được định nghĩa trong chuẩn DICOM, để có thể được đọc bởi các thể hiện khác của ứng dụng của người dùng hoặc các ứng dụng khác người dùng viết.
XỬ LÝ ẢNH Y HỌC
Các chức năng chính trong xử lý ảnh y học
1 Thay đổi độ tương phản:
- Mô tả: Tăng cường độ tương phản cho những vùng ảnh có độ tương phản thấp.
- Phương pháp: Tăng độ tương phản giữa những pixel cạnh nhau để tăng cường chi tiết ảnh.
2 Hiệu ứng phát hiện biên:
- Mô tả: Phát hiện biên và cường độ của biên trên một ảnh.
- Phương pháp: Nhị phân ảnh và phác thảo đối tượng.
- Mô tả: Tăng hoặc giảm độ sắc của ảnh.
- Phương pháp: Mài các biên ảnh.
- Mô tả: Đảo ngược ảnh từ trên xuống dưới hoặc từ trái qua phải để tạo ra một ảnh ánh xạ qua gương.
- Phương pháp: Đảo ngược ảnh bằng phương pháp ánh xạ từng pixel.
- Phương pháp: Quay ảnh bằng phương pháp ánh xạ từng pixel.
6 Hiệu ứng thay đổi kích thước ảnh:
- Phương pháp: Thay đổi kich thước chiều rộng và chiều cao của ảnh.
- Phương pháp: Phóng to từng vùng ảnh tương ứng với vị trí kính lúp.
- Phương pháp: Lọc bỏ nhiễu trên ảnh.
- Phương pháp: Tạo một ảnh 3D (làm nổi các biên ảnh bắng hiệu ứng 3D).
11 Hiệu ứng loại bỏ nền:
- Mô tả: Loại bỏ nền của ảnh.
- Phương pháp: Cải thiện chất lượng ảnh, loại bỏ nền và tăng cường độ rõ ràng của các chi tiết ảnh.
- Mô tả: Chuyển định dạng ảnh grayslace 12 hoặc 16 bit thành ảnh grayscale 8 bit hoặc ảnh RGB 24 bit.
- Phương pháp: Thay đổi chiều sâu ảnh và dữ liệu tương ứng với Lookup Table nguyên bản.
13 Hiệu ứng thay đổi độ sáng:
- Phương pháp: Tăng hoặc giảm cường độ sáng của ảnh.
- Mô tả: Xếp thứ tự một số pixel và tăng cường chi tiết ảnh dựa trên các không gian màu riêng biệt (RGB, YUV hoặc GRAY) bằng cách phân phối lại cường độ các màu sắc theo biểu đồ dữ liệu.
- Mô tả: Đọc header của file và trả về các thông tin giá trị của các tag.
Một số phần mềm xử lý ảnh y học
1 Sante DICOM Viewer: a Các chức năng chính:
- Tương thích với tất cả các mô hình (CT, MR, NM, US, XA, MG, CR…), và tất cả các định dạng DICOM3.0 và NEMA.
- Hỗ trợ các định dạng ảnh Bitmap, Jpg, Jpeg 2000, pnp, gif.
- Hỗ trợ đầy đủ DICOMDIRs (xem, mở, tạo, chỉnh sửa, chọn ảnh./seria để xem hoặc/và chuyển vào các thư mục khác).
- Hỗ trợ các công cụ lựa chọn ROI cao cấp ((bàn tay, đũa thần, eye-dropper, hình chữ nhật, vòng tròn, hình ê-líp, hình nhiều cạnh)
- Phân tích thống kê trên ROIs (đếm pixel, giá trị min, giá trị max, trị số trung bình, độ lệch tiêu chuẩn, vùng, thể tích)
- Công cụ đo (khoảng cách, góc, vùng, thể tích).
- Zoom nội suy và các công cụ zoom cao cấp (zoom động, cửa sổ zoom)
- Thay đổi kích thước (phóng to, thu nhỏ, duy trì hệ số zoom cho các ảnh tiếp theo)
- So sánh các tag DICOM.
- Định hướng ảnh (quay, lật)
- Điều chỉnh ảnh ( điều chỉnh độ tương phản - độ chói,
- Bộ lọc xử lý ảnh (làm mờ, mài, mặt nạ…).
- Tạo file avi có hoặc không có chú thích.
- Chuyển đổi giữa các định dạng ( JPEG, TIFF, BMP, PNG, RAW )
- Chuyển đổi các định dạng ảnh đơn giản ( JPEG, TIFF, BMP, PNG, GIF) sang định dạng DICOM đơn hoặc đa frame theo khuôn mẫu.
- Xuất các frames DICOM như các tệp nhị phân. b.Screenshot:
RemotEye là một chương trình xem ảnh DICOM trên nền mạng cho phép trình bày những ảnh DICOM và seria mà ở xa về mặt vật lý và có thể xem được thông qua mạng Internet hay Intranet Nó cho phép khôi phục những ảnh y học được tạo ra bởi những mô thái bệnh viện và được cất giữ vào trong những tài liệu lưu trữ từ xa, trình bày chúng trong vài cách khác nhau và thực hiện trả trước những thao tác xử lý ảnh. a Các chức năng chính:
- Tính tương thích đa hệ
- Hỗ trợ nhiều định dạng : định dạng DICOM 3.0 part 10, DICOM (RAW), các định dạng ảnh khác bao gồm cả ảnh grayslace và ảnh màu (8 bit, 16 bit GrayScale, 24 bit RGB, 24 bit YBR), định dạng nén JPG, JPG 2000 mất và không mất dữ liệu, RLE, MPGE2, file DICOM đơn hoặc đa frame, file DICOMDIR,
- Xuất ảnh ra nhiều định dạng (DICOM, JPEG, JPEG 2000, PNG)
- Chức năng tìm kiếm: hỗ trợ truy vấn các tài liệu lưu trữ DICOM dựa trên cơ chế hợp nhất HTML/XML, các bộ lọc tìm kiếm mạnh.
- Hiện thị ảnh trên nhiều layout.
- Tạo các ảnh thu nhỏ cho 1 seria ảnh.
- Hỗ trợ kéo thả ảnh, Mouse Scroller để chuyển đến ảnh trước hoặc sau.
- Hỗ trợ chèn văn bản, chú thích.
- Zooming: hỗ trợ nhiều kiểu nội suy gần nhất, song tuyến tính, bicubic.
- Công cụ kính lúp với hệ số phóng đại và kích thước kính lúp cấu hình được.
- Công cụ tạo hình với nhiều dạng (chữ nhật, tròn, đa giác)
- Lấy toàn cảnh điều khiển bằng chuột.
- Hỗ trợ in ảnh theo chuẩn cục bộ, in các báo cáo văn bản, báo các cấu trúc (RS).
- Các chức năng biến đổi hình học: quay ảnh 90 0 theo chiều kim đồng hồ hoặc ngược lại, lật ngang, lật dọc.
- Các chức năng lọc ảnh: phát hiện biên, làm sắc, làm mờ.
- Quản lý độ tương phản: phủ định ảnh, canh cửa sổ tự động ( tự động canh cửa sổ của việc sử dụng dải mức xám, cùng với việc mở rộng tất cả các dải động của thiết bị đầu ra), các chức năng màu giả, với những bảng Look-up định nghĩa trước.
- Chế độ Cine: đoạn phim của tất cả các frame trong một ảnh DICOM đa frame, hoặc của tất cả các ảnh trong cùng một seria.
- Các chức năng phép đo và phân tích: đo khoảng các giữa các điểm theo pixel và milimet (dựa vào các thông tin hiện tại trong tệp DICOM), định cỡ các khoảng cách trên ảnh, đặc biệt hữu ích để thực hiện những phép đo trên những ảnh DICOM mà phần tử dữ liệu Pixel Spacing không được định nghĩa, các phép đo diện tích hình chữ nhật, hình bầu dục theo pixel hay milimet vuông, dò tìm những giá trị điểm cực đại, cực tiểu, trung bình (độ sáng) trong vùng, phép đo góc, phép đo mật độ.
- Chức năng chú giải: hỗ trợ dòng , chèn dòng, hình chữ nhật, hình vuông, hình tròn, hình elip và những chú giải văn bản.
- Chức năng báo cáo: hỗ trợ việc nhập, xem và in các báo cáo văn bản tương ứng với mỗi nghiên cứu, hỗ trợ việc thu nhận và phát lại các báo cáo âm thanh tương ứng với mỗi nghiên cứu, hỗ trợ hiển thị và in các đối tượng SR văn bản nền DICOM, và hiển thị các báo các non-DICOM (các định dạng PDF, DOC, TXT, RTF).
- Xuất các ảnh ra định dạng DICOM, JPEG, JPEG 2000, PNG, hỗ trợ tạo các DICOM DVDs/CDs. b Screenshots:
3 FP Image: a Các chức năng chính:
- Tạo một cơ sở dữ liệu các tệp DICOM trên thiết bị cục bộ hoặc trên mạng.
- Chọn tệp theo các nhóm Bệnh nhân/Seria/Ảnh.
- Xem thông tin các tag DICOM.
- Hiển thị ảnh ở chế độ zoom hoặc Window Width/Level thời gian thực.
- Lưu ảnh và thông tin và bộ nhớ đệm và sử dụng trong các ứng dụng khác.
- Chế độ Cine cho các ảnh đa frame 8 bit.
- Lưu đoạn phim đang chạy dưới định dạng AVI.
- Xem và xử lý ảnh được chọn.
- Chuyển đổi sang định dạng JPEG. b Screenshot:
CÔNG NGHỆ
Các thư viện
Phần mềm đồ họa 3 chiều ứng dụng trong y tế được phát triển theo định hướng xây dựng một ứng dụng web-based chuyên xử lý ảnh DICOM bằng ngôn ngữ lập trình Java Ngoài các thư viện sẵn có của Java, có sử dụng một số thư viện phục vụ cho việc xử lý ảnh chuẩn DICOM và upload file lên máy chủ.
1.PixelMed: a Kiến trúc thư viện:
- Gói com.pixelmed.apps: Gói chứa một số ứng dụng tiện ích phục vụ cho các mục đích không tiện đặt trong các gói khác hoặc có những đặc tính bao quát nhiều gói khác nhau.
- Gói com.pixelmed.convert: Gói chứa lớp
ConvertAmicasJPEG2000FilesetToDicom cung cấp bộ chuyển đổi một tập các tệp tin Amicas JPEG 2000 sang định dạng DICOM.
- Gói com.pixelmed.database: Cung cấp những hỗ trợ về cơ sở dữ liệu cho các ứng dụng sử dụng toolkit DICOM và cần truy cập lâu dài vào kho lưu trữ các thực thể trong mô hình thông tin DICOM.
- Gói com.pixelmed.dicom: Cung cấp các lớp để khởi tạo, đọc, ghi, và thao tác với những đối tượng DICOM hỗn hợp.
- Gói com.pixelmed.display: Cung cấp các lớp để hiện thị các đối tượng DICOM hỗn hợp, bao gồm các ảnh và phân bố.
- Gói com.pixelmed.display.event: Cung cấp các lớp xử lý những sự kiện liên quan đến việc hiện thị và định hướng thông qua các ảnh và phân bố.
- Gói com.pixelmed.displaywave: Cung cấp các lớp để hiện thị các dạng song ECG, bao gồm các tệp DICOM và SCP-ECG.
- Gói com.pixelmed.event: Cung cấp các lớp xử lý sự kiện chung.
- Gói com.pixelmed.geometry: Cung cấp các lớp tạo cơ sở cho việc định vị và các ảnh trực giao khác trong phép chiếu hoặc phép giao nhau của các hình ảnh.
- Gói com.pixelmed.network: Cung cấp các lớp để gửi, nhận, truy vấn và khôi phục các đối tượng DICOM hỗn hợp qua mạng, cũng như hỗ trợ các hàm mức thấp.
- Gói com.pixelmed.query: Đóng gói các truy vấn DICOM ở mức trưu tượng cao hỗ trợ tạo một mô hình cây dựa trên kết quả của câu truy vấn và một giao diện đồ họa người dùng cho mô hình đó.
- Gói com.pixelmed.scpecg: Cung cấp các lớp đọc tệp SCP-ECG.
- Gói com.pixelmed.server: Thực thi một máy chủ lưu trữ DICOM cung cấp một cơ sở dữ liệu, một truy vấn và khôi phục DICOM, và một Web truy cập đến các đối tượng DICOM (WADO).
- Gói com.pixelmed.transfermonitor: Cung cấp các lớp quản lý thống kê những chuyển đổi.
- Gói com.pixelmed.validate: Cung cấp các lớp làm có hiệu lực những thể hiện hỗn hợp chống lại IOD chuẩn DICOM tương ứng.
- Gói com.pixelmed.web: Thực thi một Web truy cập tới các đối tượng DICOM (WADO) như được định nghĩa trong DICOM PS 3.18 (ISO 17432). b Một số lớp thông dụng:
+ Lớp AttributeList: java.lang.Object java.util.AbstractMap java.util.TreeMap com.pixelmed.dicom.AttributeList
Lớp AttributeList lưu trữ một danh sách các thuộc tính DICOM riêng biệt.
Những thể hiện của lớp có thể được dùng cho toàn bộ các SOP lưu trữ hỗn hợp, hoặc các đoạn của những thông tin đầu mục, hay đơn giản chỉ là danh sách các thuộc tính được truyền vào cho các phương thức khác (ví dụ như danh sách các thuộc tính thêm vào hay gỡ bỏ khỏi một danh sách khác).
Lớp này được thực thi thực sự bằng cách kế thừa lớp java.util.TreeMap như một ánh xạ của các khóa AttributeTag đến các giá trị Attribute Do đó, tất cả các phương thức của tập hợp bên dưới đều sẵn có, bao gồm thêm các cặp khóa-giá trị và trích xuất các giá trị theo khóa Vòng lặp thông qua danh sách các cặp khóa-giá trị cũng được hỗ trợ, và vòng lặp trả về các giá trị khóa AttributeTag theo thứ tự tăng dần.
Lớp cung cấp các phương thức để đọc toàn bộ đối tượng như một danh sách các thuộc, từ tệp hoặc stream Ví dụ, đoạn mã sau đọc toàn bộ đối tượng từ một tệp xác định và trả về nội dung của danh sách các thuộc tính:
AttributeList list = new AttributeList(); list.read(arg[0],null,true,true);
Tương tư, các phương thức được cung cấp để ghi toàn bộ đối tượng Ví dụ, đoạn mã trên có thể được mở rộng để ghi danh sách vào một tệp như sau: list.write(arg[1],TransferSyntax.ExplicitVRLittleEndian,true,true)
Chú ý là trong thực tế, thường muốn thực hiện nhiều thao tác hơn trước khi ghi đối tượng vừa được đọc, và một số phương thức có cả trong lớp này và các lớp liên quan được minh họa trong ví dụ sau:
AttributeList list = new AttributeList(); list.read(arg[0],null,true,true);
//list.removePrivateAttributes(); list.removeGroupLengthAttributes(); list.removeMetaInformationHeaderAttributes();
FileMetaInformation.addFileMetaInformation(list,TransferSyntax.Exp licitVRLittleEndian,"OURAETITLE"); list.write(arg[1],TransferSyntax.ExplicitVRLittleEndian,true,true)
Các thuộc tính riêng biệt có thể được bổ sung hoặc xóa bỏ, bằng cách tạo mới danh sách hoặc sử dụng một danh sách được đọc từ một đối tượng đã có Ví dụ, để đưa về 0 tên bệnh nhân có thể làm như sau: list.replaceWithZeroLengthIfPresent(TagFromName.PatientName); hoặc thay thế bằng một giá trị xác định có thể làm như sau:
Attribute a = new PersonNameAttribute(TagFromName.PatientName); a.addValue(value); list.put(TagFromName.PatientName,a);
Một phương thức nhanh gọn hơn để thêm mới (hoặc thay thế) các thuộc tính (nếu có trong từ điển VR có thể xác định) được cung cấp: list.putNewAttribute(TagFromName.PatientName); hoặc một tập các kí tự đặc biệt khác so với giá trị mặc định đang được sử dụng: list.putNewAttribute(TagFromName.PatientName,specificCharacterSet)
; và khi phương thức trả về thuộc tính phát sinh, các giá trị có thể dễ dàng được bổ sung: list.putNewAttribute(TagFromName.PatientName,specificCharacterSet) addValue("Blo^Joe");
Chú ý, lớp Attribute cung cấp các thuộc tính static để trích xuất và thao tác các thuộc tính riêng biệt trong danh sách, ví dụ:
String patientName=Attribute.getSingleStringValueOrNull(list,TagFromName. PatientName);
PHÂN TÍCH HỆ THỐNG
Kiến trúc hệ thống
Phần mềm đồ họa 3 chiều ứng dụng trong y tế được phát triển theo định hướng xây dựng một ứng dụng web-based chuyên xử lý ảnh DICOM bằng ngôn ngữ lập trình Java ,
JavaScript , HTML , CSS 2.0 và mô hình AJAX của Web 2.0
2 Thiết kế giao diện: a Các frame hiện thị:
1) Frame hiện thị ảnh chính: Hiện thị ảnh người dùng chọn với kích thước ban đầu khi load vào là kích thước gốc, sau đó mọi thao tác xử lý đều xảy ra trên ảnh này.
2) Frame hiện thị ảnh thumbnail: Hiện thị các frame ảnh thành phần của ảnh DICOM được người dùng updoad lên, cho phép click để chọn ảnh hiện thị trong frame chính.
3) Frame hiện thị thông tin ảnh: Hiện thị thông tin chung và thông tin header của ảnh (với ảnh DICOM). b Các nút chức năng:
1) Upload ảnh: Hỗ trợ người dùng chọn file ảnh để upload lên máy chủ.
2) Thu nhỏ: Thu nhỏ kích thước ảnh
3) Phóng to: Phóng to kích thước ảnh.
4) Quay trái: Quay ảnh sang trái một góc 90 0
5) Quay phải: Quay ảnh sang phải một góc 90 0
6) Kính lúp: Tạo hiệu ứng kính lúp trên ảnh.
7) Lật ngang: Lật ảnh từ trái sang phải.
8) Lật dọc: Lật ảnh từ trên xuống dưới.
9) Làm nổi: Làm nổi bề mặt ảnh.
10)Làm mờ: Làm mờ ảnh.
11)Làm sắc: Làm sắc nét ảnh.
12)Phát hiện biên: Làm nổi biên ảnh.
13)Thông tin ảnh: Hiện thị thông tin ảnh.
3 Kiến trúc thư viện chương trình: a Các tệp phía máy khách:
1) DicomViewer.html : tệp thiết kế giao diện chính của chương trình, mặc định được trả về trình duyệt máy khách khi người dùng nhập vào địa chỉ URL của chương trình.
2) ThumbnailFrame.html : tệp hiện thị danh sách các ảnh thu nhỏ của ảnh vừa được người dùng upload lên máy chủ.
3) MainImageFrame.html : tệp hiện thị ảnh được chọn từ danh sách các ảnh thu nhỏ với kích thước ban đầu là kích thước gốc của ảnh, các thao tác xử lý ảnh sau đó đều thực hiện trên ảnh này.
4) InfoHeaderFrame.html : tệp hiện thị thông tin ảnh.
1) DicomViewerPageCode.js: tệp được gọi thông qua thẻ của tệp
DicomViewer.html, chứa các hàm xử lý tương tác của người dùng với chương trình:
- Hàm : thực hiện chức năng và title của đối tượng ảnh trong têp MainImageFrame.html là imgSrc và title.
- Hàm zoomout(imageObject): thực hiện chức năng thu nhỏ kích thước đối tượng ảnh imageObject.
- Hàm zoomin(imageObject): thực hiện chức năng phóng to kích thước đối tượng ảnh imageObject.
- Hàm getRequestObject(): tạo một đối tượng XMLHttpRequest hoặc ActiveXObject.
- Hàm sendRequest(address): gửi yêu cầu đến máy chủ theo địa chỉ được truyền vào qua tham số address.
- Hàm rotateLeftFunction(img): thực hiện chức năng quay đối tượng ảnh img sang trái một góc 90 0
- Hàm rotateRightFunction(img): thực hiện chức năng quay đối tượng ảnh img sang phải một góc 90 0
- Hàm flipH(img): thực hiện chức năng lật đối tượng ảnh img từ trái sang phải.
- Hàm flipV(img): thực hiện chức năng lật đối tượng ảnh img từ dưới lên trên.
- Hàm brightness(img): thực hiên chức năng làm tăng độ sáng của đối tượng ảnh img.
- Hàm blurring(img): thực hiện chức năng làm mờ đối tượng ảnh img.
- Hàm sharpening(img): thực hiện chức năng làm sắc đối tượng ảnh img.
- Hàm embrossing(img): thực hiện chức năng làm nổi đối tượng ảnh img.
- Hàm embrossing(img): thực hiện chức năng làm nổi đối tượng ảnh img.
- Hàm edge(img): thực hiện chức năng phát hiện biên đối tượng ảnh img.
- Hàm showResponseRotate(): thực hiện xử lý kết quả trả về từ máy chủ và hiện thị trên trình duyệt.
- Hàm initMagnifier(): thực hiện chức năng tạo hiệu ứng kính lúp trên ảnh.
- Hàm showInfo(): thực hiện chức năng hiện thị thông tin ảnh trên trình duyệt.
2) ThumbnailPageCode.js: tệp được gọi thông qua thẻ tệp
ThumbnailFrame.html, chứa các hàm phục vụ cho thao tác chọn ảnh của người dùng:
- Hàm initPage(): thực hiện gán các bộ xử lý sự kiện khi trang html được tải về trình duyệt.
- Hàm document_onmouseover(eventObject): thực hiện xử lý sự kiện khi người dùng di chuột trên đối tượng.
- Hàm document_onmouseout(eventObject): thực hiện xử lý sự kiện khi người dùng di chuột ra khỏi đối tượng.
- Hàm document_onmouseclick(eventObject): thực hiện xử lý sự kiện khi người dùng nhấn chuột trên đối tượng.
- Hàm getEventSourceElement(eventObject): trả về đối tượng xảy ra sự kiện. b Các lớp phia máy chủ:
1) Lớp FileUploadServlet : thực hiện chức năng updoad ảnh vào thư mục xác định trên máy chủ và trả kết quả về cho máy khách.
2) Lớp RotateLeftServlet : thực hiện chức năng quay ảnh sang trái một góc
90 0 và trả kết quả về cho máy khách.
3) Lớp RotateRightServlet : thực hiện chức năng quay ảnh sang phải một góc 90 0 và trả kết quả về cho máy khách.
4) Lớp BlurringServlet : thực hiện chức năng làm mờ ảnh và trả kết quả về cho máy khách.
5) Lớp BrightnessServlet : thực hiện chức năng làm tăng độ sang của ảnh và trả kết quả về cho máy khách
6) Lớp BrightnessServlet : thực hiện chức năng làm tăng độ sang của ảnh và trả kết quả về cho máy khách.
7) Lớp EdgeHServlet : thực hiện chức năng phát hiện biên của ảnh và trả kết quả về cho máy khách.
8) Lớp EmbrossingServlet : thực hiện chức năng làm nổi ảnh và trả kết quả về cho máy khách.
9) Lớp FlipHServlet : thực hiện chức năng lật ảnh từ trái sang phải và trả kết quả về cho máy khách.
10)Lớp FlipVServlet: thực hiện chức năng lật ảnh từ dưới lên trên và trả kết quả về cho máy khách.
11)Lớp Dcm2Jpg: chứa các hàm chuyển định dạng ảnh DICOM sang ảnh JPEG và đọc thông tin các thẻ của ảnh.
12)Lớp ImageProcessor : chứa các hàm thực hiện các chức năng xử lý ảnh.
Tất cả các chức năng trong chương trình đều được thực hiện theo mô hình AJAX của công nghệ Web 2.0 Mô hình thực thi chung được mô tả như biểu đồ diễn tiến sau:
Đặc tả chi tiết chức năng
- Sau khi ứng dụng được cài đặt tại máy chủ , người dùng có thể upload ảnh (DICOM, JPEG, PNG, BITMAP) vào một thư mục xác định trên máy chủ.
- Khi ảnh được upload thành công , ảnh sẽ được hiện thị trên trình duyệt của máy khách với kích thước gốc. b Phương pháp:
Thiết kế phía máy khách:
1) Tạo đối tượng form trên trang HTML để upload ảnh:
Tạo một đối tượng form, thiết lập các thuộc tính và hàm xử lý sự kiện cho đối tượng:
- id: id của đối tượng là uploadForm
- enctype: thiết lập thuộc tính enctype là multipart/form-data để có thể upload file.
- method: phương thức là post.
- action: sự kiện action xảy ra gọi đến lớp FileUploadServlet ở máy chủ.
- onsubmit: sự kiện form được submit gọi đến hàm uploadFunction(). Các thành phần của form:
Input với thuộc tính type là file.
Input với thuộc tính type là submit.
- Viết các hàm JavaScript để gửi yêu cầu đến máy chủ và nhận kết quả trả về từ máy chủ:
Tạo một đối tượng XMLHttpRequest hoặc ActiveXObject để gửi yêu cầu đến máy chủ và nhận kết quả trả về từ máy chủ.
- Gọi hàm sendRequest(address) với tham số address là đường dẫn đến lớp FileUploadServlet.
Các tham số: - address: đường dẫn đến lớp JavaSerlet ở máy chủ.
- Tạo đối tượng request bằng cách gọi hàm
- Thiết lập hàm xử lý sự kiện onreadystatechange cho đối tượng request khi nhận xong kết quả trả về từ máy chủ là hàm processStateChange()
- Gọi hàm open(“GET”,address,true) của đối tượng request để mở kết nối đến máy chủ,với phương thức là GET và đường dẫn là address.
- Gọi hàm send(null) của đối tượng request để gửi yêu cầu đến máy chủ.
- Nếu kết quả đã được trả về toàn bộ, tạo đối tượng xmlDocument nhận giá trị là dữ liệu xml trả về từ máy chủ.
- Duyệt đối tượng xmlDocument để lấy về giá trị các thông tin cần thiết và đường dẫn đến các tệp ảnh được phân tích từ tệp DICOM upload lên rồi hiện thị trong frame thumbnail trên trình duyệt.
Thiết kế phía máy chủ:
- Viết lớp JavaServlet nhận yêu cầu từ máy khách, xử lý yêu cầu và trả về kết quả cho máy khách:
Lớp dùng để quản lý quá trình updoad file.
- getBytRead(): trả về số byte đọc được.
- getContentLength(): trả về kích thước file.
Thực hiện upload file lên thư mục xác định trên máy chủ, sau đó tạo một đối tượng
Dcm2Jpg để convert ảnh DICOM sang định dạng JPEG bằng cách gọi hàm convertDcm2Jpg(path), đồng thời lấy về thông tin các tag của ảnh bằng hàm getInfo(path) (trong đó path là đường dẫn đến file DICOM).
Thực hiện trả về dữ liệu XML cho máy khách bao gồm các thông tin liên quan đến ảnh, đường dẫn đến các file JPEG, và các thông tin về các tag của ảnh DICOM đọc được.
2 Thay đổi kích thước: a Mô tả:
- Ảnh được hiện thị trên trình duyệt với kích thước gốc.
- Khi người dùng nhấn nút “ Phong to” kích thước ảnh tăng lên 10 %.
- Người dùng không thể tăng kích thước ảnh nếu chiều dài hoặc rộng của ảnh lớn hơn 3000 pixel.
- Khi người dùng nhấn nút “Thu nho” , kích thước ảnh giảm đi 10 %.
- Người dùng không thể giảm kích thước ảnh nếu chiều dài hoặc rộng của ảnh nhỏ hơn 150 pixel. b Phương pháp:
Thiết kế phía máy khách:
- Tạo đối tượng trên trang HTML:
Tạo một đối tượng img làm icon của nút, thiết lập các thuộc tính và hàm xử lý sự kiện cho đối tượng:
- src: đường dẫn tệp tin ảnh dùng làm icon là zoomout.jpg
- border: thiết lập độ rộng viền ảnh bằng 0.
- title:thông tin hiện thị khi người dùng di chuột lên đối tượng là
- id: id của đối tượng là zoomoutbutton.
- onclick: khi người dùng nhấn chuột trên đối tượng sẽ gọi hàm zoomout(img) với tham số img là đối tượng img hiện thị trong frame chính.
- onmouseover: khi người dùng di chuột trên đối tượng, viền đối tượng có màu đỏ.
- onmouseout: khi người dùng di chuột ra khỏi đối tượng, viền đối tượng có màu đen.
Tạo một đối tượng img làm icon của nút, thiết lập các thuộc tính và hàm xử lý sự kiện cho đối tượng:
- src: đường dẫn tệp tin ảnh dùng làm icon là zoomin.jpg
- border: thiết lập độ rộng viền ảnh bằng 0.
- title:thông tin hiện thị khi người dùng di chuột lên đối tượng là
- id: id của đối tượng là zoominbutton.
- onclick: khi người dùng nhấn chuột trên đối tượng sẽ gọi hàm zoomin(img) với tham số img là đối tượng img hiện thị trong
- onmouseover: khi người dùng di chuột trên đối tượng, viền đối tượng có màu đỏ.
- onmouseout: khi người dùng di chuột ra khỏi đối tượng, viền đối tượng có màu đen.
- Viết các hàm JavaScript để điều khiển thay đổi kích thước ảnh:
Các tham số: - imgObject: đối tượng img cần thu nhỏ kich thước.
Các tham số: - imgObject: đối tượng img cần phóng to kich thước.
- Ảnh được hiện thị trên trình duyệt.
- Khi người dùng nhấn nút “Quay trái” , ảnh sẽ quay một góc 270 o
- Khi người dùng nhấn nút “Quay phải” , ảnh sẽ quay một góc 90 o b Phương pháp:
Thiết kế phía máy khách:
- Tạo đối tượng trên trang HTML:
Tạo một đối tượng img làm icon của nút, thiết lập các thuộc tính và hàm xử lý sự kiện cho đối tượng:
- src: đường dẫn tệp tin ảnh dùng làm icon là rotateleft.jpg
- border: thiết lập độ rộng viền ảnh bằng 0.
- title:thông tin hiện thị khi người dùng di chuột lên đối tượng là quay trái.
- id: id của đối tượng là rotateleftbutton.
- onclick: khi người dùng nhấn chuột trên đối tượng sẽ gọi hàm rotateleft(img) với tham số img là đối tượng img hiện thị trong frame chính.
- onmouseover: khi người dùng di chuột trên đối tượng, viền đối tượng có màu đỏ.
- onmouseout: khi người dùng di chuột ra khỏi đối tượng, viền đối tượng có màu đen.
Tạo một đối tượng img làm icon của nút, thiết lập các thuộc tính và hàm xử lý sự kiện cho đối tượng:
- src: đường dẫn tệp tin ảnh dùng làm icon là rotateright.jpg
- border: thiết lập độ rộng viền ảnh bằng 0.
- title:thông tin hiện thị khi người dùng di chuột lên đối tượng là quay trái.
- id: id của đối tượng là rotaterightbutton.
- onclick: khi người dùng nhấn chuột trên đối tượng sẽ gọi hàm rotateright(img) với tham số img là đối tượng img hiện thị trong frame chính.
- onmouseover: khi người dùng di chuột trên đối tượng, viền đối tượng có màu đỏ.
- onmouseout: khi người dùng di chuột ra khỏi đối tượng, viền đối tượng có màu đen.
Viết các hàm JavaScript để gửi yêu cầu đến máy chủ và nhận kết quả trả về từ máy chủ:
Các tham số: - img: đối tượng img cần quay trái.
- Gọi hàm sendRequest(address) với tham số address là đường dẫn đến lớp RotateLeftServlet ở máy chủ cùng tham số gửi đi là giá trị thuộc tính src của đối tượng img vừa lấy về.
Các tham số: - img: đối tượng img cần quay phải.
Các bước thực hiện: - Lấy về giá trị thuộc tính src của đối tượng img.
- Gọi hàm sendRequest(address) với tham số address là đường dẫn đến lớp RotateRightServlet ở máy chủ cùng tham số gửi đi là giá trị thuộc tính src của đối tượng img vừa lấy về.
Tạo một đối tượng XMLHttpRequest hoặc ActiveXObject để gửi yêu cầu đến máy chủ và nhận kết quả trả về từ máy chủ.
Các tham số: - address: đường dẫn đến lớp JavaSerlet ở máy chủ.
- Tạo đối tượng request bằng cách gọi hàm getRequestObject().
- Thiết lập hàm xử lý sự kiện onreadystatechange cho đối tượng request khi nhận xong kết quả trả về từ máy chủ là hàm showResponse()
- Gọi hàm open(“GET”,address,true) của đối tượng request để mở kết nối đến máy chủ,với phương thức là GET và đường dẫn là address.
- Gọi hàm send(null) của đối tượng request để gửi yêu cầu đến
- Nếu kết quả đã được trả về toàn bộ, tạo đối tượng xmlDocument nhận giá trị là dữ liệu xml trả về từ máy chủ.
- Duyệt đối tượng xmlDocument để lấy về giá trị đường dẫn đến tệp ảnh đã được xử lý rồi hiện thị trên trình duyệt.
Thiết kế phía máy chủ:
- Viết lớp JavaServlet nhận yêu cầu từ máy khách, xử lý yêu cầu và trả về kết quả cho máy khách:
Thực hiện hiệu ứng quay trái bằng cách gọi hàm rotateLeft(buf) của đối tượng
ImageProcessor (trong đó buf là đối tượng BufferedImage tạo từ ảnh gốc)và
Thực hiện hiệu ứng quay trái bằng cách gọi hàm rotateRight(buf) của đối tượng
ImageProcessor (trong đó buf là đối tượng BufferedImage tạo từ ảnh gốc)và trả về đường dẫn đến tệp ảnh đã được xử lý cho máy khách.
Chứa các hàm thực hiện các thao tác xử lý ảnh.
- Ảnh được hiện thị trên trình duyệt.
- Khi người dùng nhấn nút “Lật ngang”, ảnh sẽ lật từ trái sang phải.
- Khi người dùng nhấn nút “Lật dọc”, ảnh sẽ lật từ dưới lên trên. b Phương pháp:
Thiết kế phía máy khách:
- Tạo đối tượng trên trang HTML:
Tạo một đối tượng img làm icon của nút, thiết lập các thuộc tính và hàm xử lý sự kiện cho đối tượng:
- src: đường dẫn tệp tin ảnh dùng làm icon là flipH.jpg
- border: thiết lập độ rộng viền ảnh bằng 0.
- title:thông tin hiện thị khi người dùng di chuột lên đối tượng là
- id: id của đối tượng là fliphbutton.
- onclick: khi người dùng nhấn chuột trên đối tượng sẽ gọi hàm flipH(img) với tham số img là đối tượng img hiện thị trong frame chính.
- onmouseover: khi người dùng di chuột trên đối tượng, viền đối tượng có màu đỏ.
- onmouseout: khi người dùng di chuột ra khỏi đối tượng, viền đối tượng có màu đen.
Tạo một đối tượng img làm icon của nút, thiết lập các thuộc tính và hàm xử lý sự kiện cho đối tượng:
- src: đường dẫn tệp tin ảnh dùng làm icon là flipV.jpg
- border: thiết lập độ rộng viền ảnh bằng 0.
- title:thông tin hiện thị khi người dùng di chuột lên đối tượng là
- id: id của đối tượng là flipvbutton.
- onclick: khi người dùng nhấn chuột trên đối tượng sẽ gọi hàm flipV(img) với tham số img là đối tượng img hiện thị trong frame chính.
- onmouseover: khi người dùng di chuột trên đối tượng, viền đối tượng có màu đỏ.
- onmouseout: khi người dùng di chuột ra khỏi đối tượng, viền đối tượng có màu đen.
Viết các hàm JavaScript để gửi yêu cầu đến máy chủ và nhận kết quả trả về từ máy chủ:
Các tham số: - img: đối tượng img cần lật ngang.
Các bước thực hiện: - Lấy về giá trị thuộc tính src của đối tượng img.
- Gọi hàm sendRequest(address) với tham số address là đường dẫn đến lớp FlipHServlet ở máy chủ cùng tham số gửi đi là giá trị thuộc tính src của đối tượng img vừa lấy về.
Các tham số: - img: đối tượng img cần quay trái.
Các bước thực hiện: - Lấy về giá trị thuộc tính src của đối tượng img.
- Gọi hàm sendRequest(address) với tham số address là đường dẫn đến lớp FlipVServlet ở máy chủ cùng tham số gửi đi là giá trị thuộc tính src của đối tượng img vừa lấy về.
Thiết kế phía máy chủ:
- Viết lớp JavaServlet nhận yêu cầu từ máy khách, xử lý yêu cầu và trả về kết quả cho máy khách:
Thực hiện hiệu ứng quay trái bằng cách gọi hàm flipH(buf) của đối tượng
ImageProcessor (trong đó buf là đối tượng BufferedImage tạo từ ảnh gốc)và trả về đường dẫn đến tệp ảnh đã được xử lý cho máy khách.
Thực hiện hiệu ứng quay trái bằng cách gọi hàm flipV(buf) của đối tượng
ImageProcessor (trong đó buf là đối tượng BufferedImage tạo từ ảnh gốc)và trả về đường dẫn đến tệp ảnh đã được xử lý cho máy khách.
- Ảnh được hiện thị trên trình duyệt.
- Khi người dùng nhấn nút “Làm mờ”, ảnh sẽ bị mờ đi. b Phương pháp:
Thiết kế phía máy khách:
- Tạo đối tượng trên trang HTML:
Tạo một đối tượng img làm icon của nút, thiết lập các thuộc tính và hàm xử lý sự kiện cho đối tượng:
- src: đường dẫn tệp tin ảnh dùng làm icon là blur.jpg
- border: thiết lập độ rộng viền ảnh bằng 0.
- title:thông tin hiện thị khi người dùng di chuột lên đối tượng là
- id: id của đối tượng là blurbutton.
- onclick: khi người dùng nhấn chuột trên đối tượng sẽ gọi hàm blur(img) với tham số img là đối tượng img hiện thị trong frame chính.
- onmouseover: khi người dùng di chuột trên đối tượng, viền đối tượng có màu đỏ.
- onmouseout: khi người dùng di chuột ra khỏi đối tượng, viền đối tượng có màu đen.
Viết các hàm JavaScript để gửi yêu cầu đến máy chủ và nhận kết quả trả về từ máy chủ:
Các tham số: - img: đối tượng img cần làm mờ.
Các bước thực hiện: - Lấy về giá trị thuộc tính src của đối tượng img.
- Gọi hàm sendRequest(address) với tham số address là đường dẫn đến lớp BlurServlet ở máy chủ cùng tham số gửi đi là giá trị thuộc tính src của đối tượng img vừa lấy về.
Thiết kế phía máy chủ:
- Viết lớp JavaServlet nhận yêu cầu từ máy khách, xử lý yêu cầu và trả về kết quả cho máy khách:
Thực hiện hiệu ứng quay trái bằng cách gọi hàm blurring(buf) của đối tượng
ImageProcessor (trong đó buf là đối tượng BufferedImage tạo từ ảnh gốc)và trả về đường dẫn đến tệp ảnh đã được xử lý cho máy khách.
- Ảnh được hiện thị trên trình duyệt.
- Khi người dùng nhấn nút “Làm sắc”, ảnh sẽ được mài sắc nét hơn. b Phương pháp:
Thiết kế phía máy khách:
- Tạo đối tượng trên trang HTML:
Tạo một đối tượng img làm icon của nút, thiết lập các thuộc tính và hàm xử lý sự
- src: đường dẫn tệp tin ảnh dùng làm icon là sharpen.jpg
- border: thiết lập độ rộng viền ảnh bằng 0.
- title:thông tin hiện thị khi người dùng di chuột lên đối tượng là
- id: id của đối tượng là sharpenbutton.
- onclick: khi người dùng nhấn chuột trên đối tượng sẽ gọi hàm sharpen(img) với tham số img là đối tượng img hiện thị trong frame chính.
- onmouseover: khi người dùng di chuột trên đối tượng, viền đối tượng có màu đỏ.
- onmouseout: khi người dùng di chuột ra khỏi đối tượng, viền đối tượng có màu đen.
Viết các hàm JavaScript để gửi yêu cầu đến máy chủ và nhận kết quả trả về từ máy chủ:
Các tham số: - img: đối tượng img cần làm sắc.
Các bước thực hiện: - Lấy về giá trị thuộc tính src của đối tượng img.
- Gọi hàm sendRequest(address) với tham số address là đường dẫn đến lớp SharpenServlet ở máy chủ cùng tham số gửi đi là giá trị thuộc tính src của đối tượng img vừa lấy về.
Thiết kế phía máy chủ:
- Viết lớp JavaServlet nhận yêu cầu từ máy khách, xử lý yêu cầu và trả về kết quả cho máy khách:
Thực hiện hiệu ứng quay trái bằng cách gọi hàm sharpening(buf) của đối tượng
ImageProcessor (trong đó buf là đối tượng BufferedImage tạo từ ảnh gốc)và trả về đường dẫn đến tệp ảnh đã được xử lý cho máy khách.
- Ảnh được hiện thị trên trình duyệt.
- Khi người dùng nhấn nút “Làm nổi”, ảnh sẽ được làm nổi 3D. b Phương pháp:
Thiết kế phía máy khách:
- Tạo đối tượng trên trang HTML:
Tạo một đối tượng img làm icon của nút, thiết lập các thuộc tính và hàm xử lý sự kiện cho đối tượng:
- src: đường dẫn tệp tin ảnh dùng làm icon là emboss.jpg
- border: thiết lập độ rộng viền ảnh bằng 0.
- title:thông tin hiện thị khi người dùng di chuột lên đối tượng là
- id: id của đối tượng là embossbutton.
- onclick: khi người dùng nhấn chuột trên đối tượng sẽ gọi hàm emboss(img) với tham số img là đối tượng img hiện thị trong frame chính.
- onmouseover: khi người dùng di chuột trên đối tượng, viền đối tượng có màu đỏ.
- onmouseout: khi người dùng di chuột ra khỏi đối tượng, viền đối tượng có màu đen.
- Viết các hàm JavaScript để gửi yêu cầu đến máy chủ và nhận kết quả trả về từ máy chủ:
Các tham số: - img: đối tượng img cần làm nổi.
Các bước thực hiện: - Lấy về giá trị thuộc tính src của đối tượng img.
- Gọi hàm sendRequest(address) với tham số address là đường dẫn đến lớp EmbossServlet ở máy chủ cùng tham số gửi đi là giá trị thuộc tính src của đối tượng img vừa lấy về.
Thiết kế phía máy chủ:
- Viết lớp JavaServlet nhận yêu cầu từ máy khách, xử lý yêu cầu và trả về kết quả cho máy khách:
Thực hiện hiệu ứng quay trái bằng cách gọi hàm embossing(buf) của đối tượng
ImageProcessor (trong đó buf là đối tượng BufferedImage tạo từ ảnh gốc)và trả về đường dẫn đến tệp ảnh đã được xử lý cho máy khách.
8 Phát hiện biên: a Mô tả:
- Ảnh được hiện thị trên trình duyệt.
- Khi người dùng nhấn nút “Phát hiện biên”, ảnh sẽ được làm nổi biên. b Phương pháp:
Thiết kế phía máy khách:
- Tạo đối tượng trên trang HTML:
Tạo một đối tượng img làm icon của nút, thiết lập các thuộc tính và hàm xử lý sự kiện cho đối tượng:
- src: đường dẫn tệp tin ảnh dùng làm icon là edge.jpg
- border: thiết lập độ rộng viền ảnh bằng 0.
- title:thông tin hiện thị khi người dùng di chuột lên đối tượng là
- id: id của đối tượng là edgebutton.
- onclick: khi người dùng nhấn chuột trên đối tượng sẽ gọi hàm edge(img) với tham số img là đối tượng img hiện thị trong frame chính.
- onmouseover: khi người dùng di chuột trên đối tượng, viền đối tượng có màu đỏ.
- onmouseout: khi người dùng di chuột ra khỏi đối tượng, viền đối tượng có màu đen.
- Viết các hàm JavaScript để gửi yêu cầu đến máy chủ và nhận kết quả trả về từ máy chủ:
Các tham số: - img: đối tượng img cần làm nổi.
Các bước thực hiện: - Lấy về giá trị thuộc tính src của đối tượng img.
- Gọi hàm sendRequest(address) với tham số address là đường dẫn đến lớp EdgeServlet ở máy chủ cùng tham số gửi đi là giá trị thuộc tính src của đối tượng img vừa lấy về.
Thiết kế phía máy chủ:
- Viết lớp JavaServlet nhận yêu cầu từ máy khách, xử lý yêu cầu và trả về kết quả cho máy khách:
Thực hiện hiệu ứng quay trái bằng cách gọi hàm edge(buf) của đối tượng
ImageProcessor (trong đó buf là đối tượng BufferedImage tạo từ ảnh gốc)và trả về đường dẫn đến tệp ảnh đã được xử lý cho máy khách.
9 Tăng độ sáng: a Mô tả:
- Ảnh được hiện thị trên trình duyệt.
- Khi người dùng nhấn nút “Tăng độ sáng”, độ sáng của ảnh được tăng lên. b Phương pháp:
Thiết kế phía máy khách:
- Tạo đối tượng trên trang HTML:
Tạo một đối tượng img làm icon của nút, thiết lập các thuộc tính và hàm xử lý sự kiện cho đối tượng:
- src: đường dẫn tệp tin ảnh dùng làm icon là brightness.jpg
- border: thiết lập độ rộng viền ảnh bằng 0.
- title:thông tin hiện thị khi người dùng di chuột lên đối tượng là Tăng độ sáng.
- id: id của đối tượng là brightnessbutton.
- onclick: khi người dùng nhấn chuột trên đối tượng sẽ gọi hàm brightness(img) với tham số img là đối tượng img hiện thị trong frame chính.
- onmouseover: khi người dùng di chuột trên đối tượng, viền đối tượng có màu đỏ.
- onmouseout: khi người dùng di chuột ra khỏi đối tượng, viền đối tượng có màu đen.
- Viết các hàm JavaScript để gửi yêu cầu đến máy chủ và nhận kết quả trả về từ máy chủ:
Các tham số: - img: đối tượng img cần làm nổi.
Các bước thực hiện: - Lấy về giá trị thuộc tính src của đối tượng img.
- Gọi hàm sendRequest(address) với tham số address là đường dẫn đến lớp BrightnessServlet ở máy chủ cùng tham số gửi đi là giá trị thuộc tính src của đối tượng img vừa lấy về.
Thiết kế phía máy chủ:
- Viết lớp JavaServlet nhận yêu cầu từ máy khách, xử lý yêu cầu và trả về kết quả cho máy khách:
Thực hiện hiệu ứng quay trái bằng cách gọi hàm brightness(buf) của đối tượng
ImageProcessor (trong đó buf là đối tượng BufferedImage tạo từ ảnh gốc)và trả về đường dẫn đến tệp ảnh đã được xử lý cho máy khách.
- Ảnh được hiện thị trên trình duyệt.
- Khi người dùng nhấn nút “Bật kính lúp”, hiệu ứng kính lúp được tạo trên ảnh để quan sát chi tiết từng phần của ảnh. b Phương pháp:
Thiết kế phía máy khách:
- Tạo đối tượng trên trang HTML:
Tạo một đối tượng img làm icon của nút, thiết lập các thuộc tính và hàm xử lý sự kiện cho đối tượng:
- src: đường dẫn tệp tin ảnh dùng làm icon là magnifier.jpg
- border: thiết lập độ rộng viền ảnh bằng 0.
- title:thông tin hiện thị khi người dùng di chuột lên đối tượng là
- id: id của đối tượng là magnifierbutton.
- onclick: khi người dùng nhấn chuột trên đối tượng sẽ gọi hàm initMagnifier() để tạo hiệu ứng kính lúp trên ảnh.
- onmouseover: khi người dùng di chuột trên đối tượng, viền đối tượng có màu đỏ.
- onmouseout: khi người dùng di chuột ra khỏi đối tượng, viền đối tượng có màu đen.
Viết các hàm JavaScript để gửi yêu cầu đến máy chủ và nhận kết quả trả về từ máy chủ:
- Xác định đối tượng img cần tạo hiệu ứng kính lúp, thiết lập thuộc tính cần thiết cho đối tượng và thuộc tính innerHTML cho nút cha của đối tượng để tạo hiệu ứng.
- Thiết lập thuộc tính visibility cho đối tương div dùng làm kính lúp là visible để tạo hiệu ứng.
- idm: chỉ số của đối tượng div.
- Thiết lập các thuộc tính left và top của đối tượng div dùng làm kính lúp để di chuyển đối tượng tương ứng với tọa độ X,Y.
Các tham số: - idm: chỉ số của đối tượng div
- Thiết lập thuộc tính visibility cho đối tương div dùng làm kính lúp là hidden để bỏ hiệu ứng.
- Loại bỏ hiệu ứng kính lúp bằng các thiết lập thuộc tính innerHTML của đối tượng div mức cao nhất đang có hiệu ứng về giá trị ban đầu.
- Lấy về các giá trị thiết lập ban đầu của nút cha đối tượng ảnh cần tạo hiệu ứng.
11 Thông tin header: a Mô tả:
- Ảnh được upload thành công và hiện thị trên trình duyệt.
- Khi người dùng nhấn nút “Thông tin ảnh”, thông tin về các thẻ của ảnh được hiện thị trên trình duyệt. b Phương pháp:
Thiết kế phía máy khách:
- Tạo đối tượng trên trang HTML:
Tạo một đối tượng img làm icon của nút, thiết lập các thuộc tính và hàm xử lý sự kiện cho đối tượng:
- src: đường dẫn tệp tin ảnh dùng làm icon là info.jpg
- border: thiết lập độ rộng viền ảnh bằng 0.
- title:thông tin hiện thị khi người dùng di chuột lên đối tượng là
- id: id của đối tượng là infobutton.
- onclick: khi người dùng nhấn chuột trên đối tượng sẽ gọi hàm showInfo() để hiện thị thông tin ảnh.
- onmouseover: khi người dùng di chuột trên đối tượng, viền đối tượng có màu đỏ.
- onmouseout: khi người dùng di chuột ra khỏi đối tượng, viền đối tượng có màu đen.
- Viết các hàm JavaScript để gửi yêu cầu đến máy chủ và nhận kết quả trả về từ máy chủ:
- Tạo một đối tượng table để chứa các thông tin ảnh lấy được về khi ảnh upload thành công và hiện thị bảng trong frame thông tin ảnh.
KẾT QUẢ / ĐÁNH GIÁ
Kết quả
Sau khi hoàn thành nội dung đồ án, thu được những kết quả sau:
- Nắm được kiến thức cơ bản về chuẩn ảnh y học DICOM
- Nắm được yêu cầu về chức năng cần có trong một ứng dụng xử lý ảnh y học.
- Xây dựng thành công ứng dụng web-base xử lý ảnh y học với các chức năng cơ bản hỗ trợ người dùng upload và quan sát ảnh một cách thuận tiện rõ ràng.
Đánh giá
- Đảm bảo các chức năng cơ bản của ứng dụng xử lý ảnh y học.
- Ứng dụng chạy trên nền web thông qua trình duyệt nên thuận tiện cho người dùng sử dụng mà không phải tiến hành cài đặt vào hệ thống của mình.
- Do ứng dụng chạy trên nền web nên khó thực hiện các thao tác xử lý ảnh phức tạp như mô phỏng 3D của các ảnh.
- Hạn chế về tốc độ xử lý do phụ thuộc vào tốc độ đường truyền của mạng.