Главная страница
Навигация по странице:

  • ЭЛЕМЕНТЫ ЛИНЕЙНОЙ ФИЛЬТРАЦИИ ИЗОБРАЖЕНИЙ ».

  • Студент гр. 1106

  • Свертка

  • Лабораторная работа по информатике 333. Лаба 15. Отчет по лабораторной работе 15 элементы линейной фильтрации изображений


    Скачать 181.22 Kb.
    НазваниеОтчет по лабораторной работе 15 элементы линейной фильтрации изображений
    АнкорЛабораторная работа по информатике 333
    Дата09.03.2023
    Размер181.22 Kb.
    Формат файлаdocx
    Имя файлаЛаба 15.docx
    ТипОтчет
    #976637

    МИНОБРНАУКИ РОССИИ

    Санкт-Петербургский государственный

    электротехнический университет

    «ЛЭТИ» им. В.И. Ульянова (Ленина)
    Кафедра ФРТ

    отчет

    по лабораторной работе № 15

    «ЭЛЕМЕНТЫ ЛИНЕЙНОЙ ФИЛЬТРАЦИИ ИЗОБРАЖЕНИЙ».


    Студент гр. 1106: Иванчин А.В

    Преподаватель: Чиркунова А. А.



    Санкт-Петербург

    2022

    Цель работы.

    выполнение линейной пространственной фильтрации изображений средствами C++ в среде Visual Studio.

    Краткие теоретические сведения.

    1. Линейная фильтрация в пространственной области заключается в проходе по изображению скользящим окном определенного размера, причем на каждой итерации (при каждом положении окна) вычисляется линейная комбинация значений яркости пикселов, попадающих в это окно, с коэффициентами матрицы весов фильтра, называемой также маской или ядром линейного фильтра. Размер маски равен размеру окна. Свертка изображения - Im с маской Mask.

    2. Простейшим видом линейной фильтрации в пространственной области является фильтр скользящего среднего. Результатом такой операции является среднее значение, вычисленное по всем пикселам окна. Математически это эквивалентно свертке с маской, все элементы которой равны 1/n, где n - число элементов маски.

    3. Результатом скользящего среднего является «размытие» исходного изображения.

    4. Фильтр Гаусса применяют для сглаживания изображения, что эквивалентно фильтрации нижних частот и подавлению высоких частот. В результате изображение размывается, теряется четкость контуров, но также уменьшается шум.

    5. Сила размытия изображения зависит от размера маски фильтра.


    Не полный код

    private: System::Void button1_Click_1(System::Object^ sender, System::EventArgs^ e)

    {

    if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)

    {

    img1 = gcnew Bitmap(openFileDialog1->FileName);

    pictureBox1->Image = Image::FromFile(openFileDialog1->FileName);

    }

    }
    private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {

    }

    private: System::Void button2_Click_1(System::Object^ sender, System::EventArgs^ e)

    {
    array^ cl_ar = gcnew array(3, 3);

    for (int i = 0; i < img1->Width - 3; i++)

    {

    for (int j = 0; j < img1->Height - 3; j++)

    {

    int sum_r = 0, sum_g = 0, sum_b = 0;

    for (int ii = 0; ii < 3; ii++)

    {

    for (int jj = 0; jj < 3; jj++)

    {

    cl_ar[ii, jj] = img1->GetPixel(i + ii, j + jj);

    sum_r += cl_ar[ii, jj].R;

    sum_g += cl_ar[ii, jj].G;

    sum_b += cl_ar[ii, jj].B;

    }

    }
    textBox1->Text += "(" + sum_r.ToString() + "," + sum_g.ToString() + "," + sum_b.ToString() + ")" + " \r\n";

    }

    }

    }

    private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)

    {

    if (openFileDialog2->ShowDialog() == System::Windows::Forms::DialogResult::OK)

    {

    img2 = gcnew Bitmap(openFileDialog2->FileName);

    pictureBox2->Image = Image::FromFile(openFileDialog2->FileName);

    }

    }
    private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e)

    {

    array^ cl_ar = gcnew array(3, 3);

    Bitmap^ img = img2;

    for (int i = 1; i < img2->Width - 2; i++)

    {

    for (int j = 1; j < img2->Height - 2; j++)

    {

    int sum_r = 0, sum_g = 0, sum_b = 0;

    for (int ii = -1; ii < 2; ii++)

    {

    for (int jj = -1; jj < 2; jj++)

    {

    cl_ar[ii + 1, jj + 1] = img2->GetPixel(i + ii, j + jj);

    sum_r += cl_ar[ii + 1, jj + 1].R;

    sum_g += cl_ar[ii + 1, jj + 1].G;

    sum_b += cl_ar[ii + 1, jj + 1].B;

    }

    }

    img->SetPixel(i, j, Color::FromArgb(sum_r / 9, sum_g / 9, sum_b / 9));

    }

    }

    pictureBox3->Image = img;

    }
    private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e)

    {

    if (openFileDialog3->ShowDialog() == System::Windows::Forms::DialogResult::OK)

    {

    img3 = gcnew Bitmap(openFileDialog3->FileName);

    pictureBox4->Image = Image::FromFile(openFileDialog3->FileName);

    }

    }
    private: System::Void button6_Click(System::Object^ sender, System::EventArgs^ e)

    {

    array^ cl_ar = gcnew array(3, 3);

    Bitmap^ img = img3;

    int mas[3][3] = { {1, 2, 1}, {2, 4, 2}, {1, 2, 1} };

    for (int i = 1; i < img3->Width - 2; i++)

    {

    for (int j = 1; j < img3->Height - 2; j++)

    {

    int sum_r = 0, sum_g = 0, sum_b = 0;

    for (int ii = -1; ii < 2; ii++)

    {

    for (int jj = -1; jj < 2; jj++)

    {

    cl_ar[ii + 1, jj + 1] = img3->GetPixel(i + ii, j + jj);

    sum_r += cl_ar[ii + 1, jj + 1].R * mas[ii + 1][jj + 1];

    sum_g += cl_ar[ii + 1, jj + 1].G * mas[ii + 1][jj + 1];

    sum_b += cl_ar[ii + 1, jj + 1].B * mas[ii + 1][jj + 1];

    }

    }

    img->SetPixel(i, j, Color::FromArgb(sum_r / 16, sum_g / 16, sum_b / 16));

    }

    }

    pictureBox5->Image = img;

    }
    };
    Проверка






    Вывод.

    Выполнена линейная пространственная фильтрация изображений средствами C++ в среде Visual Studio.


    написать администратору сайта