2012-06-25 23 views
6

Tôi đang cố gắng sử dụng FFTW để co giãn hình ảnh.Vị trí đặt hạt nhân vào giữa khi sử dụng FFTW để co giãn hình ảnh?

Lúc đầu chỉ để kiểm tra xem hệ thống có hoạt động bình thường không, tôi đã thực hiện fft, sau đó là fft nghịch đảo và có thể lấy lại chính xác hình ảnh đó.

Sau đó, một bước nhỏ về phía trước, tôi đã sử dụng hạt nhân danh tính (tức là, hạt nhân [0] [0] = 1 trong khi tất cả các thành phần khác bằng 0). Tôi đã lấy sản phẩm thành phần khôn ngoan giữa hình ảnh và hạt nhân (cả trong miền tần số), sau đó đã làm ngược fft. Về mặt lý thuyết tôi sẽ có thể lấy lại hình ảnh giống hệt nhau. Nhưng kết quả tôi nhận được là rất gần với hình ảnh gốc. Tôi nghi ngờ điều này có liên quan đến nơi tôi căn giữa hạt nhân trước khi tôi đặt nó vào miền tần số (vì tôi đặt "1" ở hạt nhân [0] [0], về cơ bản có nghĩa là tôi căn giữa phần dương ở đầu trái). Có ai có thể khai sáng cho tôi về những gì xảy ra ở đây không?

+1

Có bất kỳ câu trả lời nào giúp bạn tìm ra câu hỏi của mình không? – trumpetlicks

Trả lời

0

Tôi nghĩ rằng sự hiểu biết của bạn về hạt nhân Identity có thể bị tắt. Một hạt nhân Identity nên có 1 ở trung tâm của hạt nhân 2D không ở vị trí 0, 0.

ví dụ cho 3 x 3, bạn có bạn thiết lập như sau:

1, 0, 0 
0, 0, 0 
0, 0, 0 

Nó phải là

0, 0, 0 
0, 1, 0 
0, 0, 0 

Kiểm tra này ra cũng

What is the "do-nothing" convolution kernel

cũng xem xét ở đây, ở cuối trang 3.

http://www.fmwconcepts.com/imagemagick/digital_image_filtering.pdf

+0

Vâng về mặt lý thuyết, nó nên ở trung tâm. Nhưng khi chúng ta thực hiện biến đổi nhiễu xạ rời rạc 2d của hạt nhân, chúng ta nên di chuyển trung tâm phải không? Và nếu nó là một hạt nhân phức tạp hơn, ví dụ Gaussian, tôi nên căn giữa nó như thế nào? BTW, hạt nhân nhận dạng trông như thế nào trong miền tần số? Tôi có thể làm một số gỡ lỗi trong mã của tôi. Cảm ơn bạn. – ZV1

+0

nó phụ thuộc rất nhiều vào những gì bạn đang cố gắng hoàn thành, trong trường hợp đoàn kết của bạn mặc dù, nó phải được tập trung như trên! – trumpetlicks

+0

Cuối cùng, tôi sẽ cần phải thực hiện chuyển đổi giữa hình ảnh và một hạt nhân giống Gauss bằng cách sử dụng fftw. Trong trường hợp đó, tôi nên đặt hạt nhân như thế nào? – ZV1

-1

tôi lấy sản phẩm thành phần khôn ngoan giữa hình ảnh và hạt nhân trong phạm vi tần số, sau đó đã làm các FFT ngược. Về mặt lý thuyết tôi sẽ có thể lấy lại hình ảnh giống hệt nhau.

Tôi không nghĩ rằng thực hiện chuyển tiếp với hạt nhân không phải fft, và sau đó biến đổi nghịch đảo sẽ dẫn đến bất kỳ kỳ vọng lấy lại hình ảnh ban đầu, nhưng có lẽ tôi chỉ hiểu lầm bạn đang cố gắng nói ở đó ...

+0

Trong trường hợp này, với một hạt nhân danh tính thực, đi về phía trước hoặc ngược lại không nên làm gì với hình ảnh !!!Đó thực sự là tài sản của một hạt nhân bản sắc. Nhìn vào cuối trang 3 của những điều sau đây! http://www.fmwconcepts.com/imagemagick/digital_image_filtering.pdf – trumpetlicks

+0

@trumpetlicks - Một biến đổi nhận dạng một mình, hoặc theo sau là một fft tiến và sau đó là một fft nghịch đảo, có. Tuy nhiên, như được viết, nó là một biến đổi nhận dạng theo sau là nghịch đảo fft, mà sẽ dẫn đến một kết quả fft thu nhỏ, * không * hình ảnh gốc. – twalberg

+0

Tôi đoán có lẽ những gì tôi bỏ lỡ là hạt nhân nhận dạng đã được áp dụng trong miền tần số, ngụ ý về phía trước fft đã được thực hiện - chỉ cần không tuyên bố rõ ràng ... Đôi khi tôi đọc quá nhanh. – twalberg

4

Đối với mỗi thứ nguyên, các chỉ mục của mẫu phải từ -n/2 ... 0 ... n/2 -1, vì vậy nếu thứ nguyên là lẻ, trung tâm ở giữa. Nếu kích thước là đồng đều, hãy căn giữa sao cho trước 0 mới, bạn có một mẫu nhiều hơn sau mẫu mới 0

Ví dụ: -4, -3, -2, -1, 0, 1, 2, 3 cho chiều rộng/chiều cao 8 hoặc -3, -2, -1, 0, 1, 2, 3 cho chiều rộng/chiều cao là 7 .

FFT tương đối so với giữa, ở quy mô của nó có các điểm âm.
Trong bộ nhớ, các điểm là 0 ... n-1, nhưng FFT xử lý chúng dưới dạng -ceil (n/2) ... tầng (n/2), trong đó 0 là -ceil (n/2) và n-1 là tầng (n/2)

Ma trận nhận dạng là ma trận số không với 1 trong vị trí 0,0 (tâm - theo số ở trên). (Trong miền không gian.)

Trong miền tần số, ma trận nhận dạng phải là hằng số (tất cả giá trị thực 1 hoặc 1/(N * M) và tất cả các giá trị tưởng tượng 0).

Nếu bạn không nhận được kết quả này, ma trận xác định có thể cần đệm khác nhau (sang trái và xuống thay vì xung quanh tất cả các bên) - điều này có thể phụ thuộc vào việc triển khai FFT.

Trung tâm mỗi thứ nguyên riêng biệt (đây là chỉ số định tâm, không thay đổi bộ nhớ thực).

Bạn có thể cần phải dán hình ảnh (sau khi định tâm) vào toàn bộ công suất 2 trong mỗi kích thước (2^n * 2^m trong đó n không phải bằng m).

Pad liên quan đến vị trí 0,0 của FFT (đến giữa, không góc) bằng cách sao chép pixel hiện có sang hình ảnh lớn hơn mới, sử dụng chỉ mục dựa trên trung tâm ở cả hình ảnh nguồn và đích (ví dụ: 0,0) (0,0), (0,1) đến (0,1), (1, -2) đến (1, -2) đến (1, -2))

Giả sử FFT của bạn sử dụng các ô dấu phẩy động thông thường và không phức tạp, hình ảnh phức tạp phải có kích thước 2 * ceil (2/n) * 2 * ceil (2/m) ngay cả khi bạn không cần toàn bộ sức mạnh của 2 (vì nó có một nửa mẫu, nhưng mẫu rất phức tạp).

Nếu hình ảnh của bạn có nhiều kênh màu, trước tiên bạn phải định hình lại kênh để kênh quan trọng nhất trong thứ tự pixel phụ, thay vì ít quan trọng nhất. Bạn có thể định hình lại và pad trong một lần để tiết kiệm thời gian và không gian.

Đừng quên FFTSHIFT sau IFFT. (Để hoán đổi phần tư.)
Kết quả của IFFT là 0 ... n-1. Bạn phải lấy điểm ảnh sàn (n/2) + 1..n-1 và di chuyển chúng trước 0 ... tầng (n/2).
Điều này được thực hiện bằng cách sao chép pixel sang hình ảnh mới, sao chép tầng (n/2) +1 sang vị trí bộ nhớ 0, tầng (n/2) +2 đến vị trí bộ nhớ 1, ..., n-1 đến tầng vị trí bộ nhớ (n/2), sau đó 0 đến vị trí bộ nhớ ceil (n/2), 1 đến vị trí bộ nhớ ceil (n/2) +1, ..., tầng (n/2) vào bộ nhớ- vị trí n-1.

Khi bạn nhân trong miền tần số, hãy nhớ rằng các mẫu phức tạp (một ô thực tế sau đó một tế bào tưởng tượng), do đó bạn phải sử dụng phép nhân phức tạp.

Kết quả có thể cần chia cho N^2 * M^2 trong đó N là kích thước của n sau khi đệm (và tương tự như vậy đối với M và m). - Bạn có thể nói điều này bằng cách (xem xét giá trị của miền tần số của ma trận nhận dạng, so sánh kết quả với đầu vào.)

+0

1. Nhưng đối với đầu vào là một hình ảnh, không có điểm mẫu âm phải không? 2. Theo kênh, bạn có nghĩa là kênh màu? 3. Và bạn có thể giải thích thêm một chút về FFTSHIFT không? – ZV1

+0

@ ZV1 Xem cập nhật chỉnh sửa liên quan đến các giá trị 'scalling và liên quan đến miền tần số của hình ảnh nhận dạng. –

Các vấn đề liên quan