ศูนย์ที่ศูนย์ความถี่สำหรับการแปลงฟูริเยร์แบบไม่ต่อเนื่อง


11

ฉันกำลังทำงานกับแอปพลิเคชั่นการประมวลผลภาพซึ่งใช้การแปลงฟูริเยร์แบบแยกเพื่อใช้การเบลอ / การลับภาพ แอปพลิเคชันทำงานได้ไม่มากก็น้อย แต่สิ่งที่เกี่ยวกับกลไกยังทำให้ฉันสับสน

โดยเฉพาะอย่างยิ่งมันเป็นวิธีการที่กระบวนการของการศูนย์ความถี่ศูนย์จะถูกทำ

ตัวอย่างที่ฉันได้เห็นก่อนการประมวลผลภาพอินพุต (ของความเข้ม greyscale) โดยการคูณมันด้วยเมทริกซ์ขนาดเท่ากับภาพอินพุตที่มีค่าเป็นโดยที่คือแถว,คือ คอลัมน์ดังนั้นรูปแบบสลับและ x y 1 - 1(1)x+yxy11

ตามหมายเหตุนี้เทียบเท่ากับการสลับจตุภาคของเมทริกซ์โดยการพลิกข้ามแกนและyxy

ฉันเข้าใจว่าทำไมสิ่งนี้ถึงเกิดขึ้นและฉันอยากจะเครียดฉันเข้าใจว่าฉันมีโค้ด / ฟูริเยร์ทำงานฉันก็ไม่เข้าใจว่าทำไมการคูณเมทริกซ์อินพุทด้วย 1 / -1 นั้นจบลงที่กึ่งกลางองค์ประกอบศูนย์ 0 รอบ

ขอบคุณ


คุณยังสามารถหาข้อมูลอ้างอิงได้ในบทที่ 4 การใช้งาน 4.6 จากการประมวลผลภาพดิจิทัลโดย Gonzalez (ฉันมีรุ่นที่สอง) หวังว่ามันจะช่วย
hakunami

คำตอบ:


18

Oh! ช่างเป็นกลอุบายที่ยอดเยี่ยม! มันใช้งานได้เนื่องจากทฤษฎีบทการสนทนา (เช่นการคูณในโดเมนอวกาศ / เวลาเทียบเท่ากับการสนทนาในโดเมนความถี่)

มันไม่ได้พลิกข้ามแกนและมันกำลังหมุนภาพของการแปลงฟูริเยร์ (คิดว่าหมุนครึ่งทางไปรอบ ๆ กระบอก) เคล็ดลับที่นี่คือการสลับ -1,1 ในโดเมนอวกาศเป็นสัญญาณที่มีความถี่สูงสุด ดังนั้นการแปลงฟูริเยร์ของภาพนั้นจึงเป็นจุดเดียวในโดเมนความถี่ การชักจูงด้วยจุดเดียวนั้นเทียบเท่ากับการเลื่อน (หมุน) ภาพโดยออฟเซ็ตของจุดจากความถี่ศูนย์yxy

ภาพทดสอบนี่คือภาพการทดสอบ: การแปลงฟูริเยร์ดูเหมือนว่า:การแปลงฟูริเยร์ของภาพทดสอบ

หากคุณใช้ฟูเรียร์ของภาพสลับ ( ภาพหมากรุก) ป้อนคำอธิบายรูปภาพที่นี่ก็จะส่งผลในจุดเดียวที่เหมาะสมในใจกลางของฟูเรียร์ไปนี้: (จำได้ว่าเรายังไม่ได้ทำการหมุนดังนั้นจุดศูนย์กลางของการแปลงฟูริเยร์คือความถี่สูงและความถี่ต่ำยังคงอยู่ที่มุม) แต่นี่คือ "เคอร์เนลการหมุน!" การใช้เคอร์เนลการหมุนนี้ทำให้ทุกอย่างเลื่อนลงและไปทางขวา (แต่สิ่งที่หลุดออกจากด้านล่างขวาหมุนไปทางซ้ายบน)

convolving ภาพต้นฉบับกับเคอร์เนลหมุน (ในโดเมนภาพ) ช่วยให้คุณ: ภาพที่เชื่อในขณะที่ convolving ฟูริเยร์การแปลงภาพที่มีเมล็ดในการหมุน (ในโดเมนความถี่) การแปลงฟูริเยร์แบบหมุนช่วยให้คุณ:

และเราสามารถตรวจสอบว่าคูณ TestImage โดยหมากรุกในโดเมนภาพให้ซึ่งมีฟูเรียร์ของ:ภาพการคูณหมุนฟูเรียร์อีกครั้ง


ฉันสับสน นี่คือการใช้ convolution เพื่อใช้งานfftshiftฟังก์ชันที่คล้ายกันหรือไม่ ไม่ถูกกว่าการคำนวณเพื่อจัดเรียง quadrants ทั้งสี่ใหม่โดยตรงหรือไม่
endolith

2
ไม่มีการโน้มน้าวโดยตรงที่นี่ นี่คือการใช้การคูณพิกเซลแบบชาญฉลาดในโดเมนรูปภาพเพื่อให้ได้ผลลัพธ์ที่เท่าเทียมกันในโดเมนฟูริเยร์ ใช่fftshiftไม่แพงมาก แต่เคล็ดลับนี้อาจมีพฤติกรรมแคชที่ดีขึ้น การคูณ pixelwise เป็นเพียงแค่พลิกสัญลักษณ์ของพิกเซลอื่น ๆ ง่ายต่อการ vectorize การเขียน read-modified-write เป็นแคชที่รับประกันและมันเป็นเรื่องง่ายสำหรับโปรเซสเซอร์ที่จะดึงการอ่านล่วงหน้า
หลงทางตรรกะ

โอ้ใช่มันเป็นสัญญาณพลิกไม่ใช่การคูณที่แท้จริง
endolith

ทำไมการแปลงฟูริเยร์ของภาพทดสอบ (ภาพที่สอง) เป็นเช่นนั้น? ฉันเห็นภาพสองภาพสีดำอีกภาพหนึ่ง
hakunami

10

คำตอบของ Wandering Logic นั้นถูกต้องและมีรายละเอียด แค่คิดว่าคุณต้องการเห็นคณิตศาสตร์มากกว่าภาพ:

ถ้าคุณดูที่กรณี 1D คุณมีการคูณการป้อนข้อมูลโดยที่ความถี่เกิดขึ้นเป็น2) นั่นคือการคูณจะเลื่อนสเปกตรัมของสัญญาณครึ่งหนึ่งของความถี่การสุ่มตัวอย่างโอห์ม2 π ( k / 2 )(1)k=ejωω2π(k/2)

ผลที่ได้คือความถี่ศูนย์ - ซึ่งอยู่ที่ดัชนี 0 ก่อนหน้า - ตอนนี้อยู่ที่ครึ่งหนึ่งของความกว้างของภาพ (หรือความสูงขึ้นอยู่กับว่าคุณคูณคอลัมน์หรือแถว)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.