Ejemplo n.º 1
0
        private int[] 評価結果(Mat[] テンプレート, Mat[] 合成用素材, Mat[] 合成画像, int[][,] 正解座標, int p1, int p2, int p3, int p4, int p5)
        {
            MyCV MyCv = new MyCV();
            int  検査面数 = テンプレート.Length;

            Mat[] dst        = new Mat[検査面数];
            int[] スコア等々      = { 0, 0, 0 };
            int[] scores     = new int[検査面数];
            int[] uncorrects = new int[検査面数];
            int[] unfinds    = new int[検査面数];
            int   width      = テンプレート[0].Width;
            int   height     = テンプレート[0].Height;

            if (合成用素材 != null)
            {
                for (int num = 0; num < 合成用素材.Length; num++)
                {
                    if (num % 4 == 3)
                    {
                        dst[num / 4] = new Mat(height, width, MatType.CV_8UC1);
                        Mat[] images = new Mat[4];
                        for (int i = 0; i < 4; i++)
                        {
                            images[i] = 合成用素材[num - i].Clone();
                        }
                        MyCv.自作反射光除去(images, ref dst[num / 4]);
                        MyCv.コントラスト調整(ref dst[num / 4], (double)(p1 / 10.0));
                        MyCv.明るさ調整(ref dst[num / 4], (double)p2);
                        for (int i = 0; i < images.Length; i++)
                        {
                            images[i].Dispose();
                        }
                    }
                }
            }
            else
            {
                dst = (Mat[])合成画像.Clone();
            }

            for (int i = 0; i < 検査面数; i++)
            {
                MyCv.TopHat(dst[i].Clone(), ref dst[i], p3, p4);
                MyCv.二値化(ref dst[i], p5);
                MyCv.評価用画像作成(テンプレート[i], dst[i].Clone(), ref dst[i]);
                スコア等々         = MyCv.点数計算(dst[i], 正解座標[i]);
                scores[i]     = スコア等々[0];
                uncorrects[i] = スコア等々[1];
                unfinds[i]    = スコア等々[2];
                //scores[i] = MyCv.点数計算(dst[i], 正解座標[i]);
            }

            //Console.WriteLine("score="+(int)scores.Average()+","+ (int)uncorrects.Sum());

            for (int i = 0; i < dst.Length; i++)
            {
                if (dst[i] != null)
                {
                    dst[i].Dispose();
                }
            }
            MyCv = null;

            return(new int[] { (int)scores.Average(), (int)uncorrects.Sum(), (int)unfinds.Sum() });
        }