Perspective transformation is the projection of points onto the image plane along lines that emanate from a single point, called the center of projection.
ขั้นแรก โหลดภาพตั้งต้นเข้าตัวแปร img
First, load a source image to img
- Image<Bgr, byte> img = new Image<Bgr, byte>(image_path);
Source image |
ขั้นที่สอง ระบุพิกัดจุดหรือมุมทั้งสี่ภายในภาพตั้งต้น
Second, specify four points/corners within source image
- PointF[] old_corner = new PointF[4];
- old_corner[0] = new PointF(90, 80);
- old_corner[1] = new PointF(39, 262);
- old_corner[2] = new PointF(294, 281);
- old_corner[3] = new PointF(231, 70);
ขั้นที่สาม ระบุพิกัดจุดหรือมุมทั้งสี่ภายในภาพปลายทาง
Third, specify four points/corners within destination image
- PointF[] new_corner = new PointF[4];
- new_corner[0] = new PointF(0, 0);
- new_corner[1] = new PointF(0, 350);
- new_corner[2] = new PointF(350, 350);
- new_corner[3] = new PointF(350, 0);
ขั้นต่อไป คำนวณเมทริกซ์การแปลง
Next, calculate transformation matrix
- HomographyMatrix mywarpmat = CameraCalibration.GetPerspectiveTransform(old_corner, new_corner);
ขั้นต่อไป แปลงจากภาพตั้งต้นไปเป็นภาพปลายทาง โดยใช้เมทริกซ์การแปลง ในกรณีนี้ ภาพตั้งต้นและภาพปลายทางเป็นภาพเดียวกัน
Next, transform source image to destination image, in this case, source image and destination image are the same - img = img.WarpPerspective(mywarpmat, INTER.CV_INTER_LINEAR, WARP.CV_WARP_FILL_OUTLIERS, new Bgr());
ถ้าภาพปลายทางต้องถูกตัดให้กว้าง width และสูง height ให้ใช้
If destination image must be cropped to width and height, use
- img = img.WarpPerspective(mywarpmat, width, height, INTER.CV_INTER_LINEAR, WARP.CV_WARP_FILL_OUTLIERS, new Bgr());
ขั้นสุดท้าย แสดงภาพปลายทางที่ทำการแปลงเรียบร้อยแล้ว
Finally, show a destination image - CvInvoke.cvShowImage("img", img.Ptr);
- CvInvoke.cvWaitKey(0);
Destination image |
No comments:
Post a Comment