Thursday, April 1, 2010

Grayscale Image Negative

ในบทความต่อไปนี้เราจะทดลองประมวลผลภาพในระดับสีเทา (grayscale) โดยทำการกลับสี (image negative) นั่นคือ ปกติแล้วระดับสีเทาของภาพแบบ 8 บิตจะอยู่ในช่วง 0-255 ดังนั้นการกลับสีก็คือการหาค่า 255-ค่าพิกเซล นั่นเอง ตัวอย่างเช่น

หากค่าพิกเซลเป็น 0 จะกลายเป็น 255
หากค่าพิกเซลเป็น 255 จะกลายเป็น 0
หากค่าพิกเซลเป็น 100 จะกลายเป็น 155

ลองพิจารณารหัสโปรแกรมดังต่อไปนี้


ผลลัพธ์


คำอธิบาย
ในตัวอย่างนี้ เราต้องการโหลดรูปในรูปแบบ grayscale ดังนั้นในคำสั่ง cvLoadImage เราจึงใช้พารามิเตอร์เพิ่มคือ CV_LOAD_IMAGE_GRAYSCALE เพื่อบังคับให้รูปที่ได้เป็นแบบเฉดสีเทาเท่านั้น

โดยทั่วไปแล้ว คำสั่ง cvLoadImage จะมีพารามิเตอร์ที่เป้นไปได้สามค่าคือ
  • CV_LOAD_IMAGE_COLOR the loaded image is forced to be a 3-channel color image
  • CV_LOAD_IMAGE_GRAYSCALE the loaded image is forced to be grayscale
  • CV_LOAD_IMAGE_UNCHANGED the loaded image will be loaded as is.
จากนั้นเรามีการตรวจสอบว่าสามารถโหลดรูปได้หรือไม่ โดย


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

ดังนั้น ในการจัดการแต่ละพิกเซลของรูปให้เป็นค่า negative เราจึงจะใช้รหัสโปรแกรม


เมื่อ ptr คือพอยน์เตอร์ที่ชี้ไปยังแถวแรกของรูป และตำแหน่งพิกเซลใดๆในรูป สามารถคำนวณได้จาก
rc = (r*img->widthStep) + c;
เมื่อ r และ c คือแถวและหลักของรูปตามลำดับ

ที่มา:
1. http://opencv.willowgarage.com/documentation/c/reading_and_writing_images_and_video.html#cvLoadImage
2. http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/index.html

No comments:

Post a Comment