OpenCV で (OpenCVSharp のラッパーを介して) 画像の歪みを取り除こうとしていますが、マトリックスの正しい形式を理解するのに問題があります。予想外の結果。
私が使用する別のソフトウェアから、次のデータを取得します(そのソフトウェアは、これらのパラメーターで画像の歪みを元に戻すので、これは正しいはずです)
<sensor id="0" label="RP_OV5647 (3.5976 mm)" type="frame">
<resolution width="2592" height="1944"/>
<property name="focal_length" value="3.5975999999999999e+000"/>
<property name="fixed" value="false"/>
<calibration type="frame" class="adjusted">
<resolution width="2592" height="1944"/>
<fx>2.5667779156627239e+003</fx>
<fy>2.5654169232963172e+003</fy>
<cx>1.2933905910821311e+003</cx>
<cy>9.6694162774618212e+002</cy>
<skew>2.9824815660771562e+000</skew>
<k1>9.1041365324307497e-002</k1>
<k2>-4.0485507081497402e-001</k2>
<k3>3.3943759073230600e-001</k3>
<p1>3.4409596859645629e-004</p1>
<p2>-3.9472652058529605e-005</p2>
</calibration>
</sensor>
次のコードを使用して画像の歪みを解消しています。固有のマトリックスは問題ありません(歪みを適用しない場合に期待される結果が得られます)が、予想されるレイアウトについて理解していることから、歪みマトリックスが問題を引き起こしています(何も見つかりませんでした)サンプルですが、これは OpenCV ソースから収集したものです) k1k2p1p2 を使用した 4X1 マトリックスが機能するはずなので、構成ファイルに次のように記述します。
<?xml version="1.0"?>
<opencv_storage>
<intrinsic type_id="opencv-matrix">
<rows>3</rows>
<cols>3</cols>
<dt>f</dt>
<data>
1293.3905910821311 0. 966.94162774618212 0. 2566.7779156627239 2565.4169232963172 0. 0. 1.
</data>
</intrinsic>
<distortion type_id="opencv-matrix">
<rows>1</rows>
<cols>5</cols>
<dt>f</dt>
<data>
0.091041365324307497 -0.40485507081497402 0.00034409596859645629 -0.000039472652058529605 0.33943759073230600
</data>
</distortion>
コード :
using (IplImage srcImg = new IplImage(img.Path, LoadMode.Color))
using (IplImage dstImg = srcImg.Clone())
{
CvMat intrinsic, distortion;
using (CvFileStorage fs = new CvFileStorage("camera.xml", null, FileStorageMode.Read))
{
CvFileNode param = fs.GetFileNodeByName(null, "intrinsic");
intrinsic = fs.Read<CvMat>(param);
param = fs.GetFileNodeByName(null, "distortion");
distortion = fs.Read<CvMat>(param);
}
Cv.Undistort2(srcImg, dstImg, intrinsic, distortion);
dstImg.SaveImage(new System.IO.FileInfo(img.Path).Name);
}
しかし、私は完全に歪んだ画像 (Whirlpool) を取得しています。行列の順序が間違っていますか? 名前付きパラメーターから作成されたマトリックスを含むコード サンプル (見つけられなかった) はありますか?