Làm thế nào để dịch chuyển hình ảnh subpixel bằng DFT thực sự hoạt động?


12

Tôi đang cố gắng đánh giá chất lượng của một số phương pháp nội suy hình ảnh cho một ứng dụng liên quan đến việc tạo ra các hình ảnh thay đổi subpixel. Tôi nghĩ rằng tôi có thể so sánh kết quả của một sự thay đổi pixel phụ bằng cách sử dụng tất cả các biến thể nội suy này với một số hình ảnh được dịch chuyển hoàn hảo, nhưng có lẽ không thể có được nó (sau đó cần gì để nội suy?).

Tôi đã suy nghĩ về việc sử dụng dịch chuyển DFT + trong miền tần số và tôi không chắc nó hoạt động như thế nào so với nội suy hình ảnh rõ ràng (sử dụng song tuyến, nhị phân, v.v.). Tôi chắc chắn rằng nó không thể tạo ra một hình ảnh thay đổi hoàn hảo , nhưng tôi không thể đặt ngón tay lên nó. Là subpixel dịch chuyển với DFT tương đương với áp dụng nội suy và nếu vậy, cái nào? Độ lệch của các giá trị pixel trong ảnh thu được bằng phương pháp này là gì? Cảm ơn!

EDIT: Sau khi suy nghĩ vấn đề, tôi đã hình dung ra rằng FFT là một xấp xỉ (thậm chí còn hơn cả DFT) của hàm ban đầu về mặt hài hòa (các hàm sin), rằng nó sẽ tương đương với một số phép nội suy lượng giác. Tôi nhớ lại một công thức "Nội suy chuỗi Fourier" cho dữ liệu rời rạc, đó là phép nội suy lượng giác, nhưng không chắc nó có được kết nối hay không.


Biến đổi Fourier nhanh (FFT) là một thuật toán cho biến đổi Fourier rời rạc. DFT không phải là một xấp xỉ của hàm ban đầu về mặt hài hòa, mà là một hình chiếu của tín hiệu lên một cơ sở trực giao hàm mũ phức tạp.
Bryan

Được rồi, nhưng bản thân tín hiệu là một xấp xỉ được lấy mẫu và lượng tử hóa của một số phân bố cường độ và DFT bị giới hạn về nội dung hài so với phân phối lý thuyết đó. Bạn có thể lấy lại tín hiệu chính xác từ IDFT, nhưng sẽ có một số sai lệch nếu bạn thực hiện công cụ (như chuyển) sang tín hiệu đó trước khi IDFT lại. Hay tôi đang thiếu một cái gì đó?
neuviemeporte

DFT thực sự có đầu vào rời rạc, nhưng không giới hạn ở đầu vào lượng tử hóa. Tín hiệu là gì không quan trọng. Như bạn đã chỉ ra, bạn có thể lấy lại tín hiệu chính xác. Tuy nhiên, tôi không chắc ý của bạn là gì khi "dịch chuyển". Các thuộc tính của dịch chuyển trong miền tần số là nổi tiếng (dịch tần số phức trong miền thời gian). Nếu mong muốn của bạn là thay đổi trong miền "thời gian", hơn là bạn cần nghĩ về kép DFT của điều đó.
Bryan

1
Ý tôi là nếu tôi thực hiện một số thao tác trên DFT của tín hiệu (như trong trường hợp của tôi - dịch chuyển subpixel của hình ảnh trong "miền pixel" bằng định lý dịch chuyển Fourier), IDFT sẽ trả về kết quả được nội suy như được giải thích bởi @ hotpaw2 câu trả lời. Nội suy này là không hoàn hảo vì tín hiệu không được giới hạn băng tần và chính DFT đã được tính toán từ một tập hợp hữu hạn các mẫu được lượng tử hóa (0-255).
neuviemeporte

Câu trả lời:


4

Một DFT / FFT, cộng với phần đệm không được thêm vào trong miền tần số, sau đó IDFT / IFFT dài hơn, trả về các điểm được nội suy. Các điểm này sẽ được nội suy bằng cách sử dụng hạt nhân định kỳ, đây là phép nội suy hoàn hảo cho dữ liệu gốc bị giới hạn băng tần nghiêm ngặt dưới một nửa tốc độ mẫu ban đầu. Tuy nhiên, dữ liệu sẽ được xử lý như thể nó được bọc tròn, có thể tạo ra kết quả kỳ lạ ở các cạnh của một số hình ảnh. Vì vậy, bạn có thể muốn đệm các cạnh của nguồn ban đầu bằng một filler đẹp hoặc màu khung trước khi nội suy.

Nếu bạn lấy mẫu gấp 2 lần (không đệm FFT để tăng gấp đôi chiều dài trước IFFT), thì bạn có thể thực hiện dịch chuyển nửa pixel bằng cách sử dụng các điểm được nội suy. 3X cho dịch chuyển pixel thứ ba, v.v. Để dịch chuyển, bạn có thể vứt bỏ các điểm ban đầu cộng với bất kỳ điểm nội suy dư thừa nào để có được kích thước mong muốn.


5
@ hotpaw2: hạt nhân nội suy cho DFT không phải là một mức độ vô hạn () trong thực tế, DFT là một biến đổi hữu hạn, rời rạc. Nội suy bởi DFT tương đương với tích chập với hạt nhân Dirichlet, còn được gọi là một số tác giả định kỳ () của một số tác giả: en.wikipedia.org/wiki/Dirichlet_kernel
Arrigo

@Arrigo: Đồng ý. Chỉnh sửa câu trả lời để sửa chữa.
hotpaw2

@ hotpaw2: khi tôi đệm FFT lên gấp đôi kích thước, IFFT sẽ mang lại cấu trúc gấp đôi kích thước. Không chắc chắn những gì để làm với thặng dư? Cảm ơn
neuviemeporte

Vứt bỏ những điểm dư thừa mà bạn không cần. Trong một mẫu 2X, mỗi cái khác được dịch chuyển, xen kẽ với các điểm ban đầu được xây dựng lại. Trong một mẫu 3X, bạn nhận được 2 điểm thay đổi (bằng 1/3 và 2/3) xen kẽ với bản gốc. V.v. Càng nhiều mẫu, bạn càng ném đi.
hotpaw2

7

Có một số hiểu biết chính bạn cần để hiểu cách DFT cho phép bạn thay đổi hình ảnh.

Đầu tiên, lý thuyết của Fouri: Có thể dễ dàng nhìn vào trường hợp liên tục (nghĩa là tương tự) trước tiên. Hãy tưởng tượng bạn có một số chức năng, gọi nó là g (t). Để đơn giản, giả sử g (t) là bản ghi âm tương tự, do đó, đây là chức năng một chiều, liên tục và biểu thị áp suất tức thời là một hàm của thời gian.

Bây giờ, g (t) là một cách chúng ta có thể biểu diễn bản ghi âm của mình. Một cái khác là G (f). G (f) là biến đổi Fourier của g (t). Vậy, G (f) == FT (g (t)). G (f) có tất cả thông tin giống như g (t), nhưng nó đại diện cho thông tin đó trong miền tần số thay vì miền thời gian. Có một số chi tiết kén chọn về Fourier Transform, mà tôi sẽ không đề cập đến.

Bạn có thể nghĩ G (f) là "phân phối tần số" có trong g (t). Vì vậy, nếu g (t) là sóng hình sin (nghĩa là âm thuần), thì G (f) sẽ bằng 0 ở mọi nơi, ngoại trừ ở tần số của âm đó. Đây có lẽ là một điểm tốt để đề cập rằng G (f) nói chung là một hàm phức tạp - nghĩa là nó trả về các số phức, có thể được coi là có thành phần thực và ảo hoặc cường độ và pha.

δ(w)δ

Ok, vì vậy bây giờ chúng tôi đã có FT liên tục trong vành đai của chúng tôi.

Đây là cái nhìn sâu sắc thứ hai: Biến đổi Fourier rời rạc là Biến đổi Fourier như một tín hiệu được lấy mẫu là tín hiệu tương tự. Trong trường hợp này, "rời rạc" đề cập đến lượng tử hóa miền (thời gian hoặc tần suất) của hàm, không phải là phạm vi. (Tín hiệu số được lấy mẫu từ thẻ âm thanh của bạn được lượng tử hóa ở cả miền và phạm vi.)

Luồng byte kỹ thuật số bạn nhận được từ card âm thanh chứa "mẫu" tín hiệu liên tục (tương tự) ban đầu từ micrô. Nếu chúng ta lấy DFT của g (t) được lấy mẫu, chúng ta vẫn nhận được G (f). G (f), hãy nhớ, chỉ là một cách khác để biểu thị thông tin có trong g (t). Nếu chúng ta tuân theo lý thuyết của Nyquist , tín hiệu được lấy mẫu g (t) chứa tất cả "trí thông minh" của tín hiệu liên tục ban đầu, do đó G (f) rời rạc của chúng ta phải chứa tất cả thông tin từ tín hiệu liên tục ban đầu của chúng ta. Về mặt khoa học, G (f) vẫn là một hàm phức tạp.

Đây là nơi kỳ diệu của sự dịch chuyển pixel phụ xuất hiện, nhưng trong trường hợp này tôi sẽ viết về việc dịch chuyển tín hiệu âm thanh kịp thời ít hơn một mẫu, vì đó là điều tương tự.

eTôiπ2

Điều đó có nghĩa là chúng ta có thể thay đổi bản ghi âm của mình theo thời gian (bằng bất kỳ số lượng nào chúng ta chọn, bao gồm một phần thời gian mẫu) chỉ bằng cách sửa đổi pha của G (t). Trên thực tế, tuyên bố đó có lẽ là một chút quá bình thường. Đối với tín hiệu không được lượng tử hóa, được lấy mẫu, pha có thể được điều chỉnh tùy ý (đây là một phần lý do tôi thực hiện phân biệt giữa lượng tử hóa miền và phạm vi trước đó). Tuy nhiên, đối với tín hiệu được lấy mẫu lượng tử hóa (ví dụ dòng âm thanh byte của chúng tôi), kích thước bước lượng tử hóa (nghĩa là số bit) xác định độ phân giải mà chúng ta có thể điều chỉnh pha. Khi chúng tôi nghịch đảo Biến đổi Fourier G (f) (hoặc DIFT nó, đối với tín hiệu được lấy mẫu này), tập hợp mẫu mới g '(t) = DIFT (G (F)) sẽ được thay đổi theo thời gian theo số lượng chúng tôi chọn.

Áp dụng điều này cho pixel của bạn chỉ đơn giản là sử dụng FT 2 chiều thay vì FT 1 chiều được thảo luận ở đây.

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.