Получение числовой зависимости критической частоты f0F2 ионосферного слоя F2 от времени t из динамического спектра f0F2(t) с помощью языка программирования C#

_ID_

Предварительный просмотр:

Получение числовой зависимости критической частоты f0F2 ионосферного слоя F2 от времени t из динамического спектра f0F2(t) с помощью языка программирования C#

Для изучения физических явлений зачастую используются спектральные анализ данных.

Спектр (лат. spectrum «видение») в физике – это распределение значений физической величины (обычно энергии, частоты или массы).

По характеру распределения значений физической величины спектры могут быть:

-  дискретными (линейчатыми),

- непрерывными (сплошными),

- а также представлять комбинацию (наложение) дискретных и непрерывных спектров.

В своей работе мы часто используем зависимость частоты f0F2 (Гц) от времени T (часы, минуты) (изменение концентрации электронов в ионосфере).

Примерно это выглядит следующим образом.

Данные зависимости достаточно удобно использовать только в том случае если временной интервал частот лежит в больших временных масштабах, в противном случае провести анализ будет достаточно сложно. Но как правило, изучение зависимости f0F2(t), на больших временных масштабах не дает точного результата.

Для более точного прогнозирование космической погоды и крупномасштабных событий в Солнечно-Земной физике нам необходимо использовать в своих работах зависимости критической частоты f0F2 ионосферного слоя F2 от наименьшего временного интервала (минуты).

Станции вертикального зондирования ионосферного слоя F2, выдают максимум пятиминутные данные, что очень грубо влияют на расчеты.

В своей работе мы решили использовать динамическую зависимость критической f0F2 от времени T.

И в связи с этим у нас возник вопрос.

Как из данной спектральной зависимости получить числовые значения?

С появлением цифровых технологий все больше и больше приборов стали работать в режиме RGB.

 

RGB (аббревиатура английских слов red, green, blue красный, зелёный, синий) или КЗС — аддитивная цветовая модель, как правило, описывающая способ кодирования цвета для цветовоспроизведения с помощью трёх цветов, которые принято называть основными.

Выбор основных цветов обусловлен особенностями физиологии восприятия цвета сетчаткой человеческого глаза. Цветовая модель RGB нашла широкое применение в технике.

Аддитивной она называется потому, что цвета получаются путём добавления (англ. addition) к чёрному цвету. Иначе говоря, если цвет экрана, освещённого цветным прожектором, обозначается в RGB как (r1, g1, b1), а цвет того же экрана, освещённого другим прожектором, — (r2, g2, b2), то при освещении двумя прожекторами цвет экрана будет обозначаться как (r1+r2, g1+g2, b1+b2).

Изображение в данной цветовой модели состоит из трёх каналов. При смешении основных цветов, например, синего (B) и красного (R), получается пурпурный (M, magenta), зелёного (G) и красного (R) — жёлтый (Y, yellow), зелёного (G) и синего (B) — циановый (С, cyan). При смешении всех трёх основных цветов получается белый цвет (W, white).

  1. Для решения данной задачи данную зависимость f0F2(t), привели в безразмерный вид.

  1. Учитывая разрешение изображения и количество пикселей по вертикали 565 и горизонтали 167 нашли зависимость пикселей по высоте изображения к его ширине, что позволило получить нам 1440 точек по оси времени.  На один пиксель по вертикале приходится примерно 0, 3 пикселя по горизонтали. А это значит, что 1440 пикселей соответствует 24 (часа в сутках) умножить на 60 (минут в часе). Таким образом мы получили минутные данные.
  2. Конвертировав изображение из jpg формата в bmp и инвертировав его в черно – белый цвет, мы пропустили полученное изображение через ранее нами написанный код на языке программирования C# и нашли максимальное значение критической частоты, а именно максимальные значения пикселей на данном диапазоне h(высоты) от l(длинны) изображения, записав их в виде матрицы зависимости частоты f0f2 (Герц) от времени t(минутах).

Код программы для оцифровки динамического спектра f0F2(t) в число представлен ниже:


namespace _Работа_с_изображением

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private Bitmap bmp;

        private int Gray;

       

        private void button1_Click(object sender, EventArgs e)

        {

            OpenFileDialog dialog = new OpenFileDialog();

           

            if (dialog.ShowDialog() == DialogResult.OK)

            {

                // Загружаем изображение из выбранного файла

                Image image = Image.FromFile(dialog.FileName);

                int width = image.Width;

                int height = image.Height;

                pictureBox1.Width = width; // Подстраивается pictureBox под размер изображения

                pictureBox1.Height = height;

                // Создаем и загружаем изображение в формате bmp

                bmp = new Bitmap(image, width, height);

                // Записываем изображение в pictureBox1

                pictureBox1.Image = bmp;

            }

        }

        private void button2_Click(object sender, EventArgs e)

        {            

                // Циклы для перебора всех пикселей на изображении

                for (int i = 0; i < bmp.Width; i++)

                    for (int j = 0; j < bmp.Height; j++)

                    {

                        // Извлекаем в R значение красного цвета

                        int R = bmp.GetPixel(i, j).R;

                        // Извлекаем в G значение зеленого цвета

                        int G = bmp.GetPixel(i, j).G;

                        // Извлекаем в B значение синего цвета

                        int B = bmp.GetPixel(i, j).B;

                        // Высчитываем среднее арифметическое

                        int Gray = (R = G + B) / 3;

                        // Переводим число в значение цвета.

                        // 255 – показывает степень прозрачности.

                        // Остальные значения одинаковы

                        Color p = Color.FromArgb(255, Gray, Gray, Gray);

                        // Записываем цвет в текущую точку

                        bmp.SetPixel(i, j, p);

                       

                    }

                // Вызываем функцию перерисовки окна

                Refresh();

        }

        private void button3_Click(object sender, EventArgs e)

        {

            Int32 n;

            Int32 a;

            n = pictureBox1.Width; // Длинна изображения

            a = pictureBox1.Height; //Высота изображения

            double Imin=255;

            double t=0, v=0;

         //-------------------------------------

            System.IO.StreamWriter textFile = new System.IO.StreamWriter(@"D:\Частота.txt");

            System.IO.StreamWriter textFile1 = new System.IO.StreamWriter(@"D:\Время.txt");

            for (int i = 0; i < n; i++ )

            {

                Imin = 255;

                for (int j = i; j <= i; j++)

                {

                    //--------------------------------------

                    for (int k = 0; k < a; k++)

                    {

                        Gray = 0;

                        int R = bmp.GetPixel(j, k).R;

                        int G = bmp.GetPixel(j, k).G;

                        int B = bmp.GetPixel(j, k).B;

                      //  Gray = (R = G + B) / 3;

                        Gray = R + G + B;

                        if (Gray < Imin)

                        {

                            Imin = Gray;

                            t = ((j * 1440) / pictureBox1.Width);    // Взяты минуты

                            v = (16000 - ((16000 * k) / pictureBox1.Height));

                        }

                       

                    }

                    Console.Write(v);

                    textFile.WriteLine(v);

                    Console.Write(t);

                    textFile1.WriteLine(t);

                    //-----------------------------------------

                }

            }

            textFile.Close();

            textFile1.Close();

                textBox1.Text = Convert.ToString(t);

                textBox2.Text = Convert.ToString(v);

                //System.IO.StreamWriter textFile = new System.IO.StreamWriter(@"D:\Частота.txt");

                //Console.Write(v);

                //textFile.WriteLine(v);

                //textFile.Close();

        }

    }

}

   

Таким образом мы научились получать зависимость критической частоты f0F2 от времени на малых интервалах времени, данная технология обработки динамических jpg спектров, полученных со станций вертикального зондирования ионосферного слоя F2, в дальнейшем позволит нам более точно прогнозировать космическую погоду и другие крупномасштабные события в Солнечно Земной физике.