PDA

View Full Version : ตอน : มาทดลองเข้าใจหลักการทำภาพเบลอด้วยหลักการทาง Image Proc



nprotech
12-05-2005, 10:50 AM
ถ้าเพื่อน ๆ สงสัยว่าการทำภาพเบลอทำอย่างไร.. คงจะยุ่งยากมาก ๆ เลยใช่มั้ย ?
คำตอบ อาจจะไม่ใช่ก็ได้ครับ..
บางทีสมการคณิตศาสตร์ก็ชวนปวดหัว จนทำให้บางคนเลิกคิดเลิกสนใจไปเลย..
เอาล่ะ วันนี้ผมจะพาไปทำความเข้าใจหลักการทำภาพเบลอ ด้วยภาษาง่าย ๆ สไตล์ไพธอนกันครับ..

หลักการง่ายที่สุด คือ ให้อ่านค่าสีปัจจุุบันออกมา แล้วอ่านค่าสีที่อยู่ด้านบน /ล่าง / ซ้าย และขวา ออกมา.. จากนั้นเอาค่าทั้งห้ามาบวกกัน แล้วหารด้วยห้า จากนั้นนำผลลัพธ์ที่ได้ใส่คืนลงไปในตำแหน่งปัจจุบันของภาพ..

รายละเอียดฟัง ๆ อาจจะสับสนได้ในตอนแรก ๆ เดี๋ยวลองดูตัวอย่างแล้วจะทำให้เข้าใจมากขึ้นครับ !!

def blur(s):
for i in range(1,s.size[0]-10):
for j in range(1,s.size[1]-10):
l = list(s.getpixel((i-1,j)))
r = list(s.getpixel((i+1,j)))
t = list(s.getpixel((i,j-1)))
b = list(s.getpixel((i,j+1)))
c = list(s.getpixel((i,j)))
red = (l[0]+r[0]+t[0]+b[0]+c[0])/5.0
green = (l[1]+r[1]+t[1]+b[1]+c[1])/5.0
blue = (l[2]+r[2]+t[2]+b[2]+c[2])/5.0
tmp = (red,green,blue)
s.putpixel((i,j),tmp)
return s
>>> p = Image.open("c:tempchakrit.bmp")
>>> m = blur(p)
>>> m.save("c:tempm.bmp")

ในขั้นแรกโหลดโมดูล Image เข้ามาใช้งานครับ..!!
จากนั้นวิ่งเข้าไปอ่านทีละเม็ดสี (พิกเซล) จากซ้ายไปขวา แล้วค่อย ๆ เลื่อนลงมาทีละเส้นจนถึงแนวด้านล่างสุดของภาพ..
ในระหว่างนั้น อ่านสีออกมาห้าสี คือตำแหน่งปัจจุบัน ตำแหน่งซ้ายมือ / ขวามือ / ด้านบน และด้านล่าง ตามลำดับ
นำค่าสีทั้งห้ามาหาค่าเฉลี่ย จากนั้นป้อนกลับเข้าไปตำแหน่งเดิมด้วยคำสั่ง setpixel()

ตัวอย่างนี้ภาพต้นฉบับชื่อ c:tempchakrit.bmp และภาพที่ผ่านการทำเบลอแล้ว ชื่อ c:tempm.bmp ถ้าลองเอาภาพที่ผ่านการทำเบลอมาเป็นภาพต้นฉบับจะทำให้ภาพนั้นเบลอยิ่งขึ้น..

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

สำหรับวันนี้ เชื่อว่าเพื่อน ๆ ทุกคนคงจะมีความสุขกับการศึกษาสิ่งใหม่ ๆ กับผม หนุ่ยเอ็นโปรเท็คไทยแลนด์ สำหรับวันนี้พบกันแค่นี้พบกันใหม่โอกาสหน้าครับ .. สวัสดี !!