Ejemplo n.º 1
0
        private ZArrayDescriptor BW_Line(int nx, int ny, int kv)    // Ч/Б полосы с заданным числом градаций
        {
            int nx1 = nx + dx * 2;

            ZArrayDescriptor cmpl = new ZArrayDescriptor(nx1, ny);

            int step = nx / kv;

            for (int i = 0; i < nx; i++)
            {
                for (int j = 0; j < ny; j++)
                {
                    if ((i / step) % 2 == 0)
                    {
                        cmpl.array[i + dx, j] = 0;
                    }
                    else
                    {
                        cmpl.array[i + dx, j] = 255;
                    }
                }
            }

            cmpl = Model_Sinus.Intens(255, 0, dx, cmpl);     // Белая и черная полоса по краям

            return(cmpl);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Клин с 16 значениями интенсивности из массива
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button6_Click(object sender, EventArgs e)
        {
            k12 = Convert.ToInt32(textBox8.Text);

            nx = Convert.ToInt32(textBox14.Text);                       // Текущий размер
            ny = Convert.ToInt32(textBox15.Text);

            double[] am = new double[nx];
            //for (int i = 0; i < nx; i++) { am[i] = cl[i / 256]; }      // строка клина 128 -  0-31  256 -  0-15


            kv = Convert.ToInt32(textBox16.Text);                      //  Число градаций
            am = Clin(cl, kv, nx);                                     // Формирование клина

            if (am == null)
            {
                MessageBox.Show("kv != 16, 32, 64, 128  kv= " + kv); return;
            }

            int Nx1 = nx + dx * 2;

            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[k12 - 1] = cmpl;
            VisualRegImage(k12 - 1);
            // ----------------------------------------------------------------------------------- Обратный клин
            //  ZArrayDescriptor cmpl1 = new ZArrayDescriptor(Nx1, ny);
            //  for (int i = 0; i < nx; i++)
            //      for (int j = 0; j < ny; j++)
            //      { cmpl1.array[i + dx, j] = am[nx-1-i]; }

            //  cmpl1 = Model_Sinus.Intens(0, 256, dx, cmpl1);     // Белая и черная полоса по краям
            //  Form1.zArrayDescriptor[k12 - 1 + 1] = cmpl1;
            //  VisualRegImage(k12 - 1 + 1);
        }
Ejemplo n.º 3
0
        private ZArrayDescriptor Bright(int nx, int ny, int c)  // Однотонный цвет
        {
            int nx1 = nx + dx * 2;

            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] = c;
                }
            }

            cmpl = Model_Sinus.Intens(255, 0, dx, cmpl);     // Белая и черная полоса по краям

            return(cmpl);
        }
Ejemplo n.º 4
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.º 5
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);
        }