2.1.1 Ý tưởng
Được phát minh bởi William E. Lorensen và Harvey E. Cline vào năm 1987[10]. Ý tưởng của thuật toán là chia khối dữ liệu thành các khối lập phương, mỗi khối lập phương được tạo từ 8 voxel nằm kề nhau. Sau đó xác định một mặt đi xuyên qua mỗi khối lập phương, tín toán các vector pháp tuyến, tiếp tục đến các khối lập phương tiếp theo. Từ đó ta có thể xấp xỉ một bề mặt bởi một lưới tam giác. Tổng số tổng hợp của tất cả các đa giác được tạo ra sẽ là một bề mặt xấp xỉ với một bộ dữ liệu mô tả [22].
2.1.2 Quy trình thực hiện
Lần lượt duyệt qua mỗi cell
Tạo một chỉ mục để lưu trữ giá trị nhị phân của mỗi đỉnh.
Sử dụng các chỉ số để xác định trường hợp mặt phẳng đi qua cell.
Sử dụng nội suy tuyến tính để tính giao điểm của mặt phẳng và các cạnh.
2.1.3 Phương pháp thực hiện
Cách xác định 8 voxel nằm kề nhau: giả sử khối dữ liệu có kích thước M x N x L. 8 voxel được xác định là (i,j,k), (i+1,j,k), (i,j+1,k), (i+1,j+1,k), (i,j,k+1), (i+1,j,k+1), (i,j+1,k+1), (i+1,j+1,k+1) trong đó 1 ≤ i <M, 1 ≤ j <N, 1 ≤ k <L
Xét một tế bào trong khối dữ liệu thì có 3 trường hợp xảy ra : Tất cả các đỉnh lớn hơn giá trị isovalue
Tất cả các đỉnh nhỏ hơn giá trị isovalue
Có cả đỉnh lớn hơn và đỉnh nhỏ hơn giá trị isovalue
Hình 2.1 : Chọn một tế bào từ khối dữ liệu
Ta xây dựng mặt phẳng đi xuyên khối lập phương với giả thiết nếu giá trị thì đỉnh đó nằm bên trong mặt phẳng và ngược lại nếu giá trị đỉnh nhỏ hơn giá trị isovalue thì đỉnh đó nằm ngoài.
Hình 2.2 : So sánh giá trị tại đỉnh với isovalue Đánh dấu đỉnh bên trong bằng 1 , bên ngoài bằng 0.
Hình 2.3 : Đánh dấu những đỉnh nằm trong mặt phẳng
Để xác định giao điểm của mặt phẳng này với các cạnh của khối lập phương ta cần nội suy tuyến tính từ giá trị tại hai đỉnh trên cạnh đó [20]
Khối lập phương có 8 đỉnh nên ta có tổng cộng 28 = 256 trượng hợp một mặt đi qua khối lập phương. Tuy nhiên do tính chất đối xứng ta có thể giản ước còn 15 trường hợp.
Hình 2.5: Các trường hợp đối xứng
Hình 2.6: 15 trường hợp sau khi đã giản ước Các công thức tính toán bề mặt giao nhau của khối
Hình 2.7 : Tạo chỉ số cho các đỉnh và cạnh
Tính bề mặt giao nhau dọc theo mỗi cạnh
= ∗(1− ) + ∗
= −−
Tính toán cho mỗi đỉnh khối lập phương
( , , ) = ( + 1, , )− ( −1, , )∆ ∆ ( , , ) = ( , + 1, )− ( , −1, ) ∆ ( , , ) = ( , , + 1)− ( , , −1) ∆
Nội suy tại các đỉnh của tam giác
1 2
1 ug (1 u)g
Hình 2.8 : Nội suy tính vị trí đỉnh của tam giác
Thuật toán Marching cubes tạo ảnh có độ phân giải cao. Tuy nhiên nhược điểm của thuật toán này là có thể tạo ra những lỗ (holes) trong bề mặt. Nguyên nhân là chúng ta có thể xây dựng những mặt khác nhau cho cùng một trường hợp (ambigous face)
Hình 2.9: 2 mặt giao nhau tạo ra lỗ.
2.1.4 Giải thuật Marching cubes
Chỉ định giá trị ngưỡng Đọc 4 slice vào bộ nhớ
Quét qua trung gian 2 slice và tạo cell Phân loại 8 đỉnh và xây dựng chỉ số index
Tra cứu chỉ mục trong bảnh cạnh để xác định mặt phẳng
Đỉnh của tam giác được xác địnhbằng cách nội suy tuyến tính Đầu ra là tam giác dựa trên đỉnh và cạnh đã tính toán
2.1.5 Ưu và nhược điểm của thuật toán Marching Cubes
Ưu điểm:
Dựng hình với thao tác đơn giản. Tạo ảnh có độ phân giải cao. Nhược điểm:
Mô hình phức tạp.
Hiển thị chỉ là một phần của dữ liệu vì có thể có lỗ trên bề mặt.
Tạo ra khá nhiều đa giác. Trung bình mỗi khối lập phương sẽ tạo ra 3 tam giác. Vì vậy một khối dữ liệu có kích thước 32x32x16 có thể tạo ra 3000 tam giác, khối dữ liệu có kích thước 256x256x128 có thể sinh ra tới 820000 tam giác. Do đó thuật toán không hiệu quả lắm với những khối dữ liệu lớn.
2.1.6 Cải tiến kỹ thuật Marching cube 2.1.6.1 Kỹ thuật Marching Tetrahedra 2.1.6.1 Kỹ thuật Marching Tetrahedra
Kỹ thuật Marching Tetrahedra được đưa ra để cải tiến thuật toán Marching Cubes. Thuật toán Marching Cubes xây dựng lưới tam giác trong khối lập phương gồm 8 voxel kế cận, đơn vị thể tích còn khá lớn. Để giảm các phép tính Doi, Guezie, Treece và các tác giả khác đã chia khối lập phương thành các đơn vị thể tích nhỏ hơn là các khối tứ diện. Phương pháp này giúp bề mặt tạo ra khép kín hơn. Tuy nhiên phương pháp này sẽ tạo ra nhiều tam giác hơn phương pháp Marching Cubes và ta phải xác định cách chia khối lập phương thành các tứ diện.
Do mỗi tứ diện có 4 đỉnh nên ta có 24 = 16 trường hợp mặt phẳng đi qua tứ diện và dựa vào tính chất đối xứng ta đơn giản còn 2 trường hợp.
Hình 2.11: Chia khối lập phương thành các khối tứ diện
Giống như Marching Cubes, nhược điểm của kỹ thuật Marching Tetrahedra cũng tạo ra nhiều đa giác.
2.1.6.2 Kỹ thuật Dividing cubes
Để khắc phục tình trạng tạo ra nhiều đa giác và cải tiến tốc độ, thuật toán Dividing Cubes được đưa ra bởi Cline và ý tưởng là không vẽ các đa giác mà vẽ các điểm bề mặt. Để vẽ mặt trong không gian 3 chiều trước hết cần tìm các voxel có giao với mặt, sau đó chia nhỏ voxel. Tiếp tục tìm kiếm và chia nhỏ cho đến khi đạt đến độ phân giải cần thiết. Tìm những điểm giữa của voxel sau đó dùng phép chiếu để chuyển thành các pixel. Nhược điểm của kỹ thuật Dividing Cubes là tạo bề mặt không liên tục nếu ta phóng to bề mặt.
Hình 2.13: Minh hoạ thuật toán Dividing Cubes trong không gian 3 chiều
2.2 Kỹ thuật Shear-warp 2.2.1 Ý tưởng 2.2.1 Ý tưởng
Kỹ thuật Shear warp để dựng hình khối dữ liệu được phát triển bởi Cameron và Undrill, nhưng phổ biến bởi Philippe Lacroute và Marc Levoy [17]. Kỹ thuật này được phát minh để thay thế cho Ray casting nhằm giảm thời gian tính toán bằng cách đơn giản các bước lấy mẫu[17]
Để tạo ra các quan điểm khác nhau về một đối tượng như là khối dữ liệu thì trước tiên các voxel của khối phải được sắp xếp đúng vị trí trước khi được
chiếu lên mặt phẳng ảnh. Mục tiêu là làm cho tia xem song song với nhau và vuông góc với mặt phẳng trung gian và mặt phẳng ảnh đặt ở vị trí không song song với mặt khối.
Ý tưởng của thuật toán Shear-warp đã đơn giản hoá bằng cách đầu tiên dịch chuyển đối tượng (shear ), sau đó chiếu lên mặt phẳng trung gian (base plane ) và cuối cùng biến dạng ảnh trung gian (warp ) để hiển thị lên mặt phẳng ảnh. Chọn mặt phẳng trung gian song song với những lát cắt 2D.
2.2.2 Quy trình thực hiện
Thuật toán Shear-warp bao gồm 3 bước như hình minh họa bên dưới: 1, cắt và lấy mẫu từ volume data (khối dữ liếu đã được sắp xếp)
2, quét qua các voxel trên các mẫu lên ảnh trung gian (intermediate image)
3, chuyển ảnh trung gian vào ảnh hiển thị cuối cùng trên mặt phẳng ảnh (image plane)
2.2.3 Phương pháp thực hiện
Để minh hoạ cho thuật toán shear warp, hãy tưởng tượng có một quyển sách dầy. Nếu nhìn thẳng vào mặt trước của quyển sách thì chỉ có thể xem trang trước của nó mà không có cách nào để xem những trang bên trong. Có một cách là xếp thay đổi tương đối vị trí thì có thể xem được những trang sau. Đây cũng chính là ý tưởng của thuật toán Shear warp.
Hình 2.14: Các lát cắt của khối dữ liệu được dịch chuyển Hình ảnh trung gian sau khi chiếu bị méo mó. Vì vậy hình ảnh trung gian cần phải được biến dạng để có được những hình ảnh cuối cùng chính xác.
Mỗi vị trí voxel được chuyển đổi vào vị trí tương ứng trong mặt phẳng chiếu bằng cách quay và chiếu. Vì vậy, thuật toán Shear-Warp thực tế là phân chia ma trận của phép chiếu và phép biến đổi thành ma trận shear, chiếu và ma trận warp. Trong trường hợp chiếu vuông góc không cần ma trận chiếu vì chiếu vuông góc vào mặt phẳng XY có nghĩa là Z=0. Toạ độ X, Y không bị ảnh hưởng bởi chiếu.
Mview = P.S.W
Trong đó :
P: ma trận hoán vị - chuyển toạ độ để làm cho Z là trục xem chính
S: ma trận shear - chuyển đổi khối dữ liệu vào không gian đối tượng bị dịch chuyển
W: ma trận warp - biến dạng toạ độ đối tượng bị dịch chuyển thành toạ độ ảnh
Công thức dịch chuyển đối tượng:
S = + 0 Do đó ma trận shear là : S = 1 0 0 1 0 0 1 Trong đó Sx, Sy có từ Mview W= 0 0 Mview = = . = + + + + Có hệ số của ma trận warp : Wij = Vij ( j ≠ 2 )
Hệ số của ma trận shear : =
W22 = - SxV20– SyV21 + V22
Phương trình biến đổi tọa độ đối tượng thành toạ độ đối tượng bị dịch chuyển:
Hình 2.15 : Ma trận xem 2.2.4 Ưu và nhược điểm
Ưu điểm:
Tốc độ xử lý nhanh và đơn giản Nhược điểm:
Chất lượng hình ảnh thấp so với các kĩ thuật khác
2.3 Kỹ thuật Ray Casting 2.3.1 Ý tưởng 2.3.1 Ý tưởng
Ray casting là một kỹ thuật phổ biến cho việc trực quan dữ liệu khối 3D mà không áp đặt bất kì cấu trúc hình học nào. Ray casting được dựa trên khái niệm một tia ánh sáng đi xuyên qua khối và làm nổi bật các voxels nó gặp trên đường đi. Đối với mỗi điểm ảnh trên màn hình, một tia được chiếu xuyên
qua khối dữ liệu và màu điểm ảnh cuối cùng được tính toán dựa trên các giá trị mẫu gặp phải. Kết quả cuối cùng sẽ hiển thị trên mặt phẳng ảnh 2 chiều của dữ liệu khối[25]
Năm 1977 Kajiya đưa ra thuật toán Raycasting đầu tiên Năm 1982 Blinn [19] đã đưa ra nhiều cải tiến so với Kajiya
Năm 1988, Levoy [23] xuất bản một bài báo với một thuật toán raycasting mà kể từ đó thuật toán được phổ biến và trở thành định nghĩa cho raycasting
2.3.2 Quy trình Ray Casting
Sơ đồ mô tả quá trình tái dựng ảnh 3D
2.3.3 Phương pháp thực hiện
Levoy mô tả kỹ thuật của mình gồm hai đường ống dẫn – một đường ống dẫn trực quan và một đường ống phân loại. Kết hợp hai đường ống để tạo ra hình ảnh cuối cùng.
Sample Colors C(U) Sample Opacities α(U)
Ray casting / Resampling
Pixel Colors C(u) Compositing Voxel Values f(i)
Voxel Color C(i) Voxel Opacities α(i) Shading Classification
Trong đường ống dẫn trực quan, dữ liệu khối được tạo bóng ( shade). Mỗi voxel trong dữ liệu được gán cho một shade bằng cách sử dụng một xấp xỉ gradient địa phương để đạt được một voxel bình thường. Nó được sử dụng làm đầu vào trong mô hình tạo bóng chuẩn Phong để đạt được một cường độ. Đầu ra của đường ống này là một cường độ ba thành phần màu cho mỗi voxel trong tập dữ liệu.Trong khu vực hoàn toàn đồng nhất thì gradient bằng 0. Các bóng được tạo thành từ lí do như vậy là không đáng tin cậy, Để giải quyết vấn đề này, Levoy dựa vào độ chắn sáng của mỗi voxel. Vùng đồng nhất có độ chắn sáng bằng 0 và không ảnh hưởng đến kết quả cuối cùng.
Các đường ống dẫn phân loại sẽ kết hợp với độ chắn sáng tại mỗi voxel. Các thông số màu sắc được sử dụng trong mô hình tạo bóng cũng được sử dụng trong đường ống này.
Gỉa sử ta có 1 mảng lưu giá trị vô hướng của khối lập phương là N voxel trên một mặt phẳng. Voxel được tạo một chỉ mục bởi vector i = (i, j, k) trong đó i, j, k =1,…,N và giá trị của voxel kí hiệu là f(i), giá trị của màu sắc kí hiệu là C(i), giá trị của độ chắn sáng kí hiệu là α(i).
Hình 2.17: Hệ thống các toạ độ trong suốt quá trình tái dựng ảnh Các tia được chiếu song song đi xuyên qua dữ liệu từ vị trí quan sát. Giả sử mặt phẳng ảnh có kích thước PxP pixel. Tia được định nghĩa bởi một vector u =(u,v) với u,v=1,…,P. Tại mỗi tia, vector màu sắc và độ chắn sáng được tính toán bằng cách nội suy từ màu sắc và độ chắn sáng của tám voxel xung quanh mỗi vị trí mẫu. Những điểm mẫu được kí hiệu U = (u,v,w) với
(u,v) định nghĩa tia, w là khoảng cách dọc theo tia. W=1 là vị trí gần nhất với mắt . Màu sắc , độ chắn sáng của điểm mẫu U được kí hiệu C(U), α(U). Màu sắc và độ chắn sáng kết hợp với nhau và kết hợp với nền để tạo nên màu sắc cho tia kí hiệu là C(u)
Hình 2.18: Tổng hợp màu sắc và độ chắn sáng
Tia chiếu đi từ một pixel trên mặt phẳng ảnh đến voxel, các giá trị về bóng và độ chắn sáng sẽ được tổng hợp lại bằng cách nội suy thành một giá trị duy nhất để cung cấp cường độ của điểm ảnh cuối cùng hiển thị trên mặt phẳng ảnh.
Hình 2.19 : Tổng hợp màu sắc và độ chắn sáng của tất cả các voxel dọc theo tia và hiển thị giá trị cuối cùng lên mặt phẳng ảnh
Công thức để tính toán giá trị cuối cùng dựa trên các voxel dọc theo tia đúc : Cout = Cin · (1 – α) + C· α out in(1 )
C(i) in = C(i-1) out
Trong đó :
Cout : cường độ/ màu sắc đi ra cho các voxel dọc theo tia
Cint : cường độ đến cho voxel
C : màu của voxel hiện tại
α : độ chắn sáng của voxel hiện tại
2.3.4 Giải thuật Raycasting
For each Pixel
For each f(i, j, k) along a Ray from Pixel Check f(i, j, d) in Classification tables If new substance
Find Surf Nomal/ compute Color Weight color by Opacity
Accumulate color contribution and opacity Pixel gets accumulated color
2.3.5 Ưu và nhược điểm
Ưu điểm
- Khái niệm đơn giản, dễ thực hiện
- Cho phép toàn bộ dữ liệu được xem cùng một lúc.
- Cho phép người sử dụng có thể xem các phần bị che khuất bởi các kỹ thuật bề mặt.
- Tính năng nhỏ hoặc yếu được xác định có thể được hiển thị - Dễ dàng thực hiện song song
Nhược điểm
- Chậm so với các phương pháp khác ngay khi đúc một vài tia - Vị trí gần nguồn sẽ được truy cập nhiều lần.
- Với mặt phẳng ảnh quan sát có kích thước lớn sẽ làm tăng đáng kể thời gian tái dựng ảnh.
2.3.6 Một số kỹ thuật tăng tốc cho Ray Casting
Thực tế giải thuật Raycasting tốn rất nhiều thời gian.Ý tưởng cơ bản để thúc đẩy nhanh quá trình dựng hình là không chú ý đến những thông tin “không quan trọng” và khai thác sự gắn kết.
2.3.6.1 Chấm dứt tia sớm
Ý tưởng là sớm chấm dứt tia nếu sự đóng góp của một mẫu trở nên không còn quan trọng bằng cách thiết lập một mức độ chắn sáng ɑ để chấm dứt tia.
2.3.6.2 Space-Leaping
Ý tưởng là quét qua các khu vực có cấu trúc đồng nhất một cách nhanh chóng mà không bị mất thông tin liên quan. Có nhiều phương pháp để thực hiện ý tưởng này.
2.3.6.3 Cấu trúc phân cấp không gian dữ liệu
Khối được chia thành những khu vực đồng nhất và được biểu diễn bởi những node trong cấu trúc phân cấp không gian. Kỹ thuật này tối ưu bằng cách lưu trữ các thông tin thống nhất trong không gian trống. Khi tia chiếu qua những không gian trống thì có thể bỏ qua mà không cần phải tính toán.
Hình 2.20: Tia đi qua khối nhị phân được chia ra khu vực đồng nhất
2.3.6.4 Adaptive ray traversal
Ý tưởng là gán tất cả các voxel trống lân cận với voxel dữ liệu một cờ lân cận. Khi tia được chiếu qua những không gian trống thì sử dụng thuật toán có độ chính xác thấp để đạt tốc độ nhanh và khi đi đến vùng lân cận thì nó sẽ