ภาพพิกเซลย่อยขยับโดยใช้ DFT อย่างไร


12

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

ฉันกำลังคิดเกี่ยวกับการใช้ DFT + ในโดเมนความถี่และฉันไม่แน่ใจว่ามันใช้งานได้จริงอย่างไรเมื่อเปรียบเทียบกับการสอดแทรกภาพอย่างชัดเจน (โดยใช้ bilinear, bicubic ฯลฯ ... ) ฉันแน่ใจว่ามันไม่สามารถสร้างภาพที่เลื่อนได้อย่างสมบูรณ์แต่ฉันไม่สามารถวางนิ้วลงบนมันได้ พิกเซลย่อยขยับด้วย DFT เทียบเท่ากับการใช้การประมาณค่าและถ้าใช่ใช้อันไหน อคติของค่าพิกเซลในภาพที่ได้รับโดยใช้วิธีนี้คืออะไร? ขอบคุณ!

แก้ไข: หลังจากคิดเรื่องไปแล้วฉันคิดว่าเนื่องจาก FFT เป็นการประมาณ (ยิ่ง DFT) ของฟังก์ชันดั้งเดิมในแง่ของฮาร์โมนิก (ฟังก์ชันไซน์) ว่ามันจะเท่ากับการประมาณตรีโกณมิติบางประเภท ฉันจำสูตร "การแก้ไขอนุกรมฟูริเยร์" สำหรับข้อมูลที่ไม่ต่อเนื่องซึ่งเป็นการแก้ไขตรีโกณมิติ แต่ไม่แน่ใจว่ามันเชื่อมต่ออยู่หรือไม่


การแปลงฟูริเยร์แบบเร็ว (FFT) เป็นอัลกอริทึมสำหรับการแปลงฟูริเยร์แบบแยก DFT ไม่ได้เป็นการประมาณค่าของฟังก์ชั่นดั้งเดิมในแง่ของฮาร์โมนิก แต่เป็นการประมาณของสัญญาณบนพื้นฐานที่ซับซ้อนแบบเอกซ์โปเนนเชียลแทน
ไบรอัน

โอเค แต่สัญญาณตัวเองนั้นเป็นการประมาณตัวอย่างและการประมาณปริมาณของการแจกแจงความเข้มบางส่วนและ DFT นั้นถูก จำกัด ในส่วนที่เกี่ยวกับเนื้อหาฮาร์โมนิกเมื่อเปรียบเทียบกับการแจกแจงเชิงทฤษฎี คุณสามารถรับสัญญาณที่แน่นอนกลับมาจาก IDFT ได้ แต่จะมีอคติบ้างถ้าคุณทำสิ่งต่างๆ (เช่นเลื่อน) ไปที่มันก่อนที่ IDFTing จะกลับมา หรือฉันกำลังพลาดอะไรอยู่?
neuviemeporte

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

1
ฉันหมายความว่าถ้าฉันดำเนินการบางอย่างเกี่ยวกับ DFT ของสัญญาณ (เช่นในกรณีของฉัน - การเปลี่ยน subpixel ของภาพใน "โดเมนโดเมน" โดยใช้ทฤษฎีการแปลงฟูริเยร์), IDFT จะแสดงผลลัพธ์แบบสอดแทรกตามที่อธิบายโดย @ hotpaw2 ตอบ. การแก้ไขนี้ไม่สมบูรณ์เพราะสัญญาณไม่ จำกัด Bandwidth และ DFT นั้นคำนวณจากกลุ่มตัวอย่างเชิงปริมาณ (0-255) ที่ จำกัด
neuviemeporte

คำตอบ:


4

DFT / FFT บวกการเพิ่มการเติมเต็มศูนย์ในโดเมนความถี่จากนั้น IDFT / IFFT ที่ยาวขึ้นจะส่งคืนจุดที่ถูกสอดแทรก จุดเหล่านี้จะถูกสอดแทรกโดยใช้เคอร์เนล Sinc เป็นระยะซึ่งเป็นการแก้ไขที่สมบูรณ์แบบสำหรับข้อมูลต้นฉบับที่ถูก จำกัด ด้วยแบนด์วิดธ์ต่ำกว่าครึ่งหนึ่งของอัตราตัวอย่างดั้งเดิม อย่างไรก็ตามข้อมูลจะถูกดำเนินการเหมือนถูกห่อเป็นวงกลมซึ่งอาจให้ผลลัพธ์ที่แปลกที่ขอบของภาพบางภาพ ดังนั้นคุณอาจต้องการวางขอบของแหล่งต้นฉบับด้วยฟิลเลอร์ที่ดีหรือสีเฟรมก่อนการแก้ไข

หากคุณเพิ่มความเร็วเป็น 2X (zero-pad FFT ให้เป็นศูนย์เพื่อเพิ่มความยาวเป็นสองเท่าก่อนหน้า IFFT) คุณสามารถทำการเลื่อนครึ่งพิกเซลโดยใช้จุดแทรก 3X สำหรับการเลื่อนพิกเซลครั้งที่สาม ฯลฯ สำหรับการเลื่อนคุณสามารถโยนคะแนนเดิมบวกกับจุดแทรกที่เกินเพื่อให้ได้ขนาดที่ต้องการ


5
@ hotpaw2: เคอร์เนล interpolating สำหรับ DFT ไม่ได้เป็น sinc () ของขอบเขตที่ไม่มีที่สิ้นสุดในความเป็นจริง DFT คือการแปลงไม่ต่อเนื่องและ จำกัด การแก้ไขโดย DFT เทียบเท่ากับการชักจูงด้วยเคอร์เนล Dirichlet หรือที่เรียกว่าperiodic sinc ()โดยผู้เขียนบางคน: en.wikipedia.org/wiki/Dirichlet_kernel
Arrigo

@Arrigo: เห็นด้วย แก้ไขคำตอบเพื่อแก้ไข
hotpaw2

@ hotpaw2: เมื่อฉันวาง FFT เป็นสองเท่าของขนาด IFFT จะให้ผลการสร้างใหม่เป็นสองเท่าของขนาด ไม่แน่ใจว่าจะทำอย่างไรกับส่วนเกินหรือไม่ ขอบคุณ
neuviemeporte

ทิ้งคะแนนส่วนเกินที่คุณไม่ต้องการ ใน 2X อัพตัวอย่างแต่ละอันจะถูกเลื่อนสลับไปมากับจุดเดิมที่สร้างขึ้นใหม่ ในตัวอย่าง 3X คุณจะได้รับ 2 คะแนนเลื่อน (โดย 1/3 และ 2/3) สลับกับต้นฉบับ ฯลฯ ยิ่งคุณเพิ่มมากเท่าไหร่คุณก็ยิ่งทิ้ง
hotpaw2

7

มีข้อมูลเชิงลึกที่สำคัญหลายประการที่คุณต้องการเพื่อทำความเข้าใจว่า DFT ช่วยให้คุณเปลี่ยนภาพได้อย่างไร

อย่างแรกทฤษฎีของฟูริเยร์: มันอาจจะง่ายกว่าที่จะดูกรณีต่อเนื่อง (เช่นอะนาล็อก) ก่อน ลองนึกภาพคุณมีฟังก์ชั่นบางอย่างเรียกว่า g (t) สำหรับความเรียบง่ายสมมติว่า g (t) เป็นการบันทึกเสียงแบบอะนาล็อกดังนั้นมันจึงเป็นฟังก์ชั่นหนึ่งมิติซึ่งต่อเนื่องและแสดงถึงความกดดันแบบทันทีทันใดเป็นฟังก์ชั่นของเวลา

ตอนนี้ g (t) เป็นวิธีหนึ่งที่เราสามารถเป็นตัวแทนการบันทึกเสียงของเรา อีกอันคือ G (f) G (f) คือการแปลงฟูริเยร์ของ g (t) ดังนั้น G (f) == FT (g (t)) G (f) มีข้อมูลทั้งหมดเหมือนกับ g (t) แต่มันแสดงถึงข้อมูลนั้นในโดเมนความถี่แทนที่จะเป็นโดเมนเวลา มีรายละเอียดเล็กน้อยเกี่ยวกับการแปลงฟูริเยร์ซึ่งฉันจะไม่พูดถึง

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

δ(w)δ

ตกลงดังนั้นตอนนี้เรามี FT อย่างต่อเนื่องภายใต้เข็มขัดของเรา

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

กระแสดิจิตอลไบต์ที่คุณได้รับจากการ์ดเสียงของคุณมี "ตัวอย่าง" ของสัญญาณต่อเนื่อง (อะนาล็อก) ดั้งเดิมจากไมโครโฟน หากเราใช้ DFT ของตัวอย่าง g (t) เรายังคงได้ G (f) G (f) จำได้ว่าเป็นเพียงวิธีที่แตกต่างในการแสดงข้อมูลที่มีอยู่ใน g (t) หากเราเชื่อฟังทฤษฎีของ Nyquistสัญญาณตัวอย่าง g (t) จะมี "ความฉลาด" ทั้งหมดของสัญญาณต่อเนื่องดั้งเดิมดังนั้น G (f) ที่แยกจากกันของเราจะต้องมีข้อมูลทั้งหมดจากสัญญาณต่อเนื่องดั้งเดิมของเรา Parenthetically, G (f) ยังคงเป็นฟังก์ชันที่ซับซ้อน

นี่คือความมหัศจรรย์ของการเปลี่ยนพิกเซลย่อย แต่ในกรณีนี้ฉันจะเขียนเกี่ยวกับการเปลี่ยนสัญญาณเสียงในเวลาน้อยกว่าตัวอย่างเนื่องจากมันเป็นสิ่งเดียวกัน

eiπ2

นั่นหมายความว่าเราสามารถเปลี่ยนการบันทึกเสียงของเราในเวลา (โดยใด ๆจำนวนเงินที่เราเลือกรวมทั้งส่วนของเวลาตัวอย่างหนึ่ง) โดยเพียงแค่การปรับเปลี่ยนขั้นตอนของ G (t) จริงๆแล้วคำพูดนั้นอาจจะดูธรรมดาไปหน่อย สำหรับสัญญาณที่ไม่ได้วัดปริมาณตัวอย่างจะสามารถปรับเฟสได้โดยพลการ (นี่เป็นส่วนหนึ่งของเหตุผลที่ฉันสร้างความแตกต่างระหว่างการหาปริมาณของโดเมนและช่วงก่อนหน้านี้) อย่างไรก็ตามสำหรับสัญญาณตัวอย่างที่ถูก quantized (ตัวอย่างเช่น byte-stream ของออดิโอ) ขนาดขั้นตอน quantization (เช่นจำนวนบิต) กำหนดความละเอียดที่เราสามารถปรับเฟสได้ เมื่อเราผกผันแปลงฟูริเยร์ G (f) (หรือ DIFT สำหรับสัญญาณตัวอย่างนี้) กลุ่มตัวอย่างใหม่ g '(t) = DIFT (G (F)) ทั้งหมดจะถูกเลื่อนตามเวลาที่เราเลือก

การใช้สิ่งนี้กับพิกเซลของคุณนั้นหมายถึงการใช้ FT แบบ 2 มิติแทน FT แบบ 1 มิติที่กล่าวถึงที่นี่

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