← กลับไปยังบทความทั้งหมด

แฟร็กทัลเฟลม ศิลปะคณิตศาสตร์จากระบบฟังก์ชันทำซ้ำ

สรุปใจความสำคัญ

  • แฟร็กทัลเฟลมถูกสร้างขึ้นโดย Scott Draves ในปี 1992
  • แตกต่างจาก IFS ทั่วไปโดยการใช้ฟังก์ชันไม่เชิงเส้น การแสดงผลแบบ Log-density และการกำหนดสีตามโครงสร้าง
  • ใช้กระบวนการสร้างฮิสโตแกรมและการเรนเดอร์ภาพด้วยเทคนิค Supersampling และ Gamma Correction
  • ใช้ Adaptive Density Estimation เพื่อลดสัญญาณรบกวนโดยไม่สูญเสียความละเอียดของภาพ

แฟร็กทัลเฟลม (Fractal Flame) เป็นรูปแบบหนึ่งของแฟร็กทัลในกลุ่มระบบฟังก์ชันทำซ้ำ (Iterated Function System - IFS) ซึ่งถูกคิดค้นขึ้นโดย Scott Draves ในปี ค.ศ. 1992 ความโดดเด่นของแฟร็กทัลเฟลมคือการนำคณิตศาสตร์ขั้นสูงมาสร้างสรรค์เป็นภาพที่มีความซับซ้อนและสวยงาม โดยรหัสต้นฉบับแบบโอเพนซอร์สของ Draves ได้ถูกนำไปพัฒนาต่อยอดในซอฟต์แวร์กราฟิกอย่าง Adobe After Effects และโปรแกรมแก้ไขแฟร็กทัลเฟลมชื่อดังอย่าง Apophysis

ความแตกต่างจากระบบฟังก์ชันทำซ้ำทั่วไป

แฟร็กทัลเฟลมมีความแตกต่างจากระบบฟังก์ชันทำซ้ำ (IFS) แบบดั้งเดิมใน 3 ประเด็นหลัก ดังนี้:

  • การใช้ฟังก์ชันไม่เชิงเส้น (Nonlinear Functions): นอกเหนือจากการแปลงแบบอะฟีน (Affine transforms) แล้ว แฟร็กทัลเฟลมยังมีการใช้ฟังก์ชันไม่เชิงเส้นในการทำซ้ำ
  • การแสดงผลแบบความหนาแน่นลอการิทึม (Log-density Display): แทนที่จะใช้การแสดงผลแบบเชิงเส้นหรือแบบไบนารี แฟร็กทัลเฟลมใช้การแมปโทนสีแบบลอการิทึม ซึ่งช่วยให้สามารถแสดงรายละเอียดของภาพได้มากขึ้น
  • การกำหนดสีตามโครงสร้าง (Color by Structure): การกำหนดสีจะขึ้นอยู่กับเส้นทางของการทำซ้ำ (Recursive path) แทนที่จะกำหนดตามความหนาแน่นหรือใช้สีเดียว (Monochrome)

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

อัลกอริทึมการสร้างภาพ

กระบวนการสร้างแฟร็กทัลเฟลมประกอบด้วยสองขั้นตอนหลัก คือ การสร้างฮิสโตแกรม (Histogram) และการเรนเดอร์ฮิสโตแกรมให้เป็นภาพ

1. การสร้างฮิสโตแกรม

เริ่มต้นด้วยการเลือกจุดเริ่มต้นแบบสุ่ม $P = (P.x, P.y, P.c)$ โดยที่พิกัดที่สาม ($P.c$) คือค่าสีปัจจุบันของจุดนั้น จากนั้นจะทำการเลือกฟังก์ชัน $F_j$ จากชุดฟังก์ชันที่มีอยู่ โดยความน่าจะเป็นในการเลือกฟังก์ชัน $F_j$ คือ $p_j$

สูตรทางคณิตศาสตร์สำหรับการเลือกฟังก์ชันในแฟร็กทัลเฟลม
สมการแสดงการเลือกฟังก์ชันตามความน่าจะเป็น

ในแต่ละรอบของการทำซ้ำ จะมีการคำนวณจุดถัดไปโดยใช้ฟังก์ชัน $F_j$ ซึ่งมีรูปแบบดังนี้:

สูตรการคำนวณฟังก์ชัน Fj ในแฟร็กทัลเฟลม
สมการการคำนวณค่าพิกัดโดยใช้การถ่วงน้ำหนักของ Variation

โดยที่ $w_k$ คือน้ำหนักของ Variation $V_k$ ซึ่ง Draves เสนอว่าค่า $w_k$ ควรเป็นค่าไม่ติดลบและรวมกันได้เท่ากับหนึ่ง อย่างไรก็ตาม ในโปรแกรมอย่าง Apophysis อาจไม่มีข้อจำกัดนี้

สัญลักษณ์ทางคณิตศาสตร์ wk
ตัวแปรน้ำหนัก (Weight) ที่ใช้ในการคำนวณ

ตัวอย่างของฟังก์ชัน $V_k$ ที่นิยมใช้ ได้แก่:

  • $V_0(x,y) = (x,y)$ (เชิงเส้น - Linear)
  • $V_1(x,y) = (\sin x, \sin y)$ (ไซนูซอยดัล - Sinusoidal)
  • $V_2(x,y) = (x,y)/(x^2+y^2)$ (ทรงกลม - Spherical)

สี $P.c$ ของจุดจะถูกผสมกับสีที่เกี่ยวข้องกับฟังก์ชัน $F_j$ ที่ถูกเรียกใช้ล่าสุด และหลังจากทุกการทำซ้ำ ฮิสโตแกรม ณ จุด $(P.x, P.y)$ จะถูกอัปเดต ทำให้สีในภาพสะท้อนถึงฟังก์ชันที่ใช้ในการสร้างส่วนนั้นของภาพ

2. การเรนเดอร์ภาพ

เพื่อเพิ่มคุณภาพของภาพและลดสัญญาณรบกวน (Noise) สามารถใช้เทคนิค Supersampling โดยการสร้างฮิสโตแกรมที่มีขนาดใหญ่กว่าภาพจริง เช่น สร้างฮิสโตแกรมขนาด $300 \times 300$ เซลล์ เพื่อวาดภาพขนาด $100 \times 100$ พิกเซล โดยแต่ละพิกเซลจะใช้ข้อมูลจากกลุ่มเซลล์ $3 \times 3$ ในฮิสโตแกรมเพื่อคำนวณค่า

นอกจากนี้ยังมีการใช้ Gamma Correction เพื่อให้สีของภาพมีความสว่างและชัดเจนขึ้น ซึ่งเป็นมาตรฐานในซอฟต์แวร์อย่าง Apophysis หากต้องการคุณภาพสูงสุด สามารถใช้ Gamma Correction แยกแต่ละช่องสี (Color Channel) ได้ แต่จะใช้ทรัพยากรการคำนวณสูงมากเนื่องจากฟังก์ชันลอการิทึมทำงานได้ช้า

การประมาณค่าความหนาแน่น (Density Estimation)

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

ปัญหานี้สามารถแก้ไขได้ด้วย Adaptive Density Estimation ซึ่งจะปรับความกว้างของตัวกรอง (Filter) ให้แปรผกผันกับจำนวนตัวอย่างที่มีอยู่ ผลลัพธ์คือบริเวณที่มีตัวอย่างน้อยและมีสัญญาณรบกวนสูงจะถูกทำให้เรียบเนียนขึ้น ในขณะที่บริเวณที่มีตัวอย่างมากและมีสัญญาณรบกวนต่ำจะยังคงความคมชัดไว้ เทคนิคนี้ถูกนำมาใช้ในซอฟต์แวร์ FLAM3 โดยอ้างอิงวิธีการจากงานวิจัยของ Frank Suykens และ Yves D. Willems ในปี ค.ศ. 2000

คำถามที่พบบ่อย

แฟร็กทัลเฟลมแตกต่างจากแฟร็กทัลทั่วไปอย่างไร?

แฟร็กทัลเฟลมแตกต่างจากแฟร็กทัลทั่วไป โดยเฉพาะระบบฟังก์ชันทำซ้ำ (IFS) ใน 3 จุดหลัก คือ การใช้ฟังก์ชันไม่เชิงเส้น, การแสดงผลความหนาแน่นแบบลอการิทึม (Log-density) เพื่อให้เห็นรายละเอียดมากขึ้น และการกำหนดสีตามเส้นทางการทำซ้ำแทนที่จะใช้ความหนาแน่นของจุด

Scott Draves คือใคร?

Scott Draves เป็นผู้คิดค้นอัลกอริทึมแฟร็กทัลเฟลมในปี 1992 ซึ่งเป็นรากฐานให้กับการสร้างงานศิลปะดิจิทัลเชิงคณิตศาสตร์ที่ซับซ้อน

โปรแกรมใดบ้างที่สามารถสร้างแฟร็กทัลเฟลมได้?

ซอฟต์แวร์ที่นิยมใช้ ได้แก่ Apophysis และ FLAM3 ซึ่งพัฒนาต่อยอดมาจากรหัสต้นฉบับของ Scott Draves

ทำไมต้องใช้ Log-density ในการแสดงผล?

การใช้ Log-density ช่วยให้ส่วนของภาพที่มีความหนาแน่นของจุดต่ำมากเมื่อเทียบกับส่วนที่มีความหนาแน่นสูง สามารถแสดงผลออกมาได้ชัดเจน ไม่ถูกกลบด้วยส่วนที่สว่างที่สุด ทำให้ภาพมีรายละเอียดที่ครบถ้วนและสวยงามขึ้น

Adaptive Density Estimation คืออะไร?

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