Компьютерная обработка изображений

Автор работы: Пользователь скрыл имя, 24 Декабря 2012 в 22:09, контрольная работа

Описание работы

В данном задании рассматриваются одноместная и двухместная бинарная операция ИЛИ с изображением. Ее суть в том, чтобы увеличить яркость участков изображения, если она ниже константы.
В цветовой модели RGB для хранения значения интенсивности каждого цветового компонента выделяется один байт, т.е. интенсивность может принимать значения в диапазоне от 0(минимальная интенсивность) до 255 (28-1) (максимальная интенсивность). Цвет пикселя описывается структурой размером 3 (или 4) байта.

Содержание работы

1. Задание №1.Написать программы, реализующие логические операции
с изображением:………………………………………………………………….3
1.1.Одноместная операция (в преобразование участвует изображение и некоторое константное значение) - операция ИЛИ с изображением.
1.2.Двухместная операция (в преобразование участвуют два изображения) - операция ИЛИ с изображением (выделение на изображении областей, которые имеют белый цвет).
2. Задание №2.Написать программы, реализующие арифметические операции с изображением:……………………………………………………….7
2.1.Одноместная (в преобразовании участвует изображение и некоторое константное значение) операция – (вычитание) с изображением.
2.2.Двухместная (в преобразовании участвуют два изображения) операция – (вычитание) с изображением (выделение на изображении областей, которые имеют белый цвет).
3. Задание №3.Написать программы, реализующие логические операции с изображением:……………………………………...……………………………11
3.1.Увеличение и уменьшение изображения с использованием метода определения неизвестных значений по ближайшему соседнему пикселю.
3.2.Увеличение и уменьшение изображения с использованием метода определения неизвестных значений с использованием кубической интерполяции.
4. Задание №4.Написать программу, реализующую масочную фильтрацию на основе заданных масок (двухмерных массивов):…………………………..18
4.1. Горизонтальный градиентный фильтр Превитта:
1 1 1
0 0 0
-1 -1 -1
4.2. Вертикальный градиентный фильтр Превитта:
-1 0 1
-1 0 1
-1 0 1
4.3. Горизонтальный градиентный фильтр Собеля:
1 2 1
0 0 0
-1 -2 -1
4.4. Вертикальный градиентный фильтр Собеля:
-1 0 1
-2 0 2
-1 0 1
5. Delphi 7………………………………………………………………………..25

Файлы: 1 файл

Kursovaya_rabota.doc

— 7.84 Мб (Скачать файл)

Федеральное агентство  по образованию Российской Федерации

Тверской Государственный  Технический Университет

Кафедра автоматизации  технологических процессов

 

 

 

 

 

 

 

 

 

 

 

 

 

Курсовая работа

по дисциплине

 

                               « Компьютерная обработка изображений ».

 

 

 

 

 

 

 

 

Выполнил: студенты 4курса ФАС

гр. ИДМ- 0713

Еремеева О.И.

Леоненков А.А.

Сафронов А.В.

                                                              Проверил: Артёмов И. Ю.

 

 

 

 

 

 

 

 

Тверь, 2008 год

Содержание:

1. Задание №1.Написать программы, реализующие логические операции

 с изображением:………………………………………………………………….3

1.1.Одноместная операция (в преобразование участвует изображение и некоторое константное значение) - операция ИЛИ с изображением.

1.2.Двухместная операция (в преобразование участвуют два изображения) - операция ИЛИ с изображением (выделение на изображении областей, которые имеют белый цвет).

2. Задание №2.Написать программы, реализующие арифметические операции с изображением:……………………………………………………….7

2.1.Одноместная (в преобразовании участвует изображение и некоторое константное значение) операция – (вычитание) с изображением.

2.2.Двухместная (в преобразовании участвуют два изображения) операция – (вычитание) с изображением (выделение на изображении областей, которые имеют белый цвет).

3. Задание №3.Написать программы, реализующие логические операции с                     изображением:……………………………………...……………………………11

3.1.Увеличение и уменьшение изображения с использованием метода определения неизвестных значений по ближайшему соседнему пикселю.

3.2.Увеличение и уменьшение изображения с использованием метода определения неизвестных значений с использованием кубической интерполяции.

4. Задание №4.Написать программу, реализующую масочную фильтрацию на основе заданных масок (двухмерных массивов):…………………………..18

4.1. Горизонтальный градиентный фильтр Превитта:

1     1     1

0     0     0

-1   -1    -1

4.2. Вертикальный градиентный фильтр Превитта:

-1     0     1

-1     0     1

-1     0     1

4.3. Горизонтальный градиентный фильтр Собеля:

1     2     1

0     0     0

-1  -2    -1

4.4. Вертикальный градиентный фильтр Собеля:

-1     0     1

-2     0     2

-1     0     1

5. Delphi 7………………………………………………………………………..25

 

 

 

Задание №1.

Теоретическая часть:

В данном задании рассматриваются одноместная и двухместная бинарная  операция ИЛИ с изображением. Ее суть в том, чтобы увеличить яркость участков изображения, если она ниже константы.

В цветовой модели RGB для хранения значения интенсивности каждого цветового компонента  выделяется один байт, т.е. интенсивность может принимать значения в диапазоне от 0(минимальная интенсивность) до 255 (28-1) (максимальная интенсивность). Цвет пикселя описывается структурой размером 3 (или 4) байта.

Младший байт младшего слова  хранит значение интенсивности красного компонента, старший байт младшего слова содержит значение интенсивности зеленого компонента, младший байт старшего слова хранит значение интенсивности синего, старший байт старшего слова хранит значение альфа-канала, определяющего прозрачность пикселя (0 – полностью непрозрачный, 255 – полностью прозрачный).

Существуют форматы, в  который для хранения цвета пикселя  выделяется не байт, а 2 байта. Соответственно, количество дискретных значений яркостей будет равно 216-1=65536.

При одноместной операции ИЛИ значение интенсивности каждой цветовой компоненты (R, G или B, альфа-канал не рассматривается) сравнивается с заранее определенной константой (ее значение должно лежать в пределах от 0 до 255).  Итоговая яркость будет больше или равна константе. Это связано с тем, что по таблице истинности ИЛИ при сложении 0 и 1, 1 и 1 получается 1. Флаг переноса С (carry) регистра флагов процессора не устанавливается, в отличие от обычной арифметической операции.

При двухместной операции ИЛИ алгоритм идентичный, только значение интенсивности цвета первого изображения сравнивается не с константой, а с со значением интенсивности цвета второго изображения.

 

Описание работы программ:

Интерфейс

Для данной лабораторной работы написаны 2 программы, иллюстрирующие необходимые алгоритмы.

Первая программа представляет диалоговое окно с двумя кнопками – Файл… и Выход. При нажатии  кнопки Файл… открывается диалоговое окно выбора изображения для загрузки. При нажатии кнопки ОК в этом диалоговом окне происходит загрузка изображения (должно быть формата .bmp) и выполнение необходимого преобразования. Выход из приложения осуществляется нажатием кнопки Выход.

 

 

Вторая программа представляет диалоговое окно с тремя кнопками – Файл 1…, Файл 2… и Выход. При  нажатии кнопки Файл 1… или Файл 2… открывается диалоговое окно выбора изображения для загрузки. При нажатии кнопки ОК в этом диалоговом окне происходит загрузка одного из изображений (должно быть формата .bmp). Если загружены оба изображения, выполняется двухместная операция ИЛИ. Выход из приложения осуществляется нажатием кнопки Выход.

 

 

Краткое описание общего программного кода

Загрузка изображения  из файла выполняется API-функцией LoadImage. В качестве входных параметров она получает имя выбранного файла. Функция возвращает дескриптор (HANDLE) битового массива, который хранится как глобальная переменная.

Рисование изображения  происходит при обработке сообщения WM_PAINT, расположенного в CallBack-функции MainDlgProc, являющейся оконной процедурой главного окна. Для рисования создается контекст графического устройства в памяти, совместимый с диалоговым окном. В нем рисуется битовый массив и затем копируется в контекст самого диалогового окна функцией BitBlt.  Она позволяет менять размеры изображения. Перед копированием устанавливается флаг HALFTONE функцией SetStretchBltMode. Это позволяет выводить интерполированнное изображение.

Основные алгоритмы

Требуемые операции преобразования изображения и в первом, и во втором случаях выполняет функция Logic_OR_Operation, получающая в качестве входного параметра дескриптор графического контекста устройства диалогового окна.

Для первого случая:

 

    void Logic_OR_Operation(HDC hdc)

   {

      DWORD c = 128;

      DWORD color = 0;

       BYTE bRR = 0,bBB = 0,bGG = 0;

 

       for(long y=SRC_Y_OFFSET; y<SRC_Y_OFFSET+HEIGHT; y++)

       {

     for(long x=SRC_X_OFFSET; x<SRC_X_OFFSET+WIDTH; x++)

     {

  color = GetPixel(hdc,x,y);

  bRR = (GetRValue(color) | c);

  bGG = (GetGValue(color) | c);

  bBB = (GetBValue(color) | c);

  SetPixel(hdc,RES_X_OFFSET-SRC_X_OFFSET+x,RES_Y_OFFSET-

                      SRC_Y_OFFSET+y,RGB(bRR,bGG,bBB));                                                                       

     }

       }

    }

 

В функции определены переменные: с типа DWORD – значение константы, color типа DWORD – значение цвета получаемого пикселя, а также байты (BYTE) bRR, bGG, bBB, хранящие преобразованные значения каждого цветового компонента:

 

      DWORD c = 128;

      DWORD color = 0;

      BYTE bRR = 0,bBB = 0,bGG = 0;

 

Далее расположен цикл for по переменной Y, имеющий вложенный цикл for по переменной Х. Константы SRC_Y_OFFSET, SRC_X_OFFSET, HEIGHT, WIDTH определены в глобальной области видимости программы с помощью директивы препроцессора #define и определяют соответственно смещение изображения по оси Y, по оси Х, а также его высоту и ширину.

В теле вложенного цикла значение цвета исходного изображения  присваивается переменной color. Затем для каждого цветового компонента производится операция ИЛИ с заданной константой. Значения яркостей отдельных цветовых компонентов получают с помощью соответствующих макросов GetRValue, GetGValue, GetBValue. После этого происходит установка нового пикселя функцией SetPixel.

 

    for(long y=SRC_Y_OFFSET; y<SRC_Y_OFFSET+HEIGHT; y++)

    {

  for(long x=SRC_X_OFFSET; x<SRC_Х_OFFSET+WIDTH; x++)

  {

  color = GetPixel(hdc,x,y);

  bRR = (GetRValue(color) | c);

  bGG = (GetGValue(color) | c);

  bBB = (GetBValue(color) | c);

  SetPixel(hdc,RES_X_OFFSET-SRC_X_OFFSET+x,RES_Y_OFFSET-

                      SRC_Y_OFFSET+y,RGB(bRR,bGG,bBB));                                                                       

   }

    }

 

Для второго случая:

 

  void Logic_OR_Operation(HDC hdc)

  {

    DWORD dwSrcColor1=0, dwSrcColor2=0;

    BYTE bRR=0,bBB=0,bGG=0;

  

    for(long y=15; y<HEIGHT+15; y++)

   {

  for(long x=0; x<WIDTH; x++)

  {

  dwSrcColor1 = GetPixel(hdc,x+SRC1_X_OFFSET,y);

  dwSrcColor2 = GetPixel(hdc,x+SRC2_X_OFFSET,y);

  bRR = (GetRValue(dwSrcColor1) | GetRValue(dwSrcColor2));

  bGG = (GetGValue(dwSrcColor1) | GetGValue(dwSrcColor2));

  bBB = (GetBValue(dwSrcColor1) | GetBValue(dwSrcColor2));

  SetPixel(hdc,x+RES_X_OFFSET,y,RGB(bRR,bGG,bBB));

  }

     }

    }

 

Здесь также происходит объявление необходимых переменных. Так как теперь 2 исходных изображения, то необходимо хранить цвет пикселя  каждого из них, поэтому объявлены  две переменные типа DWORD – dwSrcColor1 и dwSrcColor2.

Затем в цикле получают значения цветов пикселей каждого из изображений, и выполняется операция ИЛИ между ними. Результаты преобразования каждого компонента «собирают» в DWORD макросом RGB и устанавливают новый цвет пикселя.

 

 

 

Выводы:

Рассмотренный алгоритм позволяет получить логическую сумму двух значений цветов. При этом результирующее значение всегда будет либо равно одному из исходных значений, либо больше. С помощью него можно выделять участки имеющие белый цвет, т.е. максимальную яркость всех компонентов.

 

Задание №2.

Теоретическая часть:

В данном  задании рассматриваются одноместная и двухместная операция вычитания с изображением. Ее суть в том, понизить яркость изображения путем вычитания интенсивностей пикселей.

В цветовой модели RGB для хранения значения интенсивности каждого цветового компонента  выделяется один байт, т.е. интенсивность может принимать значения в диапазоне от 0 (минимальная интенсивность) до 255 (28-1) (максимальная интенсивность). Цвет пикселя описывается структурой размером 3 (или 4) байта.

Младший байт младшего слова  хранит значение интенсивности красного компонента, старший байт младшего слова содержит значение интенсивности зеленого компонента, младший байт старшего слова хранит значение интенсивности синего, старший байт старшего слова хранит значение альфа-канала, определяющего прозрачность пикселя (0 – полностью непрозрачный, 255 – полностью прозрачный).

Существуют форматы, в  который для хранения цвета пикселя  выделяется не байт, а 2 байта. Соответственно, количество дискретных значений яркостей будет равно 216-1=65536.

При одноместной операции вычитания значение интенсивности  каждой цветовой компоненты (R, G или B, альфа-канал не рассматривается) сравнивается с заранее определенной константой (ее значение должно лежать в пределах от 0 до 255.

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

 

Описание работы программ:

Интерфейс

Для данной лабораторной работы написаны 2 программы, иллюстрирующие необходимые алгоритмы.

Первая программа представляет диалоговое окно с двумя кнопками – Файл… и Выход. При нажатии  кнопки Файл… открывается диалоговое окно выбора изображения для загрузки. При нажатии кнопки ОК в этом диалоговом окне происходит загрузка изображения (должно быть формата .bmp) и выполнение необходимого преобразования. Выход из приложения осуществляется нажатием кнопки Выход.

 

 

Вторая программа представляет диалоговое окно с тремя кнопками – Файл 1…, Файл 2… и Выход. При нажатии кнопки Файл 1… или Файл 2… открывается диалоговое окно выбора изображения для загрузки. При нажатии кнопки ОК в этом диалоговом окне происходит загрузка одного из изображений (должно быть формата .bmp). Если загружены оба изображения, выполняется двухместная операция вычитания. Выход из приложения осуществляется нажатием кнопки Выход.

 

 

 

Краткое описание общего программного кода

Загрузка изображения из файла  выполняется API-функцией LoadImage. В качестве входных параметров она получает имя выбранного файла. Функция возвращает дескриптор (HANDLE) битового массива, который хранится как глобальная переменная.

Рисование изображения происходит при обработке сообщения WM_PAINT, расположенного в CallBack-функции MainDlgProc, являющейся оконной процедурой главного окна. Для рисования создается контекст графического устройства в памяти, совместимый с диалоговым окном. В нем рисуется битовый массив и затем копируется в контекст самого диалогового окна функцией BitBlt.  Она позволяет менять размеры изображения. Перед копированием устанавливается флаг HALFTONE функцией SetStretchBltMode. Это позволяет выводить интерполированнное изображение.

Основные алгоритмы

Требуемые операции преобразования изображения  и в первом, и во втором случаях выполняет функция Substraction, получающая в качестве входного параметра дескриптор графического контекста устройства диалогового окна.

Информация о работе Компьютерная обработка изображений