Tại sao sử dụng bộ lọc lều trong theo dõi đường dẫn?


12

99 dòng của trình theo dõi đường dẫn C Smallpt hiển thị lưới pixel phụ 2x2 cho mỗi pixel mà nó dự định kết xuất và sau đó thực hiện bộ lọc lều để kết hợp chúng.

Có một bài thuyết trình thú vị giải thích mã ở đây , và nó đề cập đến bộ lọc lều nhưng không giải thích tại sao nó ở đó.

Bất cứ ai cũng có thể giải thích tại sao một bộ lọc lều sẽ thích hợp hơn trong trường hợp này trên một hộp mờ (chỉ lấy trung bình các mẫu)?

Nó sẽ có chất lượng cao hơn để đi với một cái gì đó tốt hơn so với bộ lọc lều, chẳng hạn như nội suy lưỡng tính bicubic?

Câu trả lời:


13

Bộ lọc khử răng cưa lý tưởng cho dữ liệu được lấy mẫu riêng biệt là một bộ lọc chân thực , bởi vì nó loại bỏ hoàn toàn tất cả các tần số cao hơn tần số Nyquist, trong khi chỉ để lại tất cả các tần số thấp hơn. Vì vậy, ở một mức độ nào đó, chúng ta có thể mong đợi các bộ lọc khử răng cưa gần giống với bộ lọc chân thực hơn để tạo ra hình ảnh chất lượng tốt hơn.

Bộ lọc lều (bộ lọc tam giác) chắc chắn giống với đỉnh trung tâm của bộ lọc chân gần hơn so với bộ lọc hộp:

bộ lọc chân, tam giác và hộp

Một bộ lọc bicubic (ví dụ: Mitchell-Netravali) có thể thu được hình dạng của sự chân thành thậm chí chính xác hơn, bao gồm cả hai thùy âm đầu tiên của nó.

Thực tế của việc lựa chọn bộ lọc tinh tế hơn một chút so với "gần đúng nhất có thể", vì có nhiều loại tạo tác khác nhau có thể được tạo bởi các bộ lọc khử răng cưa "không lý tưởng", như khử răng cưa, làm mờ và đổ chuông. Ngoài ra, các bộ lọc khác nhau có thể đắt hơn hoặc ít hơn về mặt tính toán. Vì vậy, đây là một trò chơi cố gắng trao đổi các cổ vật khác nhau với nhau và chống lại hiệu suất. Các cảnh / hình ảnh khác nhau có thể ủng hộ lựa chọn này hay lựa chọn khác, và đó cũng là một phần đánh giá thẩm mỹ.

Về lý do tại sao smallpt đặc biệt sử dụng bộ lọc lều, tôi đoán là sẽ kết hợp hiệu năng (đó là bộ lọc nhanh để đánh giá) và brevity, nó có thể được thực hiện trong một vài dòng mã, trong khi bộ lọc bicubic sẽ mất nhiều hơn mã.

Ngẫu nhiên, smallpt thực sự sử dụng lưới subpixel 2x2 và đặt bộ lọc lều ở mỗi pixel phụ , sau đó tính trung bình các kết quả của bốn pixel con. Vì vậy, hiệu ứng tổng thể là, tò mò, là tổng của bốn lều, cuối cùng trông giống như một kim tự tháp với đỉnh bằng phẳng:

bộ lọc lều subpixel

Tôi không chắc đây có phải là cố ý hay chỉ là cách nó diễn ra. Tôi đoán là điều này dẫn đến một hình ảnh sắc nét hơn một chút so với việc sử dụng bộ lọc lều đơn cho mỗi pixel (vì hỗ trợ hẹp hơn), nhưng có lẽ cũng có nhiều răng cưa rõ hơn.


Tôi không thể nói cảm ơn! Thực tế, trước tiên tôi hiểu điều này là lấy mẫu phân tầng với 4 tầng. Và tôi thực hiện số lượng "tầng lớp" có thể tùy chỉnh, như 9, 16 ... Bây giờ, tôi biết đó là bộ lọc "hình thang" (không phổ biến trong các trình kết xuất khác). Và vì số lượng "tầng lớp" của tôi có xu hướng là vô cùng, bộ lọc trở thành bộ lọc hộp, nơi tôi đang vẽ hoa huệ ... Thật thú vị!
hỗn loạn

3

Tôi chỉ xem các bài viết trên Wikipedia về phép nội suy của Bilinear. Một bộ lọc lều là một loại nội suy Bilinear. Một phép nội suy Bilinear nội suy trên 2 chiều. Đầu tiên nó nội suy tuyến tính trên một chiều và sau đó là chiều khác.

nhập mô tả hình ảnh ở đây

Khi bạn nhìn vào bức tranh này, đầu tiên nó sẽ thực hiện nó trên cột và sau đó là hàng chẳng hạn.

Lý do tại sao điều này có thể tốt hơn màu trung bình, là khi một trong những điểm gần trung tâm hơn điểm khác, nó đóng góp nhiều hơn cho màu cuối cùng. Với trung bình màu sắc, tất cả các điểm đóng góp như nhau, ngay cả khi một điểm gần trung tâm hơn điểm khác.

Nếu tất cả 4 điểm nằm trên các vị trí cố định trên một khoảng cách bằng nhau từ trung tâm, thì bạn sẽ nhận được đóng góp chính xác 25% cho tất cả các điểm, điều đó giống như tính trung bình.

Điều này có nghĩa là khi bạn thực hiện khử răng cưa bằng cách chỉ hiển thị ở độ phân giải cao hơn 4 lần, sau đó xuống lấy mẫu. Đầu ra giữa 2 cách nên giống nhau, theo như tôi hiểu.

Vậy, bạn nên sử dụng bộ lọc nào? Vâng, nó phụ thuộc vào những gì bạn muốn và tình hình của bạn. Nếu bạn chọn các vị trí pixel phụ ngẫu nhiên cho các mẫu của mình, thì có thể tốt hơn là sử dụng phép nội suy Bilinear. Nếu tất cả các điểm được cố định và bạn chỉ hiển thị ở độ phân giải cao hơn, thì tính trung bình có thể hữu ích. Cuối cùng, tất cả chỉ là một số pixel phụ mà thông thường bạn không hoặc hầu như không nhận thấy, vì vậy nếu có một loại nào đó nếu là AA, thì nó đủ tốt. Nhưng đó chỉ là ý kiến ​​của tôi và có lẽ là của người xem trung bình của hoạt hình 3D hoặc đại loại như thế.

Một phép nội suy bicubic cung cấp cho bạn một cái nhìn mượt mà hơn. Xe đạp nhập mô tả hình ảnh ở đây

Song sinh: nhập mô tả hình ảnh ở đây

Cái nào tốt hơn? Chà, điều đó phụ thuộc vào những gì bạn thích, và tôi không nghĩ rằng sẽ có một sự khác biệt lớn.

Nguồn của tôi: https://en.wikipedia.org/wiki/Recon già_filter # Image_ Processing

https://en.wikipedia.org/wiki/Bilinear_interpolation

https://en.wikipedia.org/wiki/Bicubic_interpolation

(Hình ảnh từ Wikipedia và là miền công cộng)

Tôi hy vọng điều này có ích, tôi chỉ muốn nói rằng tôi không phải là người chuyên nghiệp về vấn đề này, tôi chỉ là người chỉ thích đồ họa máy tính. Có thể là tôi đã phạm một số sai lầm. Nếu vậy, chỉ cần nói và tôi thay đổi nó!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.