Saturday, December 1, 2012

การประมวลผลแต่ละพิกเซลของรูป

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

out = im.point(function)

ตัวอย่างเช่น หากเราต้องการปรับค่า contrast ของรูป ซึ่งทำได้โดยการคูณแต่ละพิกเซลด้วยค่าคงที่ค่าหนึ่ง เช่น 1.5 ก็จะใช้คำสั่ง

out = im.point(lambda i: i*1.5)

(หมายเหตุ lambda เป็นเทคนิคการเขียนฟังก์ชันเฉพาะกิจของ python เรียกว่า anonymous functions เพื่อที่เราจะไม่ต้องเขียนฟังก์ชันใหม่แยกออกมา)

ตัวอย่างผลลัพธ์ที่เราต้องการ





โค้ดของโปรแกรมก็เพิ่มเติมจากเดิมดังนี้
เมนู
        processMenu.add_command(label="Contrast",command=self.imgContrast)

method
    def imgContrast(self):
        self.im = self.im.point(lambda i: i*1.5)
        self.showImage()

หมายเหตุ
1. คำสั่ง Image.point มีผู้ระบุไว้ว่าเร็วกว่าคำสั่ง Image.load ในการประมวลผลพิกเซล หากมีโอกาสจะได้ทดลองวัดความเร็วเปรียบเทียบกันครับ
2. หากต้องการแยกเป็นฟังก์ชันออกมาต่างหาก ก็ทำได้โดย


    def myContrast(self,i):
        return i*1.5

    def imgContrast(self):
        self.im = self.im.point(self.myContrast)
        self.showImage()

No comments:

Post a Comment