Esempio n. 1
0
        public Undistort()
        {
            // cvUndistort2
            // キャリブレーションデータを利用して,歪みを補正する

            // (1)補正対象となる画像の読み込み
            using (IplImage srcImg = new IplImage(Const.ImageDistortion, LoadMode.Color))
                using (IplImage dstImg = srcImg.Clone())
                {
                    // (2)パラメータファイルの読み込み
                    CvMat intrinsic, distortion;
                    using (CvFileStorage fs = new CvFileStorage(Const.XmlCamera, null, FileStorageMode.Read))
                    {
                        CvFileNode param = fs.GetFileNodeByName(null, "intrinsic");
                        intrinsic  = fs.Read <CvMat>(param);
                        param      = fs.GetFileNodeByName(null, "distortion");
                        distortion = fs.Read <CvMat>(param);
                    }

                    // (3)歪み補正
                    Cv.Undistort2(srcImg, dstImg, intrinsic, distortion);

                    // (4)画像を表示,キーが押されたときに終了
                    using (CvWindow w1 = new CvWindow("Distortion", WindowMode.AutoSize, srcImg))
                        using (CvWindow w2 = new CvWindow("Undistortion", WindowMode.AutoSize, dstImg))
                        {
                            CvWindow.WaitKey(0);
                        }

                    intrinsic.Dispose();
                    distortion.Dispose();
                }
        }
Esempio n. 2
0
        public Undistort()
        {
            using (IplImage srcImg = new IplImage(FilePath.Image.Distortion, LoadMode.Color))
            using (IplImage dstImg = srcImg.Clone())
            {
                CvMat intrinsic, distortion;
                using (CvFileStorage fs = new CvFileStorage(FilePath.Text.Camera, 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);

                using (new CvWindow("Distortion", WindowMode.AutoSize, srcImg))
                using (new CvWindow("Undistortion", WindowMode.AutoSize, dstImg))
                {
                    CvWindow.WaitKey(0);
                }

                intrinsic.Dispose();
                distortion.Dispose();
            }
        }
Esempio n. 3
0
        public Undistort()
        {
            using (IplImage srcImg = new IplImage(FilePath.Image.Distortion, LoadMode.Color))
                using (IplImage dstImg = srcImg.Clone())
                {
                    CvMat intrinsic, distortion;
                    using (CvFileStorage fs = new CvFileStorage(FilePath.Text.Camera, 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);

                    using (new CvWindow("Distortion", WindowMode.AutoSize, srcImg))
                        using (new CvWindow("Undistortion", WindowMode.AutoSize, dstImg))
                        {
                            CvWindow.WaitKey(0);
                        }

                    intrinsic.Dispose();
                    distortion.Dispose();
                }
        }
Esempio n. 4
0
        public Undistort()
        {
            // cvUndistort2
            // キャリブレーションデータを利用して,歪みを補正する

            // (1)補正対象となる画像の読み込み
            using (IplImage srcImg = new IplImage(Const.ImageDistortion, LoadMode.Color))
            using (IplImage dstImg = srcImg.Clone())
            {

                // (2)パラメータファイルの読み込み
                CvMat intrinsic, distortion;
                using (CvFileStorage fs = new CvFileStorage(Const.XmlCamera, null, FileStorageMode.Read))
                {
                    CvFileNode param = fs.GetFileNodeByName(null, "intrinsic");
                    intrinsic = fs.Read<CvMat>(param);
                    param = fs.GetFileNodeByName(null, "distortion");
                    distortion = fs.Read<CvMat>(param);
                }

                // (3)歪み補正
                Cv.Undistort2(srcImg, dstImg, intrinsic, distortion);

                // (4)画像を表示,キーが押されたときに終了
                using (CvWindow w1 = new CvWindow("Distortion", WindowMode.AutoSize, srcImg))
                using (CvWindow w2 = new CvWindow("Undistortion", WindowMode.AutoSize, dstImg))
                {
                    CvWindow.WaitKey(0);
                }

                intrinsic.Dispose();
                distortion.Dispose();
            }
        }
Esempio n. 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fileName"></param>
        private static void SampleFileStorageReadSeq(string fileName)
        {
            // cvGetHashedKey, cvGetFileNode

            using (CvFileStorage fs = new CvFileStorage("sequence.yml", null, FileStorageMode.Read))
            {
                CvStringHashNode xKey   = fs.GetHashedKey("x", true);
                CvStringHashNode yKey   = fs.GetHashedKey("y", true);
                CvFileNode       points = fs.GetFileNodeByName(null, "points");

                if ((points.Tag & NodeType.Seq) != 0)
                {
                    CvSeq       seq    = points.DataSeq;
                    int         total  = seq.Total;
                    CvSeqReader reader = new CvSeqReader();
                    seq.StartRead(reader, false);
                    for (int i = 0; i < total; i++)
                    {
                        CvFileNode pt = CvFileNode.FromPtr(reader.Ptr);
                        int        x  = fs.ReadIntByName(pt, "x", 0);
                        int        y  = fs.ReadIntByName(pt, "y", 0);

                        Cv.NEXT_SEQ_ELEM(seq.ElemSize, reader);
                        Console.WriteLine("{0}: ({1}, {2})", i, x, y);
                    }
                }
            }
            Console.ReadKey();
        }
Esempio n. 6
0
        /// <summary>
        /// 画像データのファイルストレージからの読み込み
        /// <param name="fileName">読み込むXML or YAMLファイル</param>
        private static void SampleFileStorageReadImage(string fileName)
        {
            IplImage colorImg, grayImg;

            // (1)ファイルを読み込む
            using (CvFileStorage fs = new CvFileStorage(fileName, null, FileStorageMode.Read))
            {
                CvFileNode node;
                node     = fs.GetFileNodeByName(null, "color_img");
                colorImg = fs.Read <IplImage>(node);
                node     = fs.GetFileNodeByName(null, "gray_img");
                grayImg  = fs.Read <IplImage>(node);
            }
            // (2)ROI情報を取得し矩形を描いた後,解放
            CvRect roiColor = colorImg.GetROI();
            CvRect roiGray  = grayImg.GetROI();

            colorImg.ResetROI();
            grayImg.ResetROI();
            colorImg.Rectangle(
                new CvPoint(roiColor.X, roiColor.Y),
                new CvPoint(roiColor.X + roiColor.Width, roiColor.Y + roiColor.Height),
                CvColor.Red
                );
            grayImg.Rectangle(
                new CvPoint(roiGray.X, roiGray.Y),
                new CvPoint(roiGray.X + roiGray.Width, roiGray.Y + roiGray.Height),
                CvColor.Black
                );
            // (3)画像を描画
            using (new CvWindow("Color Image", WindowMode.AutoSize, colorImg))
                using (new CvWindow("Grayscale Image", WindowMode.AutoSize, grayImg))
                {
                    Cv.WaitKey(0);
                }
            colorImg.Dispose();
            grayImg.Dispose();
        }
Esempio n. 7
0
 /// <summary>
 /// 画像データのファイルストレージからの読み込み        
 /// <param name="fileName">読み込むXML or YAMLファイル</param>
 private static void SampleFileStorageReadImage(string fileName)
 {
     IplImage colorImg, grayImg;
     // (1)ファイルを読み込む
     using (CvFileStorage fs = new CvFileStorage(fileName, null, FileStorageMode.Read))
     {
         CvFileNode node;
         node = fs.GetFileNodeByName(null, "color_img");
         colorImg = fs.Read<IplImage>(node);
         node = fs.GetFileNodeByName(null, "gray_img");
         grayImg = fs.Read<IplImage>(node);
     }
     // (2)ROI情報を取得し矩形を描いた後,解放
     CvRect roiColor = colorImg.GetROI();
     CvRect roiGray = grayImg.GetROI();
     colorImg.ResetROI();
     grayImg.ResetROI();
     colorImg.Rectangle(
         new CvPoint(roiColor.X, roiColor.Y),
         new CvPoint(roiColor.X + roiColor.Width, roiColor.Y + roiColor.Height),
         CvColor.Red
     );
     grayImg.Rectangle(
         new CvPoint(roiGray.X, roiGray.Y),
         new CvPoint(roiGray.X + roiGray.Width, roiGray.Y + roiGray.Height),
         CvColor.Black
     );
     // (3)画像を描画 
     using (new CvWindow("Color Image", WindowMode.AutoSize, colorImg)) 
     using (new CvWindow("Grayscale Image", WindowMode.AutoSize, grayImg))
     {
         Cv.WaitKey(0);
     }
     colorImg.Dispose();
     grayImg.Dispose();
 }
Esempio n. 8
0
        public Camera(int num, string calFilePath, int width, int height)
        {
            this.CameraNumber = num;
            this.WIDTH        = width;
            this.HEIGHT       = height;
            imageForHsv       = new IplImage(WIDTH, HEIGHT, BitDepth.U8, 3);
            imageForTest      = new IplImage(WIDTH, HEIGHT, BitDepth.U8, 3);
            BinLevel          = 0;

            using (var fs = new CvFileStorage(calFilePath, null, FileStorageMode.Read))
            {
                var param = fs.GetFileNodeByName(null, "intrinsic");
                _fileIntrinsic  = fs.Read <CvMat>(param);
                param           = fs.GetFileNodeByName(null, "distortion");
                _fileDistortion = fs.Read <CvMat>(param);
            }

            TmTimeOut          = new System.Timers.Timer();
            TmTimeOut.Elapsed += (sender, e) =>
            {
                TmTimeOut.Stop();
                FlagTimeout = true;
            };
        }
Esempio n. 9
0
        /// <summary>
        /// マップのシーケンスのファイルストレージからの読み込み
        /// </summary>
        /// <param name="fileName">書きこむXML or YAMLファイル</param>
        private static void SampleFileStorageReadSeq(string fileName)
        {
            // cvGetHashedKey, cvGetFileNode
            // 二つのエントリを持つマップのシーケンスをファイルから読み込む

            // (1)ファイルストレージのオープン,ハッシュドキーの計算,シーケンスノードの取得
            using (CvFileStorage fs = new CvFileStorage("sequence.yml", null, FileStorageMode.Read))
            {
                CvStringHashNode xKey   = fs.GetHashedKey("x", true);
                CvStringHashNode yKey   = fs.GetHashedKey("y", true);
                CvFileNode       points = fs.GetFileNodeByName(null, "points");
                // (2)シーケンスリーダを初期化,各ノードを順次取得
                if ((points.Tag & NodeType.Seq) != 0)
                {
                    CvSeq       seq    = points.DataSeq;
                    int         total  = seq.Total;
                    CvSeqReader reader = new CvSeqReader();
                    seq.StartRead(reader, false);
                    for (int i = 0; i < total; i++)
                    {
                        CvFileNode pt = CvFileNode.FromPtr(reader.Ptr);
                        // (3)高速バージョン

                        /*
                         * CvFileNode xnode = fs.GetFileNode(pt, x_key, false);
                         * CvFileNode ynode = fs.GetFileNode(pt, y_key, false);
                         * Debug.Assert(
                         *  xnode != null &&
                         *  (xnode.Tag & NodeType.Integer) != 0 &&
                         *  ynode != null &&
                         *  (ynode.Tag & NodeType.Integer) != 0
                         * );
                         * int x = xnode.DataI;
                         * int i = ynode.DataI;
                         * //*/
                        // (4)低速バージョン.x_keyとy_keyを使わない

                        /*
                         * CvFileNode xnode = fs.GetFileNodeByName(pt, "x");
                         * CvFileNode ynode = fs.GetFileNodeByName(pt, "i");
                         * Debug.Assert(
                         *  xnode != null &&
                         *  (xnode.Tag & NodeType.Integer) != 0 &&
                         *  ynode != null &&
                         *  (ynode.Tag & NodeType.Integer) != 0
                         * );
                         * int x = xnode.DataI;
                         * int i = ynode.DataI;
                         * //*/
                        // (5)さらに低速だが,使いやすいバージョン
                        ///*
                        int x = fs.ReadIntByName(pt, "x", 0);
                        int y = fs.ReadIntByName(pt, "y", 0);
                        //*/
                        // (6)データを表示し,次のシーケンスノードを取得
                        Cv.NEXT_SEQ_ELEM(seq.ElemSize, reader);
                        Console.WriteLine("{0}: ({1}, {2})", i, x, y);
                    }
                }
            }
            Console.ReadKey();
        }
Esempio n. 10
0
        /// <summary>
        /// マップのシーケンスのファイルストレージからの読み込み
        /// </summary>
        /// <param name="fileName">書きこむXML or YAMLファイル</param>
        private static void SampleFileStorageReadSeq(string fileName)
        {
            // cvGetHashedKey, cvGetFileNode
            // 二つのエントリを持つマップのシーケンスをファイルから読み込む

            // (1)ファイルストレージのオープン,ハッシュドキーの計算,シーケンスノードの取得
            using (CvFileStorage fs = new CvFileStorage("sequence.yml", null, FileStorageMode.Read))
            {
                CvStringHashNode xKey = fs.GetHashedKey("x", true);
                CvStringHashNode yKey = fs.GetHashedKey("y", true);
                CvFileNode points = fs.GetFileNodeByName(null, "points");
                // (2)シーケンスリーダを初期化,各ノードを順次取得
                if ((points.Tag & NodeType.Seq) != 0)
                {
                    CvSeq seq = points.DataSeq;
                    int total = seq.Total;
                    CvSeqReader reader = new CvSeqReader();
                    seq.StartRead(reader, false);
                    for (int i = 0; i < total; i++)
                    {
                        CvFileNode pt = CvFileNode.FromPtr(reader.Ptr);
                        // (3)高速バージョン
                        /*
                        CvFileNode xnode = fs.GetFileNode(pt, x_key, false);
                        CvFileNode ynode = fs.GetFileNode(pt, y_key, false);
                        Debug.Assert(
                            xnode != null && 
                            (xnode.Tag & NodeType.Integer) != 0 &&
                            ynode != null && 
                            (ynode.Tag & NodeType.Integer) != 0
                        );
                        int x = xnode.DataI;
                        int i = ynode.DataI;
                        //*/
                        // (4)低速バージョン.x_keyとy_keyを使わない 
                        /*
                        CvFileNode xnode = fs.GetFileNodeByName(pt, "x");   
                        CvFileNode ynode = fs.GetFileNodeByName(pt, "i");
                        Debug.Assert(
                            xnode != null &&
                            (xnode.Tag & NodeType.Integer) != 0 &&
                            ynode != null &&
                            (ynode.Tag & NodeType.Integer) != 0
                        ); 
                        int x = xnode.DataI;   
                        int i = ynode.DataI;
                        //*/
                        // (5)さらに低速だが,使いやすいバージョン
                        ///*
                        int x = fs.ReadIntByName(pt, "x", 0);
                        int y = fs.ReadIntByName(pt, "y", 0);
                        //*/
                        // (6)データを表示し,次のシーケンスノードを取得
                        Cv.NEXT_SEQ_ELEM(seq.ElemSize, reader);
                        Console.WriteLine("{0}: ({1}, {2})", i, x, y);
                    }
                }
            }
            Console.ReadKey();
        }
Esempio n. 11
0
    // Use this for initialization
    void Start()
    {
        if (runCalibration)
        {
            Application.RegisterLogCallback(HandleLog);
            scTex = new Texture2D(KinectWrapper.GetDepthWidth(), KinectWrapper.GetDepthHeight(), TextureFormat.RGBA32, false);
            screenTx = new Texture2D(Screen.width, Screen.height, TextureFormat.RGBA32, false);
            resetPixels = new Color32[Screen.width * Screen.height];
            for (int i = 0; i < resetPixels.Length; i++)
            {
                Color32 cCol = new Color32(0, 0, 0, 0);
                resetPixels[i] = cCol;
            }
            screenTx.SetPixels32(resetPixels);
            screenTx.Apply(false);
            GameObject.FindGameObjectWithTag("Restex").GetComponent<RawImage>().texture = screenTx;
        }

        foundCoordinatesMatrix = new Mat();
        rightSideMatrix = new Mat();
        //result = new Mat(11,1,OpenCvSharp.CPlusPlus.MatType.CV_64FC1);
        using (CvFileStorage fs = new CvFileStorage("KinectCalibration.xml", null, FileStorageMode.Read))
        {
            string nodeName = "projectorPoints";
            CvFileNode param = fs.GetFileNodeByName(null, nodeName);
            Mat pPts = new Mat(fs.Read<CvMat>(param), true);
            for (int i = 0; i < pPts.Cols; i++)
            {
                projectorCoordinates.Add(pPts.Get<CvPoint2D64f>(0, i));
            }
            nodeName = "kinectPoints";
            param = fs.GetFileNodeByName(null, nodeName);
            Mat kPts = new Mat(fs.Read<CvMat>(param), true);
            for (int i = 0; i < pPts.Cols; i++)
            {
                kinectCoordinates.Add(kPts.Get<CvPoint3D64f>(0, i));
            }
            nodeName = "calibResult";
            param = fs.GetFileNodeByName(null, nodeName);
            result = new Mat(fs.Read<CvMat>(param), true);
            fs.Dispose();
        }
        if (result.Rows > 1)
        {
            foundResult = true;
            Debug.Log("Calib Loaded: " + result.Get<double>(0, 0).ToString() + " " + result.Get<double>(0, 1) + " " + result.Get<double>(0, 2) + " " + result.Get<double>(0, 3) + " " + result.Get<double>(0, 4) + " " + result.Get<double>(0, 5) + " " + result.Get<double>(0, 6) + " " + result.Get<double>(0, 7) + " " + result.Get<double>(0, 8) + " " + result.Get<double>(0, 9) + " " + result.Get<double>(0, 10) + "--" + kinectCoordinates.Count + " " + projectorCoordinates.Count);
        }
        Debug.Log(Screen.width + " " + Screen.height);
    }
Esempio n. 12
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="fileName"></param>
        private static void SampleFileStorageReadSeq(string fileName)
        {
            // cvGetHashedKey, cvGetFileNode

            using (CvFileStorage fs = new CvFileStorage("sequence.yml", null, FileStorageMode.Read))
            {
                CvStringHashNode xKey = fs.GetHashedKey("x", true);
                CvStringHashNode yKey = fs.GetHashedKey("y", true);
                CvFileNode points = fs.GetFileNodeByName(null, "points");

                if ((points.Tag & NodeType.Seq) != 0)
                {
                    CvSeq seq = points.DataSeq;
                    int total = seq.Total;
                    CvSeqReader reader = new CvSeqReader();
                    seq.StartRead(reader, false);
                    for (int i = 0; i < total; i++)
                    {
                        CvFileNode pt = CvFileNode.FromPtr(reader.Ptr);
                        int x = fs.ReadIntByName(pt, "x", 0);
                        int y = fs.ReadIntByName(pt, "y", 0);

                        Cv.NEXT_SEQ_ELEM(seq.ElemSize, reader);
                        Console.WriteLine("{0}: ({1}, {2})", i, x, y);
                    }
                }
            }
            Console.ReadKey();
        }