Получение числовой
зависимости критической частоты 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), привели в безразмерный вид.
2.
Учитывая
разрешение изображения и количество пикселей по вертикали 565 и горизонтали 167
нашли зависимость пикселей по высоте изображения к его ширине, что позволило
получить нам 1440 точек по оси времени. На один пиксель по вертикале
приходится примерно 0, 3 пикселя по горизонтали. А это значит, что 1440
пикселей соответствует 24 (часа в сутках) умножить на 60 (минут в часе). Таким
образом мы получили минутные данные.
3.
Конвертировав
изображение из 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, в дальнейшем позволит
нам более точно прогнозировать космическую погоду и другие крупномасштабные
события в Солнечно Земной физике.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.