private void imgTransformed_MouseMove(object sender, MouseEventArgs e)
 {
     Point p = Image2BitmapCoordinate(imgTransformed, e.GetPosition(imgTransformed));
     p.X = p.X / imgTransformed.Source.Width * 2 - 0.5;  // グリッド内[0,1]
     p.Y = p.Y / imgTransformed.Source.Height * 2 - 0.5; // グリッド内[0,1]
     p.X = p.X * (vm.DstMaxX - vm.DstMinX) + vm.DstMinX; // グリッド内[DstMinX,DstMaxX]
     p.Y = p.Y * (vm.DstMaxY - vm.DstMinY) + vm.DstMinY; // グリッド内[DstMinY,DstMaxY]
     vm.DstMousePos = p;
     if (imgTransformed.Source == null) return;
     CV.Mat dstMousePos = new CV.Mat(3, 1, CV.MatType.CV_64F,
         new double[] { vm.DstMousePos.X, vm.DstMousePos.Y, 1 });
     CV.Mat homographyMatrixInv = new CV.Mat(3, 3, CV.MatType.CV_64F, vm.HomographyMatrix).Inv();//homographyはvm.HomographyMatrixの参照
     CV.Mat srcMousePos = new CV.Mat(3, 1, CV.MatType.CV_64F);
     srcMousePos = homographyMatrixInv * dstMousePos;
     vm.SrcMousePos = new Point(srcMousePos.At<double>(0, 0) / srcMousePos.At<double>(0, 2),
         srcMousePos.At<double>(0, 1) / srcMousePos.At<double>(0, 2));
 }
 private void imgRaw_MouseMove(object sender, MouseEventArgs e)
 {
     vm.SrcMousePos = Image2BitmapCoordinate(imgRaw, e.GetPosition(imgRaw));
     if (imgTransformed.Source == null) return;
     CV.Mat srcMousePos = new CV.Mat(3, 1, CV.MatType.CV_64F,
         new double[] { vm.SrcMousePos.X, vm.SrcMousePos.Y, 1 });
     CV.Mat homographyMatrix = new CV.Mat(3, 3, CV.MatType.CV_64F, vm.HomographyMatrix);//homographyはvm.HomographyMatrixの参照
     CV.Mat dstMousePos = new CV.Mat(3, 1, CV.MatType.CV_64F);
     dstMousePos = homographyMatrix * srcMousePos;
     vm.DstMousePos = new Point(dstMousePos.At<double>(0, 0) / dstMousePos.At<double>(0, 2),
         dstMousePos.At<double>(0, 1) / dstMousePos.At<double>(0, 2));
 }