แมวที่ปรากฏในมิติกระจก
(substack.com/lcamtuf)- แม้ดูเผิน ๆ จะเป็น ภาพถ่ายผู้หญิง แต่เป็นการทดลองที่เมื่อใช้ DCT กับภาพแล้ว จะเผยให้เห็นแมวที่ซ่อนอยู่ในโดเมนความถี่
- โดเมนเวลา·อวกาศและ โดเมนความถี่ เชื่อมกันด้วยการแปลงที่ย้อนกลับได้ ทำให้ภาพเดียวกันสามารถถูกตีความได้คนละแบบ
- หากนำแพตเทิร์น “noise” ที่ได้จากการแปลงภาพแมวด้วย DCT มาผสมทับด้วยค่าความทึบต่ำ ภาพต้นฉบับจะยังคงอยู่ ขณะที่ผลลัพธ์หลังการแปลงยังเหลือรูปร่างของแมว
- ภาพที่ผสมแล้วแม้ผ่านการ resize ก็ยังมีข้อมูลของแมวเหลืออยู่ แต่เมื่อขยายจะซ้ำเหมือน tile และเมื่อย่อจะถูกตัดออก
- เมื่อปรับคุณภาพ JPEG ให้ต่ำลง โดยเฉพาะ องค์ประกอบความถี่สูง จะถูก quantize อย่างรุนแรง ทำให้มองเห็นได้ด้วยตาว่าการบีบอัดแบบสูญเสียข้อมูลทิ้งข้อมูลไปมากเพียงใด
การทดลอง “มิติกระจก” ที่สร้างด้วย DCT
- โดเมนความถี่คือวิธีตีความสัญญาณทั่วไปโดยแปลงเป็นแอมพลิจูดของรูปคลื่นองค์ประกอบ
- ฐานที่พบบ่อยที่สุดคือ คลื่นไซน์ ที่มีความถี่เพิ่มขึ้น
- รูปคลื่นอื่น ๆ ก็สามารถใช้สร้างโดเมนความถี่ทางเลือกได้เช่นกัน
- การแปลงนี้มีคุณสมบัติ 2 อย่าง
- ความย้อนกลับได้ ซึ่งสามารถแปลงกลับเป็นข้อมูลเดิมในโดเมนเวลา หรือโดเมนอวกาศได้
- ความสมมาตรของอินพุตและเอาต์พุต ซึ่งใช้การดำเนินการทางคณิตศาสตร์เดียวกันในการแปลงทั้งสองทิศทาง
- ในการบีบอัด การแยกแยะนี้มีความสำคัญ
- หลังจากแปลงภาพเป็นโดเมนความถี่แล้ว แม้ลดความละเอียดหรือเอาองค์ประกอบความถี่สูงออก ภาพผลลัพธ์ก็อาจยังดูคล้ายเดิมในเชิงการรับรู้ได้
- นั่นทำให้ข้อมูลที่ต้องส่งหรือจัดเก็บลดลงตามไปด้วย
กระบวนการซ่อนแมวไว้ในโดเมนความถี่
- เริ่มจากการแปลงภาพถ่ายแมวให้เป็นรูปแบบโดเมนความถี่ด้วย Discrete Cosine Transform (DCT)
- นำแพตเทิร์น “noise แมว” ในโดเมนความถี่ไปผสมทับบนภาพถ่ายผู้หญิงจากตัวอย่างก่อนหน้า ด้วยค่าความทึบต่ำ
- การผสมภาพนี้มีการสูญเสียข้อมูล
- ผลลัพธ์ที่คาดหวังคือ ภาพผู้หญิงจะถูกแยกด้วย DCT ออกมาเป็น noise ที่ค่อนข้างสม่ำเสมอ ส่วน noise แมวที่แทรกเข้าไปจะรวมตัวกลับเป็นภาพแมว
- ในความเป็นจริง เมื่อใช้ DCT กับภาพที่ผสมแล้ว จะเห็นรูปร่างแมวปรากฏขึ้น
- มีภาพผสมและตัวอย่าง MATLAB ให้ลองตรวจสอบได้โดยตรง
- woman-with-cat.png
- คำนวณ DCT ด้วย
dct2(woman)และแสดงผลลัพธ์ที่ทำให้นุ่มขึ้นด้วยimgaussfilt(cat, 1)
- แมวจะยังคงอยู่แม้หลังการ resize
- เมื่อขยาย ภาพจะซ้ำเหมือน tile
- เมื่อย่อ ภาพจะถูกตัดออก
- เมื่อปรับค่าคุณภาพ JPEG ให้ต่ำลง ข้อมูลของแมวจะเสียหาย
- ที่คุณภาพ JPEG สูง ภาพยังดูค่อนข้างดี
- ที่คุณภาพต่ำ จตุภาคขวาล่าง ซึ่งสอดคล้องกับองค์ประกอบความถี่สูงจะถูก quantize อย่างหนัก
- การแสดงภาพนี้ชี้ให้เห็นว่าอัลกอริทึม JPEG ทำลายข้อมูลจำนวนมากในแบบที่เราไม่ค่อยสังเกตเห็น
- มีกรณีก่อนหน้า เช่น การใส่ข้อความที่ซ่อนอยู่ในสเปกโทรแกรมเสียง หรือการอภิปรายเรื่องการซ้อน text steganography บนค่าสัมประสิทธิ์ DCT ของ JPEG
- จุดเน้นไม่ได้อยู่ที่ความใช้งานได้จริงหรือความใหม่หมดจดของเทคนิคนี้ แต่อยู่ที่การเชื่อมโยงกันอย่างน่าสนใจระหว่าง โดเมนความถี่ กับโดเมนเวลา
- แถมยังมีวิดีโอการเสื่อมคุณภาพของแมวในโดเมนความถี่แบบ “standalone” ตามค่าคุณภาพ JPEG ต่าง ๆ: https://vimeo.com/940487310/8a929a5eb5
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ภาพถ่ายส่วนใหญ่ที่มีวัตถุซึ่งมองออกได้ จะมี พลังงานสเปกตรัม กระจุกอยู่ใกล้จุดกำเนิด หรือก็คือบริเวณมุมซ้ายบน เหมือนตัวอย่างนี้
https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_pr...
DCT ของภาพผู้หญิงก็เป็นแบบเดียวกัน ในทางกลับกัน วัตถุในภาพถ่ายมักถูกวางไว้ค่อนมาทางกึ่งกลางเฟรม ดังนั้นในภาพผสม ข้อมูลในโดเมนเชิงพื้นที่กับข้อมูลในโดเมนความถี่จึงรบกวนกันน้อยลง และเมื่อทำการแปลงกลับ สีหน้าของแมวก็ยังคงอยู่
https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_...
ฝั่งภาพผู้หญิงก็ใช้หลักการเดียวกันในทางกลับกัน
อยากตรวจสอบว่าผมเข้าใจกระบวนการนี้ถูกไหม: a) นำภาพผู้หญิงกับภาพแมวมา, b) แปลงแมวเป็นโดเมนความถี่ด้วย DCT, c) นำแมวในโดเมนความถี่ไปซ้อนบนภาพที่มองเห็นของผู้หญิง, d) เมื่อทำ DCT กับภาพผสม ก็จะได้แมวกลับมา
ถ้าพูดให้แม่นกว่านั้น น่าจะได้ผลลัพธ์เป็นแมวเชิงภาพที่ผสมกับผู้หญิงในโดเมนความถี่ แต่หมายความว่าแมวเชิงภาพจะเด่นกว่า
จากที่จำได้จากโปรเจกต์นักศึกษาเมื่อนานมาแล้ว เทคนิคนี้เป็นพื้นฐานของ ลายน้ำดิจิทัลแบบทนทาน ที่ใช้ได้กับสัญญาณใด ๆ ไม่ว่าจะเป็นภาพหรือเสียง
การใช้งานหลักคือการตรวจจับสื่อที่มีลิขสิทธิ์ แม้หลังจากสัญญาณถูกปรับแต่งอย่างหนักแล้ว เช่น ภาพยนตร์ที่ถูกริปหรือถ่ายด้วยกล้องวิดีโอ รวมถึงสื่อที่จัดส่งด้วย JPEG-2000
ถ้ามีคนในอุตสาหกรรมภาพยนตร์ช่วยเล่ารายละเอียดเชิงเทคนิคเพิ่มเติมได้ก็อยากฟัง
น่าจะเป็น Digimarc เลยสงสัยว่าเป็นอัลกอริทึมบนพื้นฐานการแปลงฟูเรียร์หรือเปล่า
เป็นตัวอย่างที่ดีมากของ ภาวะคู่กันเวลา-ความถี่ ของการแปลงฟูเรียร์ หรือในกรณีนี้คือภาวะคู่กันพื้นที่-ความถี่
คณิตศาสตร์ของการแปลงฟูเรียร์ไม่สนใจ “ทิศทาง” ที่เราจะทำการแปลง ดังนั้นฟังก์ชันที่ดูคล้ายกันในโดเมนเวลา/ความถี่ ก็จะมีการแปลงฟูเรียร์ที่คล้ายกันในปริภูมิความถี่/เวลาเช่นกัน
ในกรณีนี้ ถ้าฝังพล็อตความถี่ของแมวลงในพล็อตเชิงพื้นที่ของผู้หญิง แมวก็จะปรากฏในการแปลงฟูเรียร์ของภาพผู้หญิง และในทางกลับกันก็เช่นกัน
เป็นการประยุกต์ใช้ สเตกาโนกราฟี ที่เจ๋งและน่าสนใจมาก
ถ้าอยากซ่อนภาพผิดกฎหมายไว้ในภาพธรรมดา ก็แปลงไปเป็นโดเมนความถี่แล้วนำไปผสมกับอีกภาพหนึ่งได้ ตราบใดที่ผู้รับรู้วิธีย้อนกลับ มันก็จะเป็นวิธีส่งภาพลับที่อาจตรวจจับได้ยาก
ถ้าอีกฝ่ายไม่รู้ว่าต้องหาอะไร ก็คงตรวจจับได้ยาก แต่ถ้ารู้แล้วก็คงง่าย
ถ้านำภาพที่ซ่อนไปผสมกับ one-time pad มันก็ควรจะแยกไม่ออกจากสัญญาณรบกวนไม่ใช่หรือ? ภาพที่ถูกบีบอัดแบบสูญเสียข้อมูลก็มีสัญญาณรบกวนที่คาดได้ตามธรรมชาติอยู่แล้วด้วย สงสัยว่ามีคนเคยทำแล้วหรือยัง และถ้าไม่มีใครบอกก็คงไม่มีวันรู้
Aphex Twin และคนอื่น ๆ เคยใช้ทริกสนุก ๆ คล้ายกัน ทำให้มีใบหน้าประหลาดปรากฏใน สเปกโทรแกรมเสียง ของแทร็กหนึ่ง: https://news.ycombinator.com/item?id=8509105
MetaSynth มีมาตั้งแต่ช่วงปลายยุค 90 และแปลงระหว่างตัวอย่างเสียงในโดเมนเวลา กับภาพในโดเมนความถี่ ผสานเข้ากับฟิลเตอร์ภาพแบบ Photoshop
https://uisoftware.com/metasynth/
บทความยิ่งอ่านไปจนจบก็ยิ่งดีขึ้นเรื่อย ๆ
ไม่น่าเชื่อว่าทำไมเพิ่งมานึกได้ว่าโดเมนความถี่สามารถใช้กับ การบีบอัดภาพ ได้ พอเห็นแล้วก็ชัดเจนมาก อัลกอริทึมบีบอัดภาพส่วนใหญ่ทำงานแบบนี้หรือเปล่า? คือแค่ลบส่วนที่อ่อนกว่าในโดเมนความถี่ทิ้งไปใช่ไหม?
ใช่ MP3, Ogg-Vorbis, JPEG ล้วนทำงานแบบนี้
การเลือกค่าน้ำหนักว่าจะเก็บความถี่ไหนไว้น่าจะอิงจากโมเดลจิตอะคูสติก แต่พูดแบบคร่าว ๆ ก็คือทิ้งข้อมูลความถี่ลำดับสูงไปจริง ๆ
DCT มักถูกใช้เป็นขั้นตอนย่อยของอัลกอริทึมบีบอัดภาพหรือวิดีโอที่ซับซ้อนกว่า
เช่น ก่อนอื่นหาบางบริเวณของภาพที่มีรายละเอียดมาก แล้วใช้ DCT กับบริเวณนั้นเพื่อเก็บสเปกตรัมไว้มากขึ้น จากนั้นทำแบบเดียวกันกับบริเวณอื่น ๆ โดยเก็บสเปกตรัมมากหรือน้อยต่างกัน พารามิเตอร์ควอนไทซ์ที่คุณอาจเคยเห็นในอัลกอริทึมบีบอัดวิดีโอก็มีผลต่อพฤติกรรมนี้นั่นเอง
โดยทั่วไปไม่ได้ลบ ความถี่สูง ทิ้งทั้งหมด แต่เข้ารหัสด้วยจำนวนบิตที่น้อยลง
ภาพไม่ได้ ถูกจำกัดแถบความถี่ ในความหมายที่แท้จริง จึงไม่สามารถแทนได้อย่างสมบูรณ์ด้วยโดเมนความถี่อย่างเดียว
ดังนั้นจึงใช้วิธีประนีประนอมด้วยการแบ่งเป็นบล็อกเล็ก ๆ แล้วเข้ารหัสโดยผสมโดเมนความถี่กับตัวทำนายในโดเมนเชิงพื้นที่ ถึงอย่างนั้นใจความหลักก็ถือว่าถูกอยู่
ปัญหาส่วนใหญ่มาจากขอบที่คมชัด ขอบแบบนี้ต้องใช้ความถี่จำนวนอนันต์ในการแทนค่า ดังนั้นถ้าตัดบางส่วนออกไป ก็จะเกิดภาพเบลอหรืออาร์ติแฟกต์แบบ ringing
อีกเหตุผลหนึ่งคือสัญญาณที่จำกัดแถบความถี่จะวนซ้ำไม่สิ้นสุด แต่ภาพจริงไม่ได้เป็นแบบนั้น สิ่งที่อยู่ด้านซ้ายของภาพไม่ได้จำเป็นต้องทำนายได้ว่าด้านขวาจะมีอะไร
ยังมีองค์ประกอบมากกว่านั้น ไม่ใช่แค่ทิ้งความถี่ แต่ประเด็นที่สำคัญอีกอย่างคือ ข้อมูลที่มีความแปรปรวนน้อย สามารถเข้ารหัสได้มีประสิทธิภาพกว่า
ไม่ใช่แค่ข้อมูลความถี่สูงเป็นสัญญาณรบกวนเท่านั้น แต่โดยทั่วไปขนาดของมันเองก็มักเล็กกว่าด้วย
JPEG 2000 แปลกกว่านั้นอีก มันใช้การแปลงเวฟเล็ต
ถ้าตัดไฟล์ JPEG 2000 ตรงกลางไฟล์ ก็ยังสามารถกู้ภาพความละเอียดต่ำกว่าออกมาได้ ถ้าลดความยาวไฟล์ลงต่ำกว่าจุดหนึ่ง ข้อมูลสีก็จะหายไปและภาพจะกลายเป็นโทนเทา
ถ้าแมวกระจุกอยู่ที่มุมซ้ายบนมากกว่านี้ เดโมนี้คงทำงานได้ไม่ดีเท่าไร
ใน DCT จะเกิดองค์ประกอบความถี่ต่ำที่มีขนาดใหญ่มากจำนวนมาก และถ้าแมวอยู่ใกล้มุมซ้ายบน องค์ประกอบพวกนั้นคงกลบแมวไปหมด
ใน การแทนเชิงกลศาสตร์ควอนตัม ของตำแหน่งและความถี่ หรือถ้าพิจารณา hbar ก็คือการแทนของตำแหน่งและโมเมนตัม จะไม่สามารถยัดฟังก์ชันต่างกันสองตัวเข้าไปไว้ในตัวเดียวด้วยวิธีนี้ได้
เพราะฟังก์ชันที่ต่างกันแค่เฟสซึ่งขึ้นกับตำแหน่ง ก็ยังเป็นสถานะควอนตัมที่ต่างกันอยู่ดี