예제 #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);
        }
예제 #2
0
        /// <summary>
        /// Сверхразрешение.
        /// Синусоида в два раза больше.
        /// 1.Усредняется по двум точкам.
        /// 2.Сдвиг на 1 точку
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button9_Click(object sender, EventArgs e)
        {
            N_pol   = Convert.ToDouble(textBox6.Text); // Число точек на полоссу
            N_urovn = Convert.ToDouble(textBox8.Text); // Амплитуда

            Nx = Convert.ToInt32(textBox10.Text);
            Ny = Convert.ToInt32(textBox12.Text);


            Form1.zArrayDescriptor[Form1.regComplex] = Model_Sinus.Sinus3(N_pol, Nx, Ny);
            VisualRegImageAsRaw(Form1.regComplex);

            Close();
        }
예제 #3
0
        private void button7_Click(object sender, EventArgs e)          // ---------------------------------   Обратный клин
        {
            k12   = Convert.ToInt32(textBox8.Text);
            gamma = Convert.ToDouble(textBox7.Text);
            nx    = Convert.ToInt32(textBox14.Text);                    // Текущий размер
            ny    = Convert.ToInt32(textBox15.Text);
            dx    = Convert.ToInt32(textBox20.Text);                    // Полосы по краям

            int nu = 255;                                               // Число уровней

            Form1.zArrayDescriptor[k12 - 1] = Model_Sinus.Intensity2(nu, nx, ny, dx, gamma);
            VisualRegImage(k12 - 1);

            //Close();
        }
예제 #4
0
        /// <summary>
        /// Синусоиды с 256 фазовыми сдвигами
        /// Число повторений в "Разрядить нулями" => kr
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            N_pol = Convert.ToDouble(textBox6.Text); // Число точек на полоссу

            kr = Convert.ToInt32(textBox9.Text);     // Разрядка нулями
            Nx = Convert.ToInt32(textBox10.Text);


            //if (kr == 0) { MessageBox.Show("Число повторений равно 0"); return; }


            Form1.zArrayDescriptor[Form1.regComplex * 4] = Model_Sinus.Sinus2(N_pol, kr, Nx);

            VisualRegImage(Form1.regComplex * 4);

            Close();
        }
예제 #5
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);
        }
예제 #6
0
        /// <summary>
        /// Синусоиды с учетом клина

        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ModelSinByClinButton_Click(object sender, EventArgs e)
        {
            double[] fzrad = new double[8];

            gamma   = Convert.ToDouble(textBox5.Text);
            N_pol   = Convert.ToDouble(textBox6.Text);   // Число точек на полоссу
            N_urovn = Convert.ToDouble(textBox8.Text);   // Амплитуда
            kr      = Convert.ToInt32(textBox9.Text);    // Разрядка нулями
            Nx      = Convert.ToInt32(textBox10.Text);
            Ny      = Convert.ToInt32(textBox12.Text);
            noise   = Convert.ToDouble(textBox11.Text);
            N_sdv   = Convert.ToInt32(textBox17.Text);   // Число сдвигов

            double minIntensity = 0;

            if (N_sdv > 8)
            {
                MessageBox.Show("Число сдвигов больше 8", "Message", MessageBoxButtons.OK);
            }


            fzrad = new double[8];

            fzrad[0] = Math.PI * Convert.ToDouble(textBox1.Text) / 180.0;   // Фаза в радианах
            fzrad[1] = Math.PI * Convert.ToDouble(textBox2.Text) / 180.0;
            fzrad[2] = Math.PI * Convert.ToDouble(textBox3.Text) / 180.0;
            fzrad[3] = Math.PI * Convert.ToDouble(textBox4.Text) / 180.0;

            fzrad[4] = Math.PI * Convert.ToDouble(textBox13.Text) / 180.0;
            fzrad[5] = Math.PI * Convert.ToDouble(textBox14.Text) / 180.0;
            fzrad[6] = Math.PI * Convert.ToDouble(textBox15.Text) / 180.0;
            fzrad[7] = Math.PI * Convert.ToDouble(textBox16.Text) / 180.0;

            CorrectBr correctBr = new CorrectBr();

            double[] interpolatedClin = correctBr.InterpolateClin(clin);

            //OnModelSin1(fzrad, N_sdv, N_urovn, gamma, N_pol, kr, Nx, Ny, noise, interpolatedClin);
            for (int i = 0; i < N_sdv; i++)
            {
                Form1.zArrayDescriptor[Form1.regComplex * 4 + i] = Model_Sinus.Sinus1(fzrad[i], N_urovn, N_pol, gamma, kr, Nx, Ny, noise, minIntensity, interpolatedClin);
                VisualRegImage(Form1.regComplex * 4 + i);
            }
            Close();
        }
예제 #7
0
        private void button1_Click(object sender, EventArgs e)                             // Смоделировать 4(8) синусоиды с N_pol полосами
        {
            double[] fzrad = new double[8];

            // fz[0] = Convert.ToDouble(textBox1.Text); fzrad[0] = Math.PI * fz[0] / 180.0;   // Фаза в радианах
            // fz[1] = Convert.ToDouble(textBox2.Text); fzrad[1] = Math.PI * fz[1] / 180.0;
            // fz[2] = Convert.ToDouble(textBox3.Text); fzrad[2] = Math.PI * fz[2] / 180.0;
            // fz[3] = Convert.ToDouble(textBox4.Text); fzrad[3] = Math.PI * fz[3] / 180.0;

            gamma   = Convert.ToDouble(textBox5.Text);
            N_pol   = Convert.ToDouble(textBox6.Text);
            N_urovn = Convert.ToDouble(textBox8.Text);   // Амплитуда
            kr      = Convert.ToInt32(textBox9.Text);
            Nx      = Convert.ToInt32(textBox10.Text);
            Ny      = Convert.ToInt32(textBox12.Text);
            noise   = Convert.ToDouble(textBox11.Text);
            N_sdv   = Convert.ToInt32(textBox17.Text); // Число сдвигов

            if (N_sdv > 8)
            {
                MessageBox.Show("Число сдвигов больше 8", "Message", MessageBoxButtons.OK);
            }

            fzrad[0] = Math.PI * Convert.ToDouble(textBox1.Text) / 180.0;   // Фаза в радианах
            fzrad[1] = Math.PI * Convert.ToDouble(textBox2.Text) / 180.0;
            fzrad[2] = Math.PI * Convert.ToDouble(textBox3.Text) / 180.0;
            fzrad[3] = Math.PI * Convert.ToDouble(textBox4.Text) / 180.0;

            fzrad[4] = Math.PI * Convert.ToDouble(textBox13.Text) / 180.0;
            fzrad[5] = Math.PI * Convert.ToDouble(textBox14.Text) / 180.0;
            fzrad[6] = Math.PI * Convert.ToDouble(textBox15.Text) / 180.0;
            fzrad[7] = Math.PI * Convert.ToDouble(textBox16.Text) / 180.0;

            for (int i = 0; i < N_sdv; i++)
            {
                Form1.zArrayDescriptor[Form1.regComplex * 4 + i] = Model_Sinus.Sinus(fzrad[i], N_urovn, N_pol, gamma, kr, Nx, Ny, noise);
                VisualRegImage(Form1.regComplex * 4 + i);
            }
            Close();
            //OnModelSin(fzrad, N_urovn, gamma, N_pol, kr, Nx, Ny, noise);

            Close();
        }
예제 #8
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);
        }
예제 #9
0
        private void button8_Click(object sender, EventArgs e)                         // Смоделировать 4(8) синусоиды с размером периода N_pol
        {
            double[] fzrad = new double[8];

            gamma   = Convert.ToDouble(textBox5.Text);
            N_pol   = Convert.ToDouble(textBox6.Text);       // Число точек на полоссу
            N_urovn = Convert.ToDouble(textBox8.Text);       // Амплитуда
            kr      = Convert.ToInt32(textBox9.Text);        // Разрядка нулями
            Nx      = Convert.ToInt32(textBox10.Text);
            Ny      = Convert.ToInt32(textBox12.Text);
            noise   = Convert.ToDouble(textBox11.Text);
            N_sdv   = Convert.ToInt32(textBox17.Text);      // Число сдвигов

            double minIntensity = Convert.ToInt32(textBoxMinIntensity.Text);

            if (N_sdv > 8)
            {
                MessageBox.Show("Число сдвигов больше 8", "Message", MessageBoxButtons.OK);
            }


            fzrad = new double[8];

            fzrad[0] = Math.PI * Convert.ToDouble(textBox1.Text) / 180.0;       // Фаза в радианах
            fzrad[1] = Math.PI * Convert.ToDouble(textBox2.Text) / 180.0;
            fzrad[2] = Math.PI * Convert.ToDouble(textBox3.Text) / 180.0;
            fzrad[3] = Math.PI * Convert.ToDouble(textBox4.Text) / 180.0;

            fzrad[4] = Math.PI * Convert.ToDouble(textBox13.Text) / 180.0;
            fzrad[5] = Math.PI * Convert.ToDouble(textBox14.Text) / 180.0;
            fzrad[6] = Math.PI * Convert.ToDouble(textBox15.Text) / 180.0;
            fzrad[7] = Math.PI * Convert.ToDouble(textBox16.Text) / 180.0;

            //OnModelSin1(fzrad, N_sdv, N_urovn, gamma, N_pol, kr, Nx, Ny, noise, null);
            for (int i = 0; i < N_sdv; i++)
            {
                Form1.zArrayDescriptor[Form1.regComplex * 4 + i] = Model_Sinus.Sinus1(fzrad[i], N_urovn, N_pol, gamma, kr, Nx, Ny, noise, minIntensity, null);
                VisualRegImageAsRaw(Form1.regComplex * 4 + i);
            }
            Close();
        }
예제 #10
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];
            }
        }
예제 #11
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);
        }