Ejemplo n.º 1
0
        /// <summary>
        /// Автоматическое определение клина
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button15_Click(object sender, EventArgs e)
        {
            int nx = 3096;
            int ny = 2160;


            int nx1 = nx + dx * 2;                                                  // Размер для изображения с добавленными полосами

            int kv = 16;                                                            //  Число градаций

            Form1.zArrayDescriptor[0] = Model_Sinus.Intensity1(255, nx, ny, dx, 1); // Идеальная интенсивностсть => 1
            VisualRegImage(0);
            TakePhoto12();
            VisualRegImage(1);
            DialogResult dialogResult = MessageBox.Show("Заданы границы X0, X1, X2, X3 ?", "Ограничение по размеру", MessageBoxButtons.YesNo);

            if (dialogResult == DialogResult.No)
            {
                return;
            }

            Form1.Coords[] X = MainForm.GetCoordinates();

            Form1.zArrayDescriptor[6] = File_Change_Size.Change_rectangle(Form1.zArrayDescriptor[1], X);    // Ограничение по размеру 2 => 7
            Form1.zArrayDescriptor[6] = SumClass.Sum_zArrayY_ALL(Form1.zArrayDescriptor[6]);                // Суммирование по Y      7 => 7
            VisualRegImage(6);
            int nx2    = Form1.zArrayDescriptor[6].width;                                                   // Размер массива после ограничения
            int ny2    = Form1.zArrayDescriptor[6].height;
            int N_Line = ny2 / 2;                                                                           // Линия по центральной строке


            //---------------------------------------------------------------------------------------------- Идеальный клин без ввода с новыми размерами

            Form1.zArrayDescriptor[0] = Model_Sinus.Intensity1(255, nx2, ny2, dx, 1);
            Form1.zArrayDescriptor[1] = Minus100(Form1.zArrayDescriptor[0], 100);
            VisualRegImage(1);
            double[] am_Clin_Ideal = new double[nx2];                                                           // Идеальный клин от 0 до 255
            for (int i = 0; i < nx2; i++)
            {
                am_Clin_Ideal[i] = Form1.zArrayDescriptor[1].array[i, N_Line];
            }

            double[] am_Clin = new double[nx2];                                                                 // Отклик от идеального клина от 0 до 255
            for (int i = 0; i < nx2; i++)
            {
                am_Clin[i] = Form1.zArrayDescriptor[6].array[i, N_Line];
            }



            //---------------------------------------------------------------------------------------------- Черно белые полосы => 0
            Form1.zArrayDescriptor[0] = BW_Line(nx, ny, kv);     // Полосы с kv градациями
            VisualRegImage(0);
            TakePhoto12();                                       //---------------------------- Фото => 1
            MessageBox.Show("Ч/Б полосы введены");

            Form1.zArrayDescriptor[3] = File_Change_Size.Change_rectangle(Form1.zArrayDescriptor[1], X); //----------------- Ограничение по размеру => 2
            VisualRegImage(3);

            Form1.zArrayDescriptor[3] = SumClass.Sum_zArrayY_ALL(Form1.zArrayDescriptor[3]);
            Form1.zArrayDescriptor[4] = BW_Line_255(Form1.zArrayDescriptor[3], 210);                     // --------------Выше порога 255 ниже 0
            VisualRegImage(4);
            double[] am_BW = BW_Num(Form1.zArrayDescriptor[4], N_Line);                                  // размер новый после прямоугольного ограничения

            //----------------------------------------------------------------------------------------------    Определение нового клина

            double[] cl1 = NewClin(am_Clin, am_BW, am_Clin_Ideal);

            //----------------------------------------------------------------------------------------------Отображение нового клина
            ZArrayDescriptor cmpl = new ZArrayDescriptor(nx1, ny);

            double[] am = Clin(cl1, kv, nx);
            for (int i = 0; i < nx; i++)
            {
                for (int j = 0; j < ny; j++)
                {
                    cmpl.array[i + dx, j] = am[i];
                }                                                                                         // ----------------- Клин в рабочий массив
            }
            cmpl = Model_Sinus.Intens(255, 0, dx, cmpl);                                                  // Белая и черная полоса по краям
            Form1.zArrayDescriptor[7] = cmpl;                                                             // новый клин в 7 массив
            VisualRegImage(7);

            for (int i = 0; i < 16; i++)
            {
                cl[i] = cl1[i];
            }
        }
Ejemplo n.º 2
0
        //-------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Ввод клина с камеры и обработка с усреднением
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button12_Click(object sender, EventArgs e)
        {
            int nx = 3996;
            int ny = 2160;

            int nx1 = nx + dx * 2;              // Размер для изображения с добавленными полосами

            int kv = 16;                        //  Число градаций


            // -------------------------------------------------------------------------------------------- Клин => 0  (16 градаций)
            double[]         am   = Clin(cl, kv, nx);                                                     // Формирование клина
            ZArrayDescriptor cmpl = new ZArrayDescriptor(nx1, ny);

            for (int i = 0; i < nx; i++)
            {
                for (int j = 0; j < ny; j++)
                {
                    cmpl.array[i + dx, j] = am[i];
                }                                                                                        // ----------------- Клин
            }
            cmpl = Model_Sinus.Intens(255, 0, dx, cmpl);                                                 // Белая и черная полоса по краям
            Form1.zArrayDescriptor[0] = cmpl;                                                            // Клин в 1 массив
            VisualRegImage(0);

            TakePhoto12();                                                                                         //-------- Фото => 1

            DialogResult dialogResult = MessageBox.Show("Заданы границы X0, X1, X2, X3 ?", "Ограничение по размеру", MessageBoxButtons.YesNo);

            if (dialogResult == DialogResult.No)
            {
                return;
            }

            Form1.Coords[] X = MainForm.GetCoordinates();

            //MessageBox.Show(" X1 - " + Form1.X1 + " Y1 - " + Form1.Y1);

            //---------------------------------------------------------------------------------------------- Ограничение клина по размеру => 2
            Form1.zArrayDescriptor[2] = File_Change_Size.Change_rectangle(Form1.zArrayDescriptor[1], X);
            VisualRegImage(2);
            //MessageBox.Show("Ограничение клина по размеру прошло");
            int nx2 = Form1.zArrayDescriptor[2].width;                                                                      // Размер массива после ограничения
            int ny2 = Form1.zArrayDescriptor[2].height;

            int N_Line = ny2 / 2;                                                                                           // Полоса по центру

            //int y1 = File_Change_Size.MinY(X);   // Минимальное значение по Y
            //int y2 = File_Change_Size.MaxY(X);   // Максимальное значение по Y
            Form1.zArrayDescriptor[2] = SumClass.Sum_zArrayY_ALL(Form1.zArrayDescriptor[2]);                                 //------------------------- Усреднение по Y => 2
            VisualRegImage(2);
            //MessageBox.Show("Усреднение по Y прошло");

            //---------------------------------------------------------------------------------------------- Черно белые полосы => 0
            Form1.zArrayDescriptor[0] = BW_Line(nx, ny, kv);                                    // Полосы с kv градациями
            VisualRegImage(0);

            TakePhoto12();                                                                                                              //---------------------------- Фото => 1
            MessageBox.Show("Полосы введены");

            Form1.zArrayDescriptor[3] = File_Change_Size.Change_rectangle(Form1.zArrayDescriptor[1], X);                                //----------------- Ограничение по размеру => 2
            VisualRegImage(3);

            //Form1.zArrayDescriptor[3] = SumClass.Sum_zArrayY_ALL(Form1.zArrayDescriptor[3]);
            Form1.zArrayDescriptor[4] = BW_Line_255(Form1.zArrayDescriptor[3], 210);                                                    // --------------Выше порога 255 ниже 0
            VisualRegImage(4);
            double[] am_BW = BW_Num(Form1.zArrayDescriptor[4], N_Line);                                                                 // размер новый после прямоугольного ограничения
            //MessageBox.Show("Контраст прошло");
            //--------------------------------------------------------------------------------------------- Усреднение по X клина => 6
            Form1.zArrayDescriptor[5] = Summ_Y(Form1.zArrayDescriptor[2], Form1.zArrayDescriptor[4]);
            VisualRegImage(5);
        }