Ejemplo n.º 1
0
        private void Click_合成用素材(object sender, EventArgs e)
        {
            合成用素材 = new Mat[検査面数 * 4];
            合成画像  = new Mat[検査面数];

            OpenFileDialog dialog = new OpenFileDialog()
            {
                Multiselect = true, // 複数選択の可否
                Filter      =       // フィルタ
                              "画像ファイル|*.bmp;*.gif;*.jpg;*.png|全てのファイル|*.*",
            };
            //ダイアログを表示
            DialogResult result = dialog.ShowDialog();

            if (result == DialogResult.OK)
            {
                //OKボタンがクリックされたとき
                //選択されたファイル名をすべて表示する



                foreach (var file in dialog.FileNames.Select((value, index) => new { value, index }))
                {
                    var index = file.index;
                    合成用素材[index] = new Mat(file.value, ImreadModes.GrayScale);
                    if (index % 4 == 3)//画像合成
                    {
                        合成画像[index / 4] = new OpenCvSharp.Mat(合成用素材[index].Height, 合成用素材[index].Width, MatType.CV_8UC1);
                        Mat[] images = new Mat[4];
                        for (int i = 0; i < 4; i++)
                        {
                            images[i] = 合成用素材[index - i];
                        }
                        MyCV.自作反射光除去(images, ref 合成画像[index / 4]);
                        MyCV.コントラスト調整(ref 合成画像[index / 4], double.Parse(textBox_傾き.Text));
                        MyCV.明るさ調整(ref 合成画像[index / 4], double.Parse(textBox_明るさ.Text));
                        this.Text = 100.0 * index / (4 * 検査面数) + "%";
                    }
                }

                //if(radioButton_合成.Checked)表示画像更新();
                //else radioButton_合成.Checked = true;
            }
            Click_TopHat(null, null);
            Click_二値(null, null);
        }
Ejemplo n.º 2
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() });
        }