วิธี dedisort รูปภาพโดยไม่สูญเสียพิกเซลโดยใช้ opencv

ดังที่เราทุกคนรู้ เราสามารถใช้ฟังก์ชัน cv::getOptimalNewCameraMatrix() กับ alpha = 1 เพื่อรับ CameraMatrix ใหม่ จากนั้นเราใช้ฟังก์ชัน cv::undistort() กับ CameraMatrix ใหม่ สามารถรับภาพได้หลังจากการบิดเบือนภาพ อย่างไรก็ตาม ฉันพบว่าภาพหลังจากการบิดเบี้ยวมีขนาดใหญ่เท่ากับภาพต้นฉบับและบางส่วนของภาพหลังจากการบิดเบี้ยวถูกปกคลุมไปด้วยสีดำ ดังนั้นคำถามของฉันคือ :หมายความว่าพิกเซลภาพต้นฉบับหายไปหรือไม่ และมีวิธีใดบ้างที่จะหลีกเลี่ยงการสูญเสียพิกเซลหรือรับภาพที่ใหญ่กว่าภาพต้นฉบับด้วย opencv

cv::Mat NewKMatrixLeft = cv::getOptimalNewCameraMatrix(KMatrixLeft,DistMatrixLeft           ,cv::Size(image.cols,image.rows),1);

cv::undistort(image, show_image, KMatrixLeft, DistMatrixLeft,NewKMatrixLeft);

ขนาดของรูปภาพและ show_image มีทั้ง 640*480 แต่จากมุมมองของฉัน ขนาดของรูปภาพหลังจากการบิดเบี้ยวควรใหญ่กว่า 640*480 เพราะบางส่วนไม่มีความหมาย ขอบคุณ!


person Jacky    schedule 28.04.2019    source แหล่งที่มา


คำตอบ (1)


เพื่อแก้ไขความบิดเบี้ยว โดยทั่วไปคุณต้องย้อนกระบวนการที่ทำให้เกิดการบิดเบือนครั้งแรก ซึ่งหมายความว่าพิกเซลถูกยืดและแบนไปตามทิศทางต่างๆ เพื่อแก้ไขการบิดเบือน ในบางกรณี การดำเนินการนี้จะย้ายพิกเซลออกจากขอบภาพ ใน OpenCV สิ่งนี้ได้รับการจัดการโดยการแทรกพิกเซลสีดำ ไม่มีอะไรผิดปกติกับแนวทางนี้ จากนั้นคุณสามารถเลือกวิธีครอบตัดเพื่อลบพิกเซลสีดำที่ขอบได้

person Paul92    schedule 29.04.2019