Sử dụng Bộ lọc nghịch đảo để chỉnh sửa hình ảnh được tích hợp không gian (Giải mã)


8

Là một phần của bài tập về nhà, chúng tôi đang triển khai Bộ lọc nghịch đảo. Giảm độ ảnh sau đó phục hồi bằng Bộ lọc đảo ngược.

Tôi kết hợp hình ảnh trong miền không gian bằng bộ lọc hộp 5x5. Tôi FFT bộ lọc, FFT hình ảnh xuống cấp, sau đó chia hình ảnh xuống cấp cho bộ lọc. Đảo ngược FFT kết quả thành một hình ảnh và tôi nhận được rác.

Nếu tôi FFT hình ảnh, FFT bộ lọc, nhân hai số, chia kết quả đó cho bộ lọc FFT'd, rõ ràng tôi rất gần với hình ảnh gốc. ((X * Y) / Y ~ == X)

Tôi có một vấn đề khó khăn là toán học không đơn giản như "nhân rộng không gian == phép nhân FFT".

Cách chính xác để sử dụng Bộ lọc đảo ngược là gì? Tôi có kernel chính xác được sử dụng làm giảm hình ảnh. Tôi không thêm bất kỳ tiếng ồn.

Sách giáo khoa của Bovik, Hướng dẫn cần thiết để xử lý ảnh gần như hoàn toàn loại bỏ Bộ lọc nghịch đảo. Gonzalez & Woods có nhiều hy vọng hơn nhưng gần như ngay lập tức bỏ qua Bộ lọc Wiener.

Tôi có một câu hỏi tương tự trên stackoverflow.com /programming/7930804/inverse-filter-of-spatively-convolve-versus-frequency-convolve-image

(Câu hỏi này cũng nên được gắn thẻ [bài tập về nhà] nhưng thẻ chưa tồn tại và tôi chưa có đại diện để tạo nó.)

BIÊN TẬP. Đối với một số gợi ý tuyệt vời dưới đây. @ dipan-mehta Trước khi tôi FFT, tôi đang đệm kernel tích chập với cùng kích thước với hình ảnh. Tôi đang đặt kernel vào phía trên bên trái. Tôi ifft (ifftshift ()) sau đó lưu vào một hình ảnh và tôi nhận được một kết quả tốt. Tôi đã thực hiện ifft (ifftshift ()) trên cả kernel và hình ảnh. Kết quả tốt (ish). (Hình ảnh nằm trong /programming/7930804/inverse-filter-of-spatecial-convolve-versus-frequency-convolve-image của tôi .)

@ jason-r có lẽ đúng. Tôi không hiểu toán học của phép tích chập + biến đổi cơ bản. "Giải mã" là một từ mới đối với tôi. Vẫn còn nhiều điều phải học. Cảm ơn đã giúp đỡ!

Giải pháp của tôi cho bài tập về nhà là làm mọi thứ trong miền tần số. Tôi đã nói chuyện với giáo sư. Tôi đã làm cho bài tập khó hơn cần thiết. Cô ấy muốn chúng tôi thêm tiếng ồn sau đó thử Bộ lọc nghịch đảo, Bộ lọc Wiener và Bộ lọc bình phương hạn chế tối thiểu. Điểm chính của bài tập là xem các bộ lọc xử lý tiếng ồn như thế nào.


1
Bạn có đệm bộ lọc với các số không để làm cho nó có cùng kích thước với hình ảnh trước khi bạn lấy FFT của nó không? Bạn đang làm phân chia phức tạp chính xác?
Dima

Yup, đệm bộ lọc với số không, kernel ở phía trên bên trái. Tất cả mã Python / numpy của tôi nằm ở liên kết stackoverflow.com đã nói ở trên. Sự phân chia phức tạp có lẽ là vấn đề của tôi.
David Poole

Câu trả lời:


8

Có một vài câu hỏi con mà tôi sẽ giải quyết riêng:

  • Chuyển đổi trong miền không gian (hoặc tương ứng trong miền thời gian cho tín hiệu được lấy mẫu theo thời gian) tương đương với phép nhân trong miền tần số. Trong các hệ thống được lấy mẫu, có một số phép tính cho các trường hợp biên (nghĩa là khi sử dụng DFT, phép nhân trong miền tần số thực sự mang lại cho bạn tích chập tuần hoàn, không phải tích chập tuyến tính), nhưng nói chung, nó thực sự đơn giản.

  • Lọc ngược thuần túy gần như không bao giờ là giải pháp phù hợp trong thực tế. Trong hầu hết các trường hợp, bạn không có quyền truy cập vào bộ lọc chính xác đã được áp dụng cho dữ liệu của mình, vì vậy dù sao bạn cũng không thể đảo ngược nó. Ngay cả khi bạn biết bộ lọc, thì nó vẫn có vấn đề. Hãy xem xét thực tế rằng bộ lọc có thể có số không ở các tần số không gian nhất định; nếu có, thì sau khi áp dụng bộ lọc cho hình ảnh của bạn, tất cả thông tin ở các tần số đó sẽ bị mất. Nếu bạn ngây thơ đảo ngược bộ lọc đó, nó sẽ có mức tăng vô hạn (hoặc ít nhất là rất cao) tại các null đó. Sau đó, nếu bạn áp dụng nghịch đảo ngây thơ cho một hình ảnh có bất kỳ nội dung phụ gia nào ở các tần số đó (ví dụ như nhiễu, có khả năng là trường hợp đó), thì thành phần không được bảo vệ đó sẽ được khuếch đại rất nhiều. Điều này thường không được mong muốn.

    Vấn đề lọc ngược này rất giống với sự cân bằng trong các hệ thống truyền thông, trong đó hiện tượng này được gọi là tăng cường tiếng ồn . Trong bối cảnh đó, cách tiếp cận bộ lọc nghịch đảo được gọi là bộ cân bằng cưỡng bức bằng không , điều này hiếm khi được sử dụng thực sự.

  • Khu vực mà bạn đang khám phá thường được gọi là giải mã . Theo nguyên tắc chung, giải mã là một hoạt động khó khăn. Ngay cả khi bạn biết bộ lọc chính xác đã được áp dụng và muốn hoàn tác nó, nó không phải lúc nào cũng dễ dàng. Như bạn đã lưu ý, cách tiếp cận bộ lọc đảo ngược thường được gạt sang một bên có lợi cho bộ lọc Wiener hoặc một số cấu trúc khác nhằm mục đích không đảo ngược chính xác hệ thống, nhưng thay vào đó để ước tính đầu vào của hệ thống là gì trong khi giảm thiểu một số tiêu chí lỗi (giảm thiểu trung bình lỗi -squared là một mục tiêu phổ biến). Như bạn có thể mong đợi, áp dụng bộ lọc Wiener cho vấn đề này được gọi là giải mã Wiener .


"Giải mã" là một từ mới đối với tôi. Tôi vẫn còn nhiều điều phải học. Cảm ơn!
David Poole

@JasonR chúng ta sẽ không phải biết trình tự 'người huấn luyện' trong hình ảnh để giải mã Wiener sao cho tiêu chí MMSE được giảm thiểu đối với điều gì đó là đúng?
Spacey

1
Nói chung, bạn cần biết mật độ phổ công suất của tín hiệu và chức năng truyền đã được áp dụng cho tín hiệu để thiết kế bộ lọc Wiener. Tuy nhiên, trong trường hợp có khả năng bạn không biết tất cả thông tin đó, bạn có thể đưa ra những phỏng đoán có giáo dục mang lại cấu trúc chức năng mạnh mẽ hơn bộ lọc đảo ngược. Xem phần này trên trang Wikipedia để thảo luận.
Jason R

3

Tôi hy vọng bạn đã không phạm sai lầm trong cách tính toán được thực hiện cho -

Tôi kết hợp hình ảnh trong miền không gian bằng bộ lọc hộp 5x5. Tôi FFT bộ lọc, FFT hình ảnh xuống cấp, sau đó chia hình ảnh xuống cấp cho bộ lọc. Đảo ngược FFT kết quả thành một hình ảnh và tôi nhận được rác.

Giả sử hình ảnh của bạn có kích thước 256x256 và Bộ lọc là 5x5 - để áp dụng Lọc bằng cách nhân FFT, trước tiên bạn phải chuyển đổi bộ lọc thành kích thước tương đương. Đối với điều này, bạn phải giữ bộ lọc hộp 5x5 ở "góc TOP" (không phải ở giữa hình ảnh) và đệm phần còn lại bằng số không để điền vào 256x256 - bạn nên lấy FFT 256x256 cho bộ lọc.

Để giúp chẩn đoán, trong bước lập trình # 1 - trước tiên, chỉ cần lấy 256x256 FFT của bộ lọc và kiểm tra xem IFFT - thường trình có thể cung cấp cho bạn bộ lọc không. Kiểm tra theo cách tương tự nếu FFT -> IFFT của chính hình ảnh hoạt động ngược.

Bước # 2 - nếu bạn chỉ áp dụng bộ lọc (và không có bộ lọc đảo ngược) trong miền FFT bằng cách nhân - kiểm tra hình ảnh kết quả sau khi IFFT vẫn ổn. Nó nên được làm mờ hình ảnh cơ bản.

Nếu tất cả các chương trình của bạn đều đúng - vui lòng đảm bảo rằng khi bạn thực hiện 1 / x cho FFT co-hiệu quả, sẽ không có sai số chia cho 0 và ngược lại khi có quá nhiều đỉnh sẽ dẫn đến các biến dạng nặng.

Nói chung - đối với bất kỳ bộ lọc ổn định nào , bộ lọc đảo ngược theo định nghĩa không ổn định - đây có thể là lý do chính. Tuy nhiên, tôi luôn muốn kiểm tra chéo thực hiện trước khi khám phá các giới hạn lý thuyết.

Nếu được thực hiện tốt, tôi đã thấy phép nhân trong FFT tích chập trong không gian mẫu cả về hình ảnh cũng như tín hiệu âm thanh.

Dipan.

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.