การเปรียบเทียบการประมาณค่าแบบ Bicubicกับการประมาณค่าแบบ 1 มิติและ 2 มิติบางวิธี จุด สีดำและ สี แดง / เหลือง / เขียว / น้ำเงินสอดคล้องกับจุดที่ประมาณค่าและตัวอย่างที่อยู่ใกล้เคียงตามลำดับ ความสูงของจุดเหนือพื้นดินสอดคล้องกับค่าของจุดเหล่านั้นในทางคณิตศาสตร์ การประมาณค่าแบบไบ คิวบิก (Bicubic Interpolation ) เป็นส่วนขยายของ การประมาณ ค่า แบบ คิวบิกสปลายน์ (Cubic Spline Interpolation ) (ซึ่งเป็นวิธีการใช้การประมาณค่าแบบคิวบิกกับชุดข้อมูล) สำหรับการประมาณ ค่าจุดข้อมูลบน ตารางปกติสองมิติ พื้นผิวที่ได้จากการประมาณค่า (หมายถึงรูปร่างของเคอร์เนล ไม่ใช่ภาพ) จะเรียบกว่าพื้นผิวที่ได้จาก การประมาณค่าแบบไบลิเนียร์ ( Bilinear Interpolation ) หรือ การประมาณค่าแบบ เพื่อนบ้านที่ใกล้ที่สุด (Nearest-neighbor Interpolation ) การประมาณค่าแบบไบคิวบิกสามารถทำได้โดยใช้พหุ นามลากรางจ์ (Lagrange polynomials) คิวบิกสปลายน์ ( Cubic Spline ) หรือ อัลกอริธึมการสังเคราะห์แบบคิวบิก (Cubic Convolution Algorithm)
ในการประมวลผลภาพการประมาณค่าแบบบิคิวบิกมักถูกเลือกใช้มากกว่าการประมาณค่าแบบไบลิเนียร์หรือแบบเพื่อนบ้านที่ใกล้ที่สุดในการปรับขนาดภาพใหม่เมื่อความเร็วไม่ใช่ปัญหา ต่างจากการประมาณค่าแบบไบลิเนียร์ซึ่งพิจารณาเพียง 4 พิกเซล (2×2) การประมาณค่าแบบบิคิวบิกจะพิจารณา 16 พิกเซล (4×4) ภาพที่ปรับขนาดใหม่ด้วยการประมาณค่าแบบบิคิวบิกอาจมีสิ่งผิด ปกติจากการประมาณค่าที่แตกต่างกัน ขึ้นอยู่กับค่า b และ c ที่เลือก
การคำนวณ
การประมาณค่าแบบบิคิวบิกบนรูปสี่เหลี่ยมจัตุรัสที่ประกอบด้วยสี่เหลี่ยมจัตุรัสหน่วย 25 ช่องที่ต่อกัน การประมาณค่าแบบบิคิวบิกตาม การใช้งานของ Matplotlibสีแสดงค่าของฟังก์ชัน จุดสีดำคือตำแหน่งของข้อมูลที่กำหนดไว้ซึ่งถูกประมาณค่า โปรดสังเกตว่าตัวอย่างสีไม่ได้สมมาตรในแนวรัศมี![{\displaystyle [0,4]\times [0,4]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ad39d6c0224c138cc09eaa0ae42be5d8f3e2dd94)
การประมาณค่าแบบ Bilinearบนชุดข้อมูลเดียวกันกับข้างต้น อนุพันธ์ของพื้นผิวไม่ต่อเนื่องกันบนขอบเขตสี่เหลี่ยมจัตุรัส
การประมาณค่าแบบเพื่อนบ้านที่ใกล้ที่สุดบนชุดข้อมูลเดียวกันกับข้างต้นสมมติว่าค่าฟังก์ชันและอนุพันธ์, และเป็นที่ทราบแล้วที่มุมทั้งสี่, , , และของสี่เหลี่ยมจัตุรัสหน่วย พื้นผิวที่ได้จากการประมาณค่าสามารถเขียนได้ดังนี้ 








ปัญหาการประมาณค่าในช่วงประกอบด้วยการกำหนดค่าสัมประสิทธิ์ 16 ตัวเมื่อจับคู่กับค่าฟังก์ชันจะได้สมการสี่สมการ: 





ในทำนองเดียวกัน มีสมการแปดสมการสำหรับอนุพันธ์ในทิศทาง x และ y : 









และสมการสี่สมการสำหรับอนุพันธ์ย่อยแบบผสม : 




นิพจน์ข้างต้นใช้เอกลักษณ์ดังต่อไปนี้: 


กระบวนการนี้จะสร้างพื้นผิวบนสี่เหลี่ยมจัตุรัสหน่วยที่มีความต่อเนื่องและมีอนุพันธ์ต่อเนื่อง จากนั้นจึงสามารถทำการประมาณค่าแบบไบคิวบิกบนตารางปกติ ที่มีขนาดตามอำเภอใจ ได้โดยการต่อพื้นผิวไบคิวบิกดังกล่าวเข้าด้วยกัน โดยต้องแน่ใจว่าอนุพันธ์ตรงกันที่ขอบเขต 
![{\displaystyle [0,1]\times [0,1]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/92f35a051af39d8299688d7c4a63e39ee5f95c8b)
เมื่อจัดกลุ่มพารามิเตอร์ที่ไม่ทราบค่าไว้ในเวกเตอร์ และให้ ระบบสมการข้างต้นสามารถเขียนใหม่เป็นเมทริกซ์สำหรับสมการเชิงเส้นได้ 
![{\displaystyle \alpha =\left[{\begin{smallmatrix}a_{00}&a_{10}&a_{20}&a_{30}&a_{01}&a_{11}&a_{21}&a_{31}&a_{02}&a_{12}&a_{22}&a_{32}&a_{03}&a_{13}&a_{23}&a_{33}\end{smallmatrix}}\right]^{T}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0fd6f651f3dadce77a2d783292b915d0dcdd847e)
![{\displaystyle x=\left[{\begin{smallmatrix}f(0,0)&f(1,0)&f(0,1)&f(1,1)&f_{x}(0,0)&f_{x}(1,0)&f_{x}(0,1)&f_{x}(1,1)&f_{y}(0,0)&f_{y}(1,0)&f_{y}(0,1)&f_{y}(1,1)&f_{xy}(0,0)&f_{xy}(1,0)&f_{xy}(0,1)&f_{xy}(1,1)\end{smallmatrix}}\right]^{T},}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ef927b58762664c061d9a9159bad1c2f1776e55b)

การกลับเมทริกซ์จะให้สมการเชิงเส้นที่มีประโยชน์มากกว่าซึ่ง ช่วยให้สามารถคำนวณได้อย่างรวดเร็วและง่ายดาย 
![{\displaystyle A^{-1}=\left[{\begin{smallmatrix}{\begin{array}{rrrrrrrrrrrrrrrr}1&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0\\0&0&0&0&1&0&0&0&0&0&0&0&0&0&0&0\\-3&3&0&0&-2&-1&0&0&0&0&0&0&0&0&0&0\\2& -2&0&0&1&1&0&0&0&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0&1&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0&0&0&0&0&0&1&0&0&0\\0&0&0&0&0&0&0&0&-3&3&0&0&-2&-1&0&0\\0&0&0&0&0&0&0&0&0&2&-2&0&0&1&1&0&0\\-3 &0&3&0&0&0&0&0&-2&0&-1&0&0&0&0&0\\0&0&0&0&-3&0&3&0&0&0&0&0&-2&0&-1&0\\9&-9&-9&9&6&3&-6&-3&6&-6&3&-3&4&2&2&1\\-6&6&6&-6&-3&-3&3&3&-4&4&-2&2&-2&-2&-1&-1\\2&0&-2&0&0&0&0&0& 1&0&1&0&0&0&0&0\\0&0&0&0&2&0&-2&0&0&0&0&0&1&0&1&0\\-6&6&6&-6&-4&-2&4&2&-3&3&-3&3&-2&-1&-2&-1\\4&-4&-4&4&2&2&-2&-2&-2&2&-2&1&1&1&1\end{array}}\end{smallmatrix}}\right],}](https://wikimedia.org/api/rest_v1/media/math/render/svg/fdf957521e2c463578afe8aa16b7f8f64a009a8f)

อาจมีรูปแบบเมทริกซ์ที่กระชับกว่าสำหรับสัมประสิทธิ์ 16 ตัว: หรือ โดยที่ 


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









![{\displaystyle x=\left[{\begin{smallmatrix}f(0,0)&f(1,0)&f(0,1)&f(1,1)&\Delta xf_{x}(0,0)&\Delta xf_{x}(1,0)&\Delta xf_{x}(0,1)&\Delta xf_{x}(1,1)&\Delta yf_{y}(0,0)&\Delta yf_{y}(1,0)&\Delta yf_{y}(0,1)&\Delta yf_{y}(1,1)&\Delta x\Delta yf_{xy}(0,0)&\Delta x\Delta yf_{xy}(1,0)&\Delta x\Delta yf_{xy}(0,1)&\Delta x\Delta yf_{xy}(1,1)\end{smallmatrix}}\right]^{T},}](https://wikimedia.org/api/rest_v1/media/math/render/svg/16cf673b5dac2b4e6a784256efe13c774ee6b2fd)









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




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







ในกรณีที่จุดข้อมูลบริเวณขอบของชุดข้อมูลขาดหายไป สามารถประมาณค่าจุดที่ขาดหายไปได้ด้วยวิธีการหลายวิธี วิธีที่ง่ายและใช้กันทั่วไปคือ การสมมติว่าความชันจากจุดที่มีอยู่ไปยังจุดเป้าหมายยังคงต่อเนื่องโดยไม่เปลี่ยนแปลง และใช้สมมติฐานนี้ในการคำนวณค่าสมมติสำหรับจุดที่ขาดหายไป
อัลกอริทึมการคอนโวลูชันแบบไบคิวบิก
เคอร์เนลคอนโวลูชัน
เคอร์เนลคอนโวลูชัน (ขยายใน 2 มิติ)การประมาณค่าแบบ Bicubic spline จำเป็นต้องแก้ระบบสมการเชิงเส้นที่อธิบายไว้ข้างต้นสำหรับแต่ละเซลล์กริด ตัว ประมาณค่าที่มีคุณสมบัติคล้ายกันสามารถหาได้โดยการใช้การสังเคราะห์ (convolution)กับเคอร์เนลต่อไปนี้ในทั้งสองมิติ: โดยที่มักจะตั้งค่าเป็น −0.5 หรือ −0.75 โปรดทราบว่าและ สำหรับจำนวนเต็มที่ไม่เป็น ศูนย์ ทั้งหมด




แนวทางนี้ได้รับการเสนอโดย Rifman จาก TRW Systems Group โดยมุ่งเป้าไปที่ข้อมูลภาพจาก ERTS (Earth Resources Technology Satellite ซึ่งต่อมาคือLandsat 1 ) [ 1 ] [ 2 ] [ 3 ] ในตอนแรกค่าถูกกำหนดไว้ที่ -1 แต่ต่อมาได้รับการกำหนดพารามิเตอร์โดย Simon จากบริษัทเดียวกัน ทำให้ค่า -0.5, -0.75 และ -1.0 มีความหมาย [ 4 ] อย่างไรก็ตาม ข้อเสนอเหล่านี้ไม่ได้นำเสนอขั้นตอนการหาค่าหรือสูตรอย่างเพียงพอ ดังนั้น Keys จึงเสนอใหม่ในรูปแบบที่สมบูรณ์ในภายหลัง โดยแสดงให้เห็นว่าด้วยค่าจะทำให้เกิดการลู่เข้าแบบลูกบาศก์เมื่อพิจารณาจากช่วงเวลาการสุ่มตัวอย่างของฟังก์ชันดั้งเดิม [ 5 ]

เคอร์เนลคอนโวลูชันได้มาดังต่อไปนี้[ 6 ] : 

ภายใต้เงื่อนไข: , , และสำหรับอนุพันธ์อันดับแรก: , , เราจะได้; 











เมื่อแก้ระบบสมการข้างต้นแล้วจะได้ผลลัพธ์ดังนี้ และสมการข้างต้น 

สัญกรณ์เมทริกซ์
เคอร์เนลคอนโวลูชันถูกเลื่อนจาก 0 เป็น 1 สำหรับสัญกรณ์เมทริกซ์หากเราใช้สัญลักษณ์เมทริกซ์ เราสามารถแสดงสมการในรูปแบบที่เป็นมิตรมากขึ้นได้: สำหรับระหว่าง 0 และ 1 สำหรับมิติเดียว[ 7 ]โปรดทราบว่าสำหรับการแทรกสอดการสังเคราะห์ลูกบาศก์แบบ 1 มิติ ต้องใช้จุดตัวอย่าง 4 จุด สำหรับการสอบถามแต่ละครั้ง จะมีจุดตัวอย่างสองจุดอยู่ทางด้านซ้ายและสองจุดอยู่ทางด้านขวา จุดเหล่านี้มีดัชนีตั้งแต่ -1 ถึง 2 ในข้อความนี้ ระยะห่างจากจุดที่มีดัชนี 0 ไปยังจุดสอบถามจะแสดงด้วยที่นี่ 


เนื่องจากจึงตรงกับเส้นโค้ง Catmull-Rom [ 7 ]ดังนั้น การสอดแทรกแบบ bicubic โดยตั้งค่าเป็นจึงบางครั้งเรียกว่า "การสอดแทรกแบบ Catmull-Rom" [ 8 ]


สำหรับสองมิติที่ใช้ครั้งแรกและอีกครั้งใน: 

![{\displaystyle {\begin{aligned}b_{-1}&=p(t_{x},f_{(-1,-1)},f_{(0,-1)},f_{(1,-1)},f_{(2,-1)}),\\[1ex]b_{0}&=p(t_{x},f_{(-1,0)},f_{(0,0)},f_{(1,0)},f_{(2,0)}), \\[1ex]b_{1}&=p(t_{x},f_{(-1,1)},f_{(0,1)},f_{(1,1)},f_{(2,1)}),\\[1ex]b_{2}&=p(t_{x},f_{(-1,2)},f_{(0,2)},f_{(1,2)},f_{(2,2)}),\end{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f7b7deeb9b31b1fe3ba169c7802e1fc0480a4256)

ความต่อเนื่องเชิงอนุพันธ์
ตามนิยามแล้ว ฟังก์ชันนี้มีความต่อเนื่องในอนุพันธ์อันดับแรก และสามารถตรวจสอบได้ง่ายโดยใช้สัญลักษณ์เมทริกซ์ต่อไปนี้

ดังนั้น ฟังก์ชันนี้จึงมีความต่อเนื่องในอนุพันธ์อันดับแรก

ดังนั้น ฟังก์ชันนี้จึงไม่ต่อเนื่องในอนุพันธ์อันดับสอง
การเปรียบเทียบกับวิธีการอื่นๆ
ด้านล่างนี้คือการเปรียบเทียบฟังก์ชันเคอร์เนลสำหรับแต่ละวิธี:
| วิธี | ฟังก์ชันเคอร์เนล | ฟังก์ชันเคอร์เนล (การขยายแบบ 2 มิติ) |
|---|
| เพื่อนบ้านที่ใกล้ที่สุด |  |  |
| การแทรกสอดเชิงเส้นสองมิติ |  |  |
| การแทรกสอดแบบไบคิวบิก |  |  |
ใช้ในกราฟิกคอมพิวเตอร์
อัลกอริทึมไบคิวบิก (Bicubic algorithm) มักใช้สำหรับการปรับขนาดภาพและวิดีโอเพื่อการแสดงผล (ดูการสุ่มตัวอย่างบิตแมป ใหม่) อัลกอริทึมนี้รักษาความละเอียดของภาพได้ดีกว่าอัลกอริทึม ไบลิเนีย ร์ (Bilinear algorithm) ทั่วไป
อัลกอริทึม Bicubic ยังใช้สำหรับการลดขนาดภาพ ด้วย แต่เนื่องจากการสุ่มตัวอย่างใหม่ระหว่างการลดขนาดจะแตกต่างจากผลของการซูมออกในเลนส์จริง วิธีการอื่นอาจเหมาะสมกว่า[ 9 ]
ผลกระทบของพารามิเตอร์ "a"
ครึ่งล่างของรูปนี้เป็นการขยายภาพครึ่งบน แสดงให้เห็นว่าความคมชัดที่ปรากฏของเส้นด้านซ้ายเกิดขึ้นได้อย่างไร การประมาณค่าแบบบิคิวบิกทำให้เกิดการเกินขอบเขต ซึ่งเพิ่มความคมชัดอย่างไรก็ตาม เนื่องจากส่วนโค้งด้านลบในเคอร์เนล ทำให้เกิดการโอเวอร์ชูต (ฮาโล) ซึ่งอาจทำให้เกิดการตัดขอบและเป็นสิ่งผิดปกติ (ดูเพิ่มเติมที่สิ่งผิดปกติแบบริงกิ้ง ) แต่จะเพิ่มความคมชัด (ความคมชัดที่ปรากฏ) และอาจเป็นที่ต้องการได้ ผลกระทบนี้จะมากขึ้นเมื่อพารามิเตอร์เป็นหรือ มากกว่า เมื่อ เป็น




เมื่อผลลัพธ์การแทรกสอดจะตรงกับการประมาณค่าเทย์เลอร์จนถึงอนุพันธ์อันดับสอง (ไม่รวมพจน์ที่เหลือ) ของภาพต้นฉบับ ( ฟังก์ชันต่อเนื่องก่อนการสุ่มตัวอย่าง) [ 10 ] [ 11 ] ตัวอย่างที่ชัดเจนของผลกระทบนี้คือเมื่อภาพต้นฉบับเป็นฟังก์ชันเชิงเส้น (ภาพเกรเดียนต์แบบง่าย) และผลลัพธ์การแทรกสอดจะเป็นฟังก์ชันเชิงเส้นก็ต่อเมื่อ เท่านั้นตัวอย่างเช่น ถ้าอินพุตคือ ผลลัพธ์การแทรกสอดคือ และจะเป็นฟังก์ชันเชิงเส้น (พจน์กำลังสองและกำลังสามเป็น 0) ก็ต่อเมื่อเท่านั้น[ 12 ]




 |  |  |
|---|
 |  |  |
ด้านล่างนี้คือภาพไล่ระดับสีแบบง่ายที่ขยายใหญ่ขึ้น 16 เท่า และส่วนหนึ่งของภาพทดสอบมาตรฐาน "ช่างกล้อง" [ 13 ]ที่ขยายใหญ่ขึ้น 8 เท่า[ 14 ]แถบแนวตั้งในภาพแรกและลวดลายด่างเทียมรอบขมับในภาพหลังเป็นสิ่งประดิษฐ์ที่เกิดจากเอฟเฟกต์ที่กล่าวถึงข้างต้น
 |  |  | การประมาณค่าแบบเพื่อนบ้านที่ใกล้ที่สุด(เพื่อเปรียบเทียบ) |
|---|
 |  |  |  |
 |  |  |  |
โปรดทราบว่าเมื่ออนุพันธ์อันดับสองของเคอร์เนลการสังเคราะห์จะต่อเนื่องที่[ 12 ]แต่ผลลัพธ์การแทรกสอดไม่มีอนุพันธ์อันดับสองที่ต่อเนื่อง นอกจากนี้ เมื่ออนุพันธ์ของเคอร์เนลการสังเคราะห์จะตรงกับอนุพันธ์ของฟังก์ชัน sincที่[ 12 ]แต่สิ่งนี้ไม่มีความสำคัญอื่นใดนอกจากใช้เปรียบเทียบกับ การแทรก สอด sinc



ตำแหน่งการสุ่มตัวอย่างใหม่
เมื่อขยายภาพด้วยจำนวนเต็มเท่า มักจะตั้งตำแหน่งการสุ่มตัวอย่างใหม่ระหว่างพิกเซลของภาพอินพุตเพื่อให้จุดศูนย์ถ่วงของภาพที่ขยายแล้วไม่เลื่อนเมื่อเทียบกับภาพอินพุต (ดูภาพด้านซ้ายด้านล่าง) ในทางกลับกัน ยังมีวิธีการตั้งตำแหน่งการสุ่มตัวอย่างใหม่ให้ทับซ้อนกับพิกเซลของภาพอินพุต (ดูภาพด้านขวาด้านล่าง) วิธีนี้ทำให้มั่นใจได้ว่าการแปลงสามารถย้อนกลับได้[ 15 ]
ตัวอย่างตำแหน่งการสุ่มตัวอย่างใหม่ต้องใช้พิกเซลสองพิกเซลของภาพอินพุตทางด้านซ้ายและขวา (หรือบนและล่าง) สำหรับการแทรกสอด เนื่องจากขอบด้านนอกของภาพไม่ถูกต้อง จึงต้องใช้การขยายขอบเขต วิธีการขยายขอบเขตจะแตกต่างกันไปตามการใช้งาน ตัวอย่างต่อไปนี้คือการคัดลอกและขยายขอบเขตพิกเซลที่อยู่ด้านนอกสุด[ 15 ]
ตัวอย่างการประมาณค่าโดยการคัดลอกค่าพิกเซลที่อยู่ด้านนอกสุดดูเพิ่มเติม
ลิงก์ภายนอก
- การประยุกต์ใช้การประมาณค่าในช่วงกับตัวอย่างระดับความสูง
- ทฤษฎีการแทรกสอด
- คำอธิบายและการใช้งานการแทรกสอดแบบ (bi)cubic ในภาษา Java/C++
- ฟังก์ชันในเวิร์กชีต Excel สำหรับการประมาณค่าแบบ Bicubic Lagrange