บทที่ 5 การระบายสี (Filling)

            การระบายสีนั้นมีเงื่อนไขอยู่ว่ารูปทรงที่ต้องการระบายนั้นจะต้องเป็นรูปปิด และบาง Algorithm รูปทรงที่จะระบายนั้นจะต้องมีขอบหนาพอที่จะไม่ทำให้สีหลุดออกไปจากภาพ ซึ่งมี Algorithm สำหรับการระบายสีอยู่หลาย Algorithm แต่ในที่นี้จะพิจารณาเพียง Algorithm เดียวคือ Flood Fill Algorithm

            Flood Fill Algorithm

หลักการของ Flood Fill Algorithm มีอยู่ว่า รูปทรงที่ต้องการระบายจะต้องมีขอบที่หนาพอที่จะไม่ทำให้สีหลุดออกไปจากภาพได้ และจุดแรกที่ต้องการจะ flll เรียกว่า seed point โดย seed point นี้จะเป็นจุดใดก็ได้แต่ต้องอยู่ในภาพนั้น เท่านั้น

ขั้นตอนการระบายทำได้ดังนี้

1.       ระบายจุดแรก หรือ seed point

2.      ระบาย 4 จุดรอบ seed point (4_connected)

 

            หรือ 8 จุดรอบ seed point (8_connected)

 

3.      จุดที่ 1 จากข้อ 2 จะกลายเป็น seed point ของรอบใหม่ โดยมีเงื่อนไขอยู่ว่า จะไม่ระบายจุดที่ระบายแล้วและจะไม่ระบายขอบของภาพ

4.      การระบายจะเป็นในลักษณะ recursive นั่นคือ จะทำการระบายจุดที่ 1 ต่อไปเรื่อย ๆจนกระทั่งจนถึงขอบของวัตถุแล้วจึงจะกลับมาระบายจุดที่เหลือซึ่งยังรอเป็น seed point ต่อไป

 

Flood Fill Algorithm

Void  Flood_Fill4(point  x,y;Color  fill_color,boundary_color)

{

        present_color = get_Pixel(x,y);

        if (present_color != fill_color) &&(present_color != boundary_color)

        {

             Fill(x,y,fill_color);

             Flood_Fill(x-1,y,fill_color,boundary_color);

             Flood_Fill(x,y+1,fill_color,boundary_color);

             Flood_Fill(x+1,y,fill_color,boundary_color);

             Flood_Fill(x,y-1,fill_color,boundary_color);

        }

}

 

 

 

Back Next