Пример #1
0
        public static void Diapazon(double a1, double a2)             // Привести к диапазону вещественный кадр
        {
            if (Form1.zArrayDescriptor[Form1.regImage] == null)
            {
                MessageBox.Show("Diapazon zArrayDescriptor[" + Form1.regImage + "] == NULL"); return;
            }
            int nx = Form1.zArrayDescriptor[Form1.regImage].width;
            int ny = Form1.zArrayDescriptor[Form1.regImage].height;

            //ZArrayDescriptor rez = new ZArrayDescriptor(nx, ny);

            double min = SumClass.getMin(Form1.zArrayDescriptor[Form1.regImage]);
            double max = SumClass.getMax(Form1.zArrayDescriptor[Form1.regImage]);

            for (int i = 0; i < nx; i++)
            {
                for (int j = 0; j < ny; j++)
                {
                    double d = Form1.zArrayDescriptor[Form1.regImage].array[i, j];
                    Form1.zArrayDescriptor[Form1.regImage].array[i, j] = (d - min) * (a2 - a1) / (max - min) + a1;
                }
            }


            VisualRegImage(Form1.regImage);
        }
Пример #2
0
        // Конструктор для заполнения фазы (Амплитуда постоянная)

        public ZComplexDescriptor(ZArrayDescriptor descriptorToCopy, double am)
        {
            if (descriptorToCopy == null)
            {
                MessageBox.Show("ZComplexDescriptor == NULL"); return;
            }

            width  = descriptorToCopy.width;
            height = descriptorToCopy.height;
            array  = new Complex[width, height];

            double max = SumClass.getMax(descriptorToCopy);
            double min = SumClass.getMin(descriptorToCopy);

            //MessageBox.Show("width =" + Convert.ToString(width) + "height =" + Convert.ToString(height));
            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    double a = descriptorToCopy.array[i, j];
                    a           = (a - min) * 2.0 * Math.PI / (max - min);
                    a           = a - Math.PI;
                    array[i, j] = Complex.FromPolarCoordinates(am, a);

                    //array[i, j] = new Complex(1.0, descriptorToCopy.array[i, j]);
                }
            }
        }
Пример #3
0
        // Конструктор для случайного заполнения фазы (RANDOM) (Амплитуда из файла, k=1)

        public ZComplexDescriptor(ZArrayDescriptor descriptorToCopy, ZArrayDescriptor amp, int k)
        {
            if (amp == null)
            {
                MessageBox.Show("Ampl == NULL");               return;
            }
            if (descriptorToCopy == null)
            {
                MessageBox.Show("ZArrayDescriptor   == NULL"); return;
            }
            if (k != 1)
            {
                MessageBox.Show(" k!=1 ");                     return;
            }

            width  = amp.width;
            height = amp.height;
            array  = new Complex[width, height];

            double max = SumClass.getMax(descriptorToCopy);
            double min = SumClass.getMin(descriptorToCopy);

            int NX = descriptorToCopy.width;
            int NY = descriptorToCopy.height;

            if (NX > width)
            {
                NX = width;
            }
            if (NY > height)
            {
                NY = height;
            }
            //MessageBox.Show("width =" + Convert.ToString(width) + "height =" + Convert.ToString(height));
            Random rnd = new Random();

            for (int i = 0; i < NX; i++)
            {
                for (int j = 0; j < NY; j++)
                {
                    double am = amp.array[i, j];
                    double fz = descriptorToCopy.array[i, j];
                    double fa = rnd.NextDouble() * 2.0 * Math.PI - Math.PI;
                    fz = fz + fa;
                    //if (fz > Math.PI) fz = fz - Math.PI;
                    //if (fz < -Math.PI) fz = fz + Math.PI;
                    if (am <= 0)
                    {
                        fz = 0;                                       // По шаблону
                    }
                    //if (a > 0) a = rnd.NextDouble() *  Math.PI ; else a = 0;
                    array[i, j] = Complex.FromPolarCoordinates(am, fz);
                }
            }
        }
Пример #4
0
        public static void Diapazon_С(double a1, double a2)             // Привести к диапазону комплексный кадр
        {
            if (Form1.zComplex[Form1.regComplex] == null)
            {
                MessageBox.Show("Diapazon zComplex[" + Form1.regComplex + "] == NULL"); return;
            }

            int nx = Form1.zComplex[Form1.regComplex].width;
            int ny = Form1.zComplex[Form1.regComplex].height;

            ZArrayDescriptor rez = new ZArrayDescriptor(nx, ny);

            for (int i = 0; i < nx; i++)
            {
                for (int j = 0; j < ny; j++)
                {
                    rez.array[i, j] = Form1.zComplex[Form1.regComplex].array[i, j].Magnitude;
                }
            }

            double min = SumClass.getMin(rez);
            double max = SumClass.getMax(rez);

            for (int i = 0; i < nx; i++)
            {
                for (int j = 0; j < ny; j++)
                {
                    double d = rez.array[i, j];
                    rez.array[i, j] = (d - min) * (a2 - a1) / (max - min) + a1;
                }
            }

            ZComplexDescriptor rezc = new ZComplexDescriptor(Form1.zComplex[Form1.regComplex], rez);  // Амплитуда в rez, фаза старая

            Form1.zComplex[Form1.regComplex] = rezc;

            ComplexPictureImage(Form1.regComplex);
        }
        public static ZComplexDescriptor Model_SpSUB(double am, double Lambda, int NX, int NY, double dx, double d)
        {
            ZComplexDescriptor cmpl1 = Model_Sp(am, Lambda, NX, NY, dx, d);
            ZComplexDescriptor cmpl2 = Model_Sp1(am, Lambda, NX, NY, dx, d);
            ZArrayDescriptor   sub   = new  ZArrayDescriptor(NX, NY);

            double s, s1;

            for (int i = 0; i < NX; i++)
            {
                for (int j = 0; j < NY; j++)
                {
                    s  = cmpl1.array[i, j].Phase;
                    s1 = cmpl2.array[i, j].Phase;
                    sub.array[i, j] = Math.Abs(s1 - s);
                }
            }

            double max = (SumClass.getMax(sub) - SumClass.getMin(sub)) / Math.PI;

            MessageBox.Show(" Разброс в PI = " + max);
            return(cmpl1);
        }