Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мет пособия по пров прак и лаб работ.doc
Скачиваний:
7
Добавлен:
20.11.2019
Размер:
61.44 Кб
Скачать

Лабораторная работа №3. Арифметические операции с изображениями.

№ варианта

Задание

1

a) Одноместная (в преобразование участвует изображение и некоторое константное значение) операция + (сложение) с изображением (повышение яркости изображения)

Возможный вариант реализации:

c = 128;

for(long y=0; y<newy; y++) {

for(long x=0; x<newx; x++){

fX = x * xScale;

SetPixelColor(x,y,GetPixelColor(x,y)+c);

}

}

b) Двухместная (в преобразование участвуют два изображения) операция + (сложение) с изображением.

Пример:

+ =

2

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

Возможный вариант реализации:

c = 128;

for(long y=0; y<newy; y++) {

for(long x=0; x<newx; x++){

fX = x * xScale;

SetPixelColor(x,y,GetPixelColor(x,y)-c);

}

}

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

Пример:

- =

3

a) Одноместная (в преобразование участвует изображение и некоторое константное значение) операция * (умножение) с изображением (значительное повышение интенсивности изображения)

Возможный вариант реализации:

c = 128;

for(long y=0; y<newy; y++) {

for(long x=0; x<newx; x++){

fX = x * xScale;

SetPixelColor(x,y,GetPixelColor(x,y)*c);

}

}

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

Пример:

И =

Лабораторная работа №4. Геометрические преобразования изображений.

№ варианта

Задание

1

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

Возможный вариант реализации:

xScale = (float)head.biWidth / (float)newx;

yScale = (float)head.biHeight / (float)newy;

for(long y=0; y<newy; y++) {

info.nProgress = (long)(100*y/newy);

fY = y * yScale;

for(long x=0; x<newx; x++){

fX = x * xScale;

SetPixelColor(x,y,GetPixelColor((long)fX,(long)fY));

}

}

b) Увеличение и уменьшение изображения с использованием метода

определение неизвестных значений с использованием линейной интерполяции.

2

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

Возможный вариант реализации:

xScale = (float)head.biWidth / (float)newx;

yScale = (float)head.biHeight / (float)newy;

for(long y=0; y<newy; y++) {

info.nProgress = (long)(100*y/newy);

fY = y * yScale;

for(long x=0; x<newx; x++){

fX = x * xScale;

SetPixelColor(x,y,GetPixelColor((long)fX,(long)fY));

}

}

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

3

a) Зеркальное отражение изображения

Возможный вариант реализации:

for(y=0; y < head.biHeight; y++) {

for(x=0; x <= wdt; x++)

SetPixelIndex(x,y,GetPixelIndex(wdt-x,y));

}

b) Поворот изображения

Возможный вариант реализации:

см. http://www.xdp.it/ CxImage::Rotate