4.3 การย่อ – ขยายภาพ ( Scaling)

 

 

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

            เมื่อใดก็ตามที่มีการย่อหรือขยายภาพ จะต้องมีจุด จุดหนึ่งซึ่งจะเรียกว่า fixed point ของการย่อขยายภาพซึ่งใช้สำหรับเป็นจุดอ้างอิง

            ถ้าให้จุดกำเนิด(0,0) เป็น fixed point จุด (X,Y) ใด ๆ ของภาพ ก็จะสามารถย่อหรือขยายได้โดยการคูณด้วย Sx factor สำหรับทิศทางในแกน X และ Sy factor สำหรับทิศทางในแกน Y ก็จะได้จุดใหม่ ( X’,Y’) ดังนี้

                        X’ = X * Sx

                        Y’ = Y * Sy

            จากสมการการย่อ - ขยายภาพดังกล่าว สามาเขียนในรูปแบบของ Matrix ได้ดังนี้

                                                                                                Sx       0          0

                        [ X’            1] =  [  X        Y         1]        0          Sy       0

                                                                                                0          0          1

 

                                    Sx       0          0

            เรียก                0          Sy       0          ว่า “ Transformation Matrix สำหรับการย่อ – ขยาย ”

                                    0          0          1

 

ถ้า Sx ไม่เท่ากับ Sy  ผลก็คือภาพที่ได้จากการย่อหรือขยายจะเกิดการผิดเพี้ยนไปจากภาพเดิม ถ้า Scaling factor มากกว่า 1 ภาพที่ถูกขยายแล้ว จะถูกเคลื่อนย้ายห่างออกไปจาก fixed point  ถ้า Scaling factor  น้อยกว่า 1 ภาพที่ถูกย่อแล้ว จุถูกเคลื่อนย้ายเข้ามาใกล้กับ fixed point มากขึ้น ดังรูป

 

 

            Fixed point สำหรับการย่อหรือขยายภาพอาจจะไม่ใช่จุดกำเนิดก็ได้ ถ้าเป็นจุดใด ๆ จะต้องใช้ 3 ขั้นตอนดังนี้

1.      ย้าย Fixed point (Xf,Yf)  ไปยังจุดกำเนิด (0,0) โดยนำ Transformation Matrix  สำหรับการย้าย มาคูณกับจุดทุกจุดที่ใช้นิยามภาพ และให้  Tx = -Xf และ Ty = -Yf  เมื่อย้ายแล้ว ทุกจุด(X,Y) ที่ใช้นิยามภาพก็จะถูกย้ายไปยังจุดใหม่ (X’,Y’) ด้วย

 

                                                                                    1          0          0

            [ X’            1] = [ X          Y         1]        0          1          0

                                                                                    -Xf      -Yf      1

           

2.      ทำการย่อหรือขยายภาพโดยที่ Fixed point อยู่ที่จุดกำเนิด(0,0) เป็นระยะ Sx , Sy ทำได้โดยการนำ Transformation Matrix สำหรับการย่อ - ขยายมาคูณกับจุดทุกจุดที่ได้จากข้อ 1 ได้จุดใหม่เป็น  (X”,Y”)

 

                                                                                                            Sx       0          0

                        [ X”           1] =  [               1]                    0          Sy       0

                                                                                                            0          0          1

 

3.      ย้าย Fixed point จากจุดกำเนิด(0,0) กลับไปยังจุดเดิม (Xf,Yf) จะได้จุดใหม่ของทุกจุดที่นิยามภาพเป็น (X*,Y*)

 

                                                                                                1          0          0

            [ X*    Y*       1] = [ X”               1]                    0          1          0

                                                                                                Xf       Yf       1

 

            จาก 3 ขั้นตอนข้างต้นเราอาจหาจุดใหม่โดยการประยุกต์ดังนี้ คือ นำ Transformation Matrix มาคูณกันก่อน

 

                        1          0          0                      Sx       0          0                      1          0          0

                        0          1          0                      0          Sy       0                      0          1          0

                        -Xf      -Yf      1                      0          0          1                      Xf       Yf       1

 

                        Sx                   0                      0

            =          0                      Sy                   0

                        (1-Sx)Xf        (1-Sy)Yf        1

 

            จากนั้นนำ Transformation Matrix ใหม่ที่ได้มาคูณกับจุดทุกจุดที่นิยามภาพ

 

                                                                                    Sx                   0                      0

            [X’             1] = [X           Y         1]        0                      Sy                   0

                                                                                    (1-Sx)Xf        (1-Sy)Yf        1

 

            ก็จะได้ภาพที่ถูกย่อหรือขยายตามต้องการ ทั้งนี้ต้องคูณ Transformation Matrix ตามลำดับขั้นตอนของการ Transform เนื่องจากถ้าคูณผิดลำดับหรือสลับกันแล้วภาพที่ได้ก็จะผิดไปจากความเป็นจริง

 

 

Back  Next