Tôi có một hình ảnh 2D mà tôi muốn bộ lọc thông thấp, với các ràng buộc / số liệu chất lượng sau:
- Tôi không thể "thêm" ánh sáng vào hình ảnh, vì vậy mỗi pixel trong kết quả phải là <= pixel tương ứng trong đầu vào.
- Tần số cắt đường thông thấp phải là một tham số, để thử nghiệm với
- Áp dụng bộ lọc này nhiều lần sẽ không thay đổi kết quả theo một cách quan trọng.
- Thời gian để chạy thuật toán này (5 phút cho hình ảnh 5MPix có vẻ hợp lý)
- Giảm thiểu lượng ánh sáng được lọc đi.
Dưới đây là một số cách tiếp cận tôi đã thử, cùng với những thiếu sót của họ:
Bộ lọc Gaussian như bình thường, sau đó kéo kết quả xuống để tuân thủ ràng buộc 1. Điều này tuân thủ rất tốt với 3 điểm đầu tiên, nhưng giảm nhiều ánh sáng hơn mức cần thiết.
Ghép các parabolas "lên trên" qua các điểm "thấp" và parabolas "xuống dưới" giữa chúng để làm mịn. Điều này hoạt động rất tốt trong 1D, nhưng trước tiên áp dụng nó theo chiều ngang, sau đó theo chiều dọc tạo ra kết quả xấu trong 2D. Nó mất nhiều thời gian hơn, nhưng không quá lâu cho ứng dụng của tôi. Tuy nhiên, áp dụng lặp lại bộ lọc này sẽ thay đổi mạnh mẽ kết quả. Nếu đầu vào (1D) là một parabola "hướng xuống" hoàn hảo (hoàn toàn không nên lọc), nó sẽ được thay thế bằng 2 parabolas "hướng lên" ở đầu / cuối.
Sử dụng một số dạng khác của các hàm "cơ bản" 2D và giải tuyến tính để tìm các tham số tối ưu. Đây chỉ là một ý tưởng, chưa được thực hiện / thử nghiệm.
Lĩnh vực kinh nghiệm xử lý tín hiệu của tôi hầu như chỉ là xử lý hình ảnh, vì vậy tôi hy vọng sẽ tìm thấy giải pháp thay thế cho vấn đề này với đầu vào của các chuyên gia hoạt động trong các lĩnh vực xử lý tín hiệu khác.
cập nhật 2011/08/18
Dựa trên các phản ứng hiện tại, tôi quyết định làm cho mọi thứ rõ ràng hơn một chút bằng cách thêm biểu đồ của một đầu vào điển hình và kết quả của 3 cách tiếp cận tôi mô tả ban đầu + các đề xuất tôi nhận được cho đến nay. Để dễ so sánh, tôi chỉ sử dụng lọc 1D trong các ví dụ này.
Dữ liệu đầu vào:
Bộ lọc Gaussian + đưa nó xuống để tuân thủ yêu cầu (1).
Bạn có thể thấy rằng việc hạ thấp nó sẽ dẫn đến việc giảm ánh sáng không cần thiết ở phía bên tay phải.
Parabolas
Theo như tôi nghĩ, điều này khá xuất sắc, thật đáng buồn là nó không dịch hoàn hảo thành 2D bằng cách áp dụng chiều ngang đầu tiên, sau đó là dọc. Trong trường hợp này, bạn cũng thấy tôi có thể đánh giá các parabon được trang bị ở độ phân giải dấu phẩy động, đây là một lợi ích nhỏ, nhưng không hoàn toàn bắt buộc.
Xói mòn thang độ xám
Dựa trên gợi ý từ rwong, tôi đã thử xói mòn thang độ xám. Tôi đã sử dụng một yếu tố cấu trúc với hình dạng parabol giống như parabolas "được trang bị" của tôi. Kết quả gần như giống hệt nhau, vì vậy điều này có vẻ đầy hứa hẹn. Tuy nhiên, vẫn còn một vài vấn đề: 1. Phần tử cấu trúc của tôi không "đủ lớn" (mặc dù nó đã rộng 801 pixel) 1. Tôi chỉ có parabolas "hướng lên", không có parabolas hướng xuống để làm trơn tru quá trình chuyển đổi từ một parabola tiếp theo.
Lọc trung bình
Chỉ bao gồm cho sự hoàn chỉnh, nó không thực sự là những gì tôi muốn.
dữ liệu thô
Tôi đã dán dữ liệu đầu vào thô + các lệnh python khác nhau lên pastebin, vì vậy bạn cũng có thể thử nghiệm cùng một dữ liệu.
http://pastebin.com/ASnJ9M0p