close

Вход

Забыли?

вход по аккаунту

?

Кит записка (2)

код для вставкиСкачать
МIНIСТЕРСТВО ОСВIТИ, НАУКИ,
МОЛОДI ТА СПОРТУ УКРАЇНИ
ДОНЕЦЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
Кафедра "Автоматихованні систему уравління"
ПОЯСНЮВАЛЬНА ЗАПИСКА
до курсового проекту з дисципліни "Методи та способи комп'ютерних інформаційних технологій"
на тему: "Обробка графічних зображень і конвертація файлів"
Виконавець студент гр. ІУС-10В Костишев О.В.
(група) (підпис) (ПІП) Керівник ______________ Меркулова Е.В.
(підпис) Оцінка ________________ Дата захисту ________________ ДОНЕЦЬК - ДонНТУ -2012
ДОНЕЦЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
Факультет КНТ
Кафедра автоматизованих систем управління
ЗАВДАННЯ НА КУРСОВУ РОБОТУ
по дисципліні "Методи та способи комп'ютерних інформаційних технологій"
Студенту Костишеву О.В.групи ІУС-10В Тема курсової роботи (номер завдання) Обробка графічних зображень та конвертація файлів Вихідні дані: Програма, яка реалізовує наступні дії: зчитування інформації із графічного файлу, корекція кольорів, інструмент "піпетка", інструмент "заміна кольору", збереження зображення у файл. Засоби, що рекомендуються, і методи рішення задачі, мова програмування, прикладні програми C# Література, що рекомендується Конспект лекцій курсу Зміст пояснювальної записки і графічної частини (типове чи індивідуальне)Типове
Дата видачі завданняТермін виконання
Керівник (Підпис)(Посада, П.І.П.)
Содержание
Введение...............................................................................3
1. Постановка задачи...............................................................5
2. Описание математических методов представление и обработки графических изображений......................................................6
3. Реализация методов в виде алгоритмов......................................8
3.1. Инструмент "пипетка".....................................................8
3.2. Инструмент "замена цвета"...............................................8
3.3. Представление изображения в разных цветовых моделях............................................................8
4. Описание разработанного программного приложения................11
4.1. Описание функций и их переменных..............................11
4.2. Результаты тестирования приложения............................15
Заключение............................................................................19
Литература.............................................................................20
Приложения............................................................................21
А. Код программы..........................................................21
Б. Описание tga файла....................................................27
В. Описание меню.........................................................29
Введение
Цель данной курсовой работы - закрепление практических навыков по работе с разными компьютерными информационными технологиями. Получение глубоких знаний по дисциплине "Методы и способы компьютерных технологий". Получение практических навыков самостоятельной разработки основных компонентов информационных компьютеризованных подсистем. Графическая обработка изображений - один из аспектов современных информационных технологий. Современная вычислительная техника помогает обрабатывать графические файлы очень быстро, точно и качественно.
Изображения делятся на два типа - векторные и растровые.
Векторные изображения - изображения, основанные на использовании элементарных геометрических объектов, таких как точки, линии, сплайны и многоугольники. Векторные изображения являются графическими изображениями математических функций. Растровое изображение представляет собой сетку пикселей или цветных точек. Главные характеристики растрового изображения - количество пикселей, глубина цвета, цветовая модель и разрешение.
Главное различие векторной и растровой графики в том, что растром можно описать все что угодно, тем временем как векторной графикой не всегда можно описать объект. Векторные файлы имеют меньший размер, но позволяют рисовать с помощью них большие объекты.
Более распространенные изображения являются растровые в связи с большей простотой их описания.
1 Постановка задачи
1. Считать информацию из графического файла заданного формата
2. Реализовать обработку информации соответственно заданию.
3. Организовать сохранения измененного изображения в заданном формате.
Задание:
Корекція кольорів
Представлення кольорів|цвіту| в різних моделях
Інструмент "Піпетка"
Інструмент "Заміна кольору"
tga
Bmp|
tga
2 Описание математических методов представление и обработки графических изображений
Считывание изображения происходит из формата tga. Формат tga - растровый графический формат. Первоначально был создан компанией Truevision Inc. для графических адаптеров собственного производства ещё в 1984, но в дальнейшем стал популярен на самых разных платформах, особенно в области обработки видео, анимации.
Файл tga имеет следующий формат:
Заголовок файла:
-Длина идентификатора
-Тип карты цветов
-Тип Изображения
-Описание карты цветов
-Описание изображения
Изображение:
-Идентификатор
-Данные карты цветов
-Данные изображения
Считывание изображения происходит следующим образом:
1. Изображение находится при помощи openFileDialog.
2. Найденное изображение загружается в Bitmap и сохраняется в PictureBox.
Для реализации задания были разработаны алгоритмы.
1. Инструмент "пипетка".
Суть инструмента "пипетка" является в выборе цвета пикселя, на который указывает курсор. 2. Инструмент "замена цвета".
Для реализации этого инструмента необходима реализация инструмента "пипетка". Цвет, который заменяется в изображении, выбирается инструментом "пипетка". 3. Представление изображения в разных цветовых моделях.
Цветовая модель - термин, обозначающий абстрактную модель описания представления цветов в виде кортежей чисел, обычно из трёх или четырёх значений, называемых цветовыми компонентами или цветовыми координатами.
Цветовые модели можно классифицировать по их целевой направленности:
1.1. XYZ - описание восприятия; 1.2 . Аддитивные модели - рецепты получения цвета на мониторе (например, RGB).
1.3 .Полиграфические модели - получение цвета при использовании разных систем красок и полиграфического оборудования (например, CMYK).
1.4 .Модели, не связанные с физикой оборудования, являющиеся стандартом передачи информации.
1.5 .Математические модели, полезные для каких-либо способов цветокоррекции, но не связанные с оборудованием, например HSV.
3 Реализация методов в виде алгоритмов
Для каждого задания был реализован свой алгоритм.
Алгоритмы приведены далее.
3.1 Инструмент "пипетка".
Для реализации этого инструмента был разработан алгоритм:
3.1. Изображение помещается в PictureBox.
3.2. По щелчку мыши на изображение отслеживаются координаты щелчка и путем получения пикселя в этом месте извлекается цвет заданного пикселя.
3.2 Инструмент "замена цвета"
Для реализации этого инструмента был разработан алгоритм:
1.1. Выбирается цвет, который требуется заменить, инструментом "пипетка".
1.2. Вводится цвет, на который требуется заменить.
1.3. Проходит цикл по изображению, выявляя пиксели, цвет которых требуется заменить.
1.4. Цвета пикселей заменяются на заданный.
3.3 Представление изображения в разных цветовых моделях.
В проекте предоставлена возможность представления изображения в 4 цветовых моделях: CMYK, YUV, YIQ, LMS.
CMYK - основная субтрактивная цветовая модель, используемая в полиграфии.
Компоненты модели - Cyan, Magenta, Yellow, Kontrol.
YUV - применяется в телевидении для стандарта PAL.
Компоненты модели - яркость и две цветоразностных.
YIQ - применяется в телевидении для стандарта NTSC.
Компоненты модели - яркость и две искусственных цветоразностных.
LMS - цветовое пространство представляющее собой ответы трёх типов колбочек Компоненты модели - long wavelength, middle wavelength, short wavelength.
Для представления в каждой модели были использованы формулы пересчета цветов:
CMYK :
C = 255 - R;
M = 255 - G;
Y = 255 - B;
Если C < M
K = C;
В другом случае K = M;
Если Y < K
K = Y;
Если K>0
C = C - K;
M = M - K;
Y = Y - K;
YUV:
Y = 0.299 * R + 0.587 * G + 0.114 * B;
U = -0.14713 * R - 0.28886 * G + 0.436 * B + 128;
V = 0.615 * R - 0.51499 * G - 0.10001 * B + 128;
YIQ:
Y = 0.299 * R + 0.587 * G + 0.114 * B;
I = 0.596 * R - 0.274 * G - 0.322 * B;
Q = 0.211 * R - 0.522 * G + 0.311 * B;
LMS:
L = 0.3811*R + 0.5783*G + 0.0402*B
M = 0.1967*R + 0.7244*G + 0.0782*B
S = 0.0241*R + 0.1288*G + 0.8444*B
После пересчета соответствующие компоненты в пикселе заменяются на новые.
4 Описание разработанного программного приложения
Данная работа была реализована на языке С#. Все функции для работы с сигналом были разработаны самостоятельном, Проект содержит 5 функций и 15 обработчиков событий.
Глобально объявленные переменные
ИмяТипНазначениеloadedImageBitmapИзображение, загруженное из файла.mainImageBitmapИзображение исходного picturebox.editedImageBitmapИзмененное изображение. Таблица 4.1 - Описание используемых переменных.
4.1. Описание функций и их переменных
Функция void to_cmyk()
Функция реализует преобразования изображения в цветовую модель CMYK.
ИмяТипНазначениеiintПеременная цикла.jintПеременная цикла.CdoubleCyan.MdoubleMagenta.YdoubleYellow.KdoubleControl. Таблица 4.2 - Описание используемых переменных.
Функция void to_yiq()
Функция реализует преобразования изображения в цветовую модель YIQ.
ИмяТипНазначениеiintПеременная цикла.jintПеременная цикла.YintЯркость.IintИскусственная цветоразностная.QintИскусственная цветоразностная. Таблица 4.3 - Описание используемых переменных.
Функция void to_yuv()
Функция реализует преобразования изображения в цветовую модель YUV.
ИмяТипНазначениеiintПеременная цикла.jintПеременная цикла.YintЯркость.UintЦветоразностная.VintЦветоразностная. Таблица 4.4 - Описание используемых переменных.
Функция void to_lms()
Функция реализует преобразования изображения в цветовую модель LMS.
ИмяТипНазначениеiintПеременная цикла.jintПеременная цикла.LintLong wavelength.MintMiddle wavelength.SintShort wavelength. Таблица 4.5 - Описание используемых переменных.
Функция void colorreplace()
Функция реализует замену цвета.
ИмяТипНазначениеRintКрасный.GintЗеленый.BintСиний.iintПеременная цикла.jintПеременная цикла. Таблица 4.6 - Описание используемых переменных.
Функция pictureBox1_Click(object sender, EventArgs e)
Реализует получение цвета. Инструмент "пипетка".
ИмяТипНазначениеpPointПозиция курсора на pictureBox1.argbintЦветовая переменная. Таблица 4.7 - Описание используемых переменных.
4.2 Результаты тестирования приложений
Рисунок 4.1 - Начальное окно приложения.
Рисунок 4.2 - Приложение с открытым изображением.
Рисунок 4.3 - Изображение, преобразованное в CMYK.
Рисунок 4.4 - Изображение, преобразованное в YUV.
Рисунок 4.5 - Изображение, преобразованное в YIQ.
Рисунок 4.6 - Изображение, преобразованное в LMS.
Рисунок 4.7 - Изображение с полученным и замененным цветом
Заключение
При выполнении курсовой работы был открыт, обработан и сохранен файл изображения. Представления изображения в разных цветовых моделях позволят корректно отображать изображения на разных объектах. Представленные инструменты полезны для обработки изображений, так как имеют полезные функции. Реализованная задача является важным аспектом в современных информационных технологиях. Обработка изображений всегда была частью компьютерной обработки и всегда будет являться таковой.
Литература
* B. Jahne, Digital Image Processing: Springer-Verlag Berlin Heidelberg, 2002
* Р. Гонсалес, Р. Вудс, Цифровая обработка: Техносфера ISBN 5-94836-028-8; 2006 г.
* ru.wikipedia.org.
Приложение А Код программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace ImageProcessing
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Bitmap loadedImage, mainImage;
public Bitmap editedImage;
private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
loadedImage = new Bitmap(@openFileDialog1.FileName);
editedImage = new Bitmap(@openFileDialog1.FileName);
mainImage = new Bitmap(@openFileDialog1.FileName);
pictureBox1.Width = mainImage.Width;
pictureBox1.Height = mainImage.Height;
pictureBox2.Width = mainImage.Width;
pictureBox2.Height = mainImage.Height;
pictureBox1.Image = mainImage;
pictureBox2.Image = null;
progressBar1.Maximum = mainImage.Width;
pictureBox2.Update();
pictureBox1.Update();
}
button1.Enabled = true;
button10.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = true;
button5.Enabled = true;
pictureBox1.Enabled = true;
pictureBox2.Enabled = true;
pictureBox3.Enabled = true;
pictureBox4.Enabled = true;
textBox1.Enabled = true;
textBox2.Enabled = true;
textBox3.Enabled = true;
}
private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)
{
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
editedImage.Save(@saveFileDialog1.FileName);
}
}
private void выходToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void button1_Click(object sender, EventArgs e)
{
progressBar1.Value = 0;
to_cmyk();
}
private void button2_Click(object sender, EventArgs e)
{
progressBar1.Value = 0;
to_yuv();
}
private void button4_Click(object sender, EventArgs e)
{
progressBar1.Value = 0;
colorreplace();
}
private void button10_Click(object sender, EventArgs e)
{
mainImage = new Bitmap(loadedImage);
editedImage = new Bitmap(loadedImage);
pictureBox1.Image = loadedImage;
pictureBox2.Image = null;
pictureBox1.Update();
pictureBox2.Update();
}
void to_cmyk()
{
int i, j;
double K,C,M,Y;
for (i = 0; i < mainImage.Width; i++)
{
for (j = 0; j < mainImage.Height; j++)
{
C = 255 - mainImage.GetPixel(i, j).R;
M = 255 - mainImage.GetPixel(i, j).G;
Y = 255 - mainImage.GetPixel(i, j).B;
if (C < M)
K = C;
else
K = M;
if (Y < K)
K = Y;
if (K > 0)
{
C = C - K;
M = M - K;
Y = Y - K;
}
editedImage.SetPixel(i, j, Color.FromArgb((int)C,(int)M,(int)Y)); }
pictureBox2.Image = editedImage;
pictureBox2.Update();
progressBar1.Value++;
}
}
void to_yiq()
{
int i,j,Y,I,Q;
for (i = 0; i < mainImage.Width; i++)
{
for (j = 0; j < mainImage.Height; j++)
{
Y = (int)( 0.299 * mainImage.GetPixel(i, j).R + 0.587 * mainImage.GetPixel(i, j).G + 0.114 * mainImage.GetPixel(i, j).B);
if (Y < 0)
Y = 0;
I = (int)( 0.596 * mainImage.GetPixel(i, j).R - 0.274 * mainImage.GetPixel(i, j).G - 0.322 * mainImage.GetPixel(i, j).B);
if (I < 0)
I = 0;
Q = (int)( 0.211 * mainImage.GetPixel(i, j).R - 0.522 * mainImage.GetPixel(i, j).G + 0.311 * mainImage.GetPixel(i, j).B);
if (Q < 0)
Q = 0;
editedImage.SetPixel(i, j, Color.FromArgb((int)Y, (int)I, (int)Q));
}
pictureBox2.Image = editedImage;
pictureBox2.Update();
progressBar1.Value++;
}
}
void to_yuv()
{
int i, j, Y, U, V;
for (i = 0; i < mainImage.Width; i++)
{
for (j = 0; j < mainImage.Height; j++)
{
Y = (int)(0.299 * mainImage.GetPixel(i, j).R + 0.587 * mainImage.GetPixel(i, j).G + 0.114 * mainImage.GetPixel(i, j).B);
if (Y < 0)
Y = 0;
U = (int)(-0.169 * mainImage.GetPixel(i, j).R - 0.332 * mainImage.GetPixel(i, j).G + 0.500 * mainImage.GetPixel(i, j).B+128.0);
if (U < 0)
U = 0;
V = (int)(0.500 * mainImage.GetPixel(i, j).R - 0.419 * mainImage.GetPixel(i, j).G - 0.0813 * mainImage.GetPixel(i, j).B+128.0);
if (V < 0)
V = 0;
editedImage.SetPixel(i, j, Color.FromArgb((int)Y, (int)U, (int)V));
}
pictureBox2.Image = editedImage;
pictureBox2.Update();
progressBar1.Value++;
}
}
void to_lms()
{
int i, j, L, M, S;
for (i = 0; i < mainImage.Width; i++)
{
for (j = 0; j < mainImage.Height; j++)
{
L = (int)(0.3811 * mainImage.GetPixel(i, j).R + 0.5783 * mainImage.GetPixel(i, j).G + 0.0402 * mainImage.GetPixel(i, j).B);
if (L < 0)
L = 0;
M = (int)(0.1967 * mainImage.GetPixel(i, j).R + 0.7244 * mainImage.GetPixel(i, j).G + 0.0782 * mainImage.GetPixel(i, j).B);
if (M < 0)
M = 0;
S = (int)(0.0241 * mainImage.GetPixel(i, j).R + 0.1288 * mainImage.GetPixel(i, j).G + 0.8444 * mainImage.GetPixel(i, j).B);
if (S < 0)
S = 0;
editedImage.SetPixel(i, j, Color.FromArgb((int)L, (int)M, (int)S));
}
pictureBox2.Image = editedImage;
pictureBox2.Update();
progressBar1.Value++;
}
}
void colorreplace()
{
int R = Convert.ToInt32(textBox1.Text), G = Convert.ToInt32(textBox2.Text), B = Convert.ToInt32(textBox1.Text);
int i, j;
for (i = 0; i < mainImage.Width; i++)
{
for (j = 0; j < mainImage.Height; j++)
{
if (mainImage.GetPixel(i, j).ToArgb() == pictureBox3.BackColor.ToArgb()+10 || mainImage.GetPixel(i, j).ToArgb() == pictureBox3.BackColor.ToArgb() || mainImage.GetPixel(i, j).ToArgb()-10 == pictureBox3.BackColor.ToArgb())
editedImage.SetPixel(i, j, Color.FromArgb(255,R,G,B));
else
editedImage.SetPixel(i, j, Color.FromArgb((mainImage.GetPixel(i, j)).A,mainImage.GetPixel(i,j).R,mainImage.GetPixel(i,j).G,mainImage.GetPixel(i,j).B));
}
pictureBox2.Image = editedImage;
pictureBox2.Update();
progressBar1.Value++;
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
if (mainImage != null)
{
Point p = pictureBox1.PointToClient(Cursor.Position);
label4.Text ="Получен цвет\n"+ (mainImage.GetPixel(p.X, p.Y)).ToString();
System.Int32 argb = mainImage.GetPixel(p.X, p.Y).ToArgb();
pictureBox3.BackColor = Color.FromArgb(argb);
}
}
private void button3_Click(object sender, EventArgs e)
{
progressBar1.Value = 0;
to_yiq();
}
private void button5_Click(object sender, EventArgs e)
{
progressBar1.Value = 0;
to_lms();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text == "")
textBox1.Text = "0";
if (Convert.ToInt32(textBox1.Text) < 0)
textBox1.Text = "0";
if (Convert.ToInt32(textBox1.Text) > 255)
textBox1.Text = "255";
if (textBox1.Text != ""&& Convert.ToInt32(textBox1.Text) > 0)
pictureBox4.BackColor = Color.FromArgb(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox3.Text));
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
if (textBox2.Text == "")
textBox2.Text = "0";
if (Convert.ToInt32(textBox2.Text) < 0)
textBox2.Text = "0";
if (Convert.ToInt32(textBox2.Text) > 255)
textBox2.Text = "255";
if (textBox2.Text != "" && Convert.ToInt32(textBox2.Text) < 256 && Convert.ToInt32(textBox2.Text) > 0)
pictureBox4.BackColor = Color.FromArgb(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox3.Text));
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
if (textBox3.Text == "")
textBox3.Text = "0";
if (Convert.ToInt32(textBox3.Text) < 0)
textBox3.Text = "0";
if (Convert.ToInt32(textBox3.Text) > 255)
textBox3.Text = "255";
if (textBox3.Text != "" && Convert.ToInt32(textBox3.Text) < 256 && Convert.ToInt32(textBox3.Text) > 0)
pictureBox4.BackColor = Color.FromArgb(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox3.Text));
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(Char.IsDigit(e.KeyChar)))
{
e.Handled = true;
}
}
private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(Char.IsDigit(e.KeyChar)))
{
e.Handled = true;
}
}
private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(Char.IsDigit(e.KeyChar)))
{
e.Handled = true;
}
}
}
}
Приложение Б Описание tga файла
Truevision TGA (TGA) - растровый графический формат. Первоначально был создан компанией Truevision Inc. для графических адаптеров собственного производства ещё в 1984, но в дальнейшем стал популярен на самых разных платформах, особенно в области обработки видео, анимации.
Файл изображения TGA состоит из пяти зон, каждая из которых содержит одно или больше полей фиксированной или переменной длины:
•(1) Заголовок файла
•(2) Изображение/карта цветов
•(3) Зона разработчика
•(4) Зона расширения
•(5) Подвал
НазваниеРазмер(байт)Длина идентификатора1Тип карты цветов1Тип Изображения1Описание карты цветов5Описание изображения10Таблица 1 - Заголовок tga файла.
НазваниеРазмер(байт)Идентификаторпеременная длинаДанные карты цветовпеременная длинаДанные изображенияпеременная длинаТаблица 2 - Изображение/карта цветов tga файла.
НазваниеРазмер(байт)Количество тегов2Тег2Смещение4Размер4Таблица 3 - Зона разработчика tga файла.
НазваниеРазмер(байт)Размер зоны расширения2Имя автора41Комментарий автора324Дата/Время12Таблица 4 - Зона расширения tga файла.
НазваниеРазмер(байт)Смещение в байтах от начала файла к зоне расширения4Смещение к списку зон разработчика4Сигнатура новой версии файлаТаблица 5 - Подвал tga файла.
Приложение В Описание меню
При запуске программы появляется следующее окно (рисунок 1).
Рисунок 1 - окно при запуске.
Пункты меню:
Открыть - открыть изображение.
Сохранить - сохранить изображение.
Выход - выход из приложения.
Получен цвет: - цвет, который получен при помощи "пипетки".
R - Красная составляющая.
G - Зеленая составляющая.
B - Синяя составляющая.
Замена цвета - Заменить цвет на выбранный.
1
Документ
Категория
Рефераты
Просмотров
26
Размер файла
3 656 Кб
Теги
кит, записка
1/--страниц
Пожаловаться на содержимое документа