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); }
/// <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(); }
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(); }
/// <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(); }
/// <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); }
/// <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(); }
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(); }
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); }
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(); }
/// <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]; } }
//------------------------------------------------------------------------------------------------------------------- /// <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); }