通过Exif(xmp)数据取消扭曲DJI Phantom 4 RTK图像

时间:2018-11-28 03:01:59

标签: opencv distortion drone

Phantom 4 RTK照片的XMP信息中的DewarpData值在相机信息(相机固有)中意味着什么?

drone-dji:DewarpData =“ 2018-03-13; 3659.780000000000,3653.170000000000,-7.710000000000,45.900000000000,-0.269478000000,0.115681000000,-0.000087561900,-0.000306177000,-0.035762800000”
所有照片的DewarpData的值都相同。

Phantom 4 RTK product web page

Disable the distortion correction would have Phantom 4 RTK’s camera capture the unedited image with the fisheye effect.
The lens distortion parameters were all pre-measured.
These parameters would all be saved in “DewarpData” under the XMP field for every image taken.
You can also input these parameters manually to calibrate the image distortion with the third-party software.

我认为也许可以使用该值来校正失真,但是计算公式是什么?
它是可以用于ImageMagick convert barrelOpenCV initUndistortRectifyMap的值吗?

这张照片
https://drive.google.com/file/d/1C0gyXr7HQUsEx5WRLmiqex9M-rIu2SSI/view?usp=sharing

这是xmp数据的一部分

drone-dji: AbsoluteAltitude = "+116.56"
drone-dji: RelativeAltitude = "+69.95"
drone-dji: GpsLatitude = "43.36511377"
drone-dji: GpsLongtitude = "141.81345593"
drone-dji: GimbalRollDegree = "+0.00"
drone-dji: GimbalYawDegree = "-79.00"
drone-dji: GimbalPitchDegree = "-89.90"
drone-dji: FlightRollDegree = "-2.50"
drone-dji: FlightYawDegree = "-78.60"
drone-dji: FlightPitchDegree = "-4.50"
drone-dji: FlightXSpeed = "+0.50"
drone-dji: FlightYSpeed = "-2.90"
drone-dji: FlightZSpeed = "+0.00"
drone-dji: CamReverse = "0"
drone-dji: GimbalReverse = "0"
drone-dji: SelfData = "Undefined"
drone-dji: CalibratedFocalLength = "3666.666504"
drone-dji: CalibratedOpticalCenterX = "2432.000000"
drone-dji: CalibratedOpticalCenterY = "1824.000000"
drone-dji: RtkFlag = "50"
drone-dji: RtkStdLon = "0.01274"
drone-dji: RtkStdLat = "0.01122"
drone-dji: RtkStdHgt = "0.02394"
drone-dji: DewarpData = " 2018-03-13;3659.780000000000,3653.170000000000,-7.710000000000,45.900000000000,-0.269478000000,0.115681000000,-0.000087561900,-0.000306177000,-0.035762800000"
drone-dji: DewarpFlag = "0"

tiff:Orientation = "1"
tiff:XResolution = "72/1"
tiff:YResolution = "72/1"
tiff:ResolutionUnit = "2"
tiff:YCbCrPositioning = "1"
tiff:Make = "DJI"
tiff:Model = "FC6310R"

exif:ColorSpace = "1"
exif:CompressedBitsPerPixel = "7581493/2217984"
exif:PixelXDimension = "4864"
exif:PixelYDimension = "3648"
exif:ExposureTime = "1562/1000000"
exif:FNumber = "400/100"
exif:ExposureProgram = "4"
exif:ShutterSpeedValue = "-9312/-1000"
exif:ApertureValue = "400/100"
exif:ExposureBiasValue = "0/32"
exif:MaxApertureValue = "297/100"
exif:SubjectDistance = "0/100"
exif:MeteringMode = "2"
exif:LightSource = "1"
exif:FocalLength = "880/100"
exif:ExposureIndex = "0/0"
exif:CustomRendered = "0"
exif:ExposureMode = "0"
exif:WhiteBalance = "1"
exif:DigitalZoomRatio = "0/0"
exif:FocalLengthIn35mmFilm = "24"
exif:SceneCaptureType = "0"
exif:GainControl = "0"
exif:Contrast = "0"
exif:Saturation = "0"
exif:Sharpness = "0"
exif:SubjectDistanceRange = "0"
exif:GPSAltitudeRef = "0"
exif:GPSAltitude = "116560/1000"
exif:DateTimeOriginal = "2018-10-19T12:02:34"
exif:ISOSpeedRatings  (0x600 : isOrdered isArray)
   [1] = "100"
exif:ExifVersion = "0230"
exif:FlashpixVersion = "0010"
exif:ComponentsConfiguration  (0x600 : isOrdered isArray)
   [1] = "0"
   [2] = "3"
   [3] = "2"
   [4] = "1"
exif:Flash  (0x100 : isStruct)
   exif:Fired = "False"
   exif:Return = "0"
   exif:Mode = "0"
   exif:Function = "True"
   exif:RedEyeMode = "False"
exif:FileSource = "3"
exif:SceneType = "1"
exif:GPSVersionID = "2.3.0.0"
exif:GPSLatitude = "43,21.9068N"
exif:GPSLongitude = "141,48.8074E"




----------答案----------
好像是这个值。
日期和时间,fx,fy,cx,cy,k1,k2,p1,p2,k3

例如)

cv::Mat src = cv::imread(filePath);
cv::Mat distCoeff;
distCoeff = cv::Mat::zeros(5, 1, CV_64FC1);

distCoeff.at<double>(0, 0) = -0.269478;// k1
distCoeff.at<double>(1, 0) = 0.115681;// k2
distCoeff.at<double>(2, 0) = -0.0000875619;// p1
distCoeff.at<double>(3, 0) = -0.0003061770;// p2
distCoeff.at<double>(4, 0) = -0.0357628000;// k3

cv::Mat cam1;
cam1 = cv::Mat::zeros(3, 3, CV_32FC1);
cam1.at<float>(0, 2) = 2432 - 7.71; // cX (4864x3648 Width / 2)
cam1.at<float>(1, 2) = 1824 + 5.90; // cY (4864x3648 Height / 2)
cam1.at<float>(0, 0) = 3659.78;// fx
cam1.at<float>(1, 1) = 3653.17;// fy
cam1.at<float>(2, 2) = 1;

cv::Mat dst, map1, map2;
cv::initUndistortRectifyMap(cam1, distCoeff, cv::Mat(), cam1, src.size(), CV_32FC1, map1, map2);
cv::remap(src, dst, map1, map2, cv::INTER_LINEAR);

0 个答案:

没有答案