Обработка изображений в среде Matlab
Курсовая работа, 12 Сентября 2013, автор: пользователь скрыл имя
Краткое описание
Целью данной курсовой работы является создание редактора в программе MatLab. В данной курсовой работе будут описаны принципы коррекции изображений. Рассмотрены виды графических растровых форматов, а так же пример и полное описание программы, созданной в программе MatLab. Эта программа будет предназначена для выполнения простейших операций направленных на коррекцию изображений стандартного формата, а так же данная программа даст возможность хранить изображения, прошедшие коррекцию, на жестком диске ПК пользователя в формате .JPEG.
Вложенные файлы: 1 файл
2_14_04_2013.doc
— 7.15 Мб (Скачать файл)IMG = imgCont;
end
if (brightChecker == 1),
IMG = imgBright;
end
if (blurChecker == 1),
IMG = imgBlur;
end
image=uint8(IMG); // преобразует элементы массива IMG в целые неотрицательные числа и присваивает эти числа переменной image
[FileName,PathName] = uiputfile( ...
'*.jpg', 'Save image as'); // открывает диалоговое окно, в котором пользователю предлагает выбрать или создать на своем жестком диске файл, в который программа сохранит изображение.
var=strcat(PathName,FileName);
imwrite(image,var);
- Закрытие программы
function Exit_Callback(hObject, eventdata, handles)
close // закрывает программу
- Функция отображения оригинала и измене
нного изображения
function changing_Callback(hObject, eventdata, handles)
global originalImage IMG contChecker brightChecker imgBright imgCont blurChecker imgBlur
if (contChecker == 1),
IMG = imgCont;
end
if (brightChecker == 1),
IMG = imgBright;
end
if (blurChecker == 1),
IMG = imgBlur;
end
if (get(handles.changing,'Value') == 0), // если toggleButton с тегом changing примет значение 0, то выполнится код до оператора else, если примет значение 1, то будет выполнятся код после оператора else
imshow(IMG, 'Parent', handles.axes1);
set(handles.whichImage, 'String', 'Changeable');
else
imshow(originalImage, 'Parent', handles.axes1);
set(handles.whichImage, 'String', 'Original');
end // завершает цикл
- Изменение яркости
function Bright_Callback(hObject, eventdata, handles)
global IMG brightChecker imgBright
val= get(handles.Bright,'Value'); // присваивает значение scrollа, с тегом Bright, переменной val
imgBright = IMG
brightChecker = 1
if (get(handles.Grayscale,'Value'
cont = imadjust(imgBright,[0 0 0;1-val 1-val 1-val],[0 val]) // выполняет коррекцию изображения imgBright и присваивает информацию переменной cont
else
cont = imadjust(imgBright,[0 1-val],[0 val])
end
res=uint8(cont);
imgBright=res;
imshow(imgBright, 'Parent', handles.axes1);
- Изменение контрастности
function Contrast_Callback(hObject, eventdata, handles)
global IMG contChecker imgCont
val= get(handles.Contrast,'Value');
val2= get(handles.Contrast2,'Value')
imgCont = IMG
contChecker = 1
if (get(handles.Grayscale,'Value'
cont = imadjust(imgCont,[val val val; val2 val2 val2],[])
else
cont = imadjust(imgCont,[val val2],[])
end
res=uint8(cont);
imgCont=res;
imshow(imgCont, 'Parent', handles.axes1);
- Функция восстановления исходного изображения
function Restore_Callback(hObject, eventdata, handles)
global originalImage IMG
IMG = originalImage
imshow(IMG, 'Parent', handles.axes1);
set(handles.whichImage, 'String', 'Changeable');
- Размытие
function Blur_Callback(hObject, eventdata, handles)
global IMG blurChecker imgBlur
blurness = get(handles.Blur, 'string')
Value = str2double(blurness); // изменяет тип переменной с double на тип string и присваивает получено значение переменной Value
imgBlur = IMG
blurChecker = 1
blur = fspecial('gaussian',Value,
cont = imfilter(imgBlur,blur); // размывает изображение cont
res=uint8(cont);
imgCont=res;
imshow(imgCont, 'Parent', handles.axes1);
- Перевод изображения в Grayscale
function Grayscale_Callback(hObject, eventdata, handles)
global IMG originalImage
if (get(handles.Grayscale,'Value'
IMG = rgb2gray(IMG) // переводит изображение в «градации серого» и присваивает полученные значения массива переменной IMG
imshow(IMG, 'Parent', handles.axes1);
else
IMG = originalImage
imshow(IMG, 'Parent', handles.axes1);
end
- Инвертирование изображения
function Invert_Callback(hObject, eventdata, handles)
global IMG originalImage
if (get(handles.Invert,'Value') ~= 0),
IMG = 255 – IMG // вычитает из 255 значение каждого пикселя массива IMG
else
IMG = originalImage
end
imshow(IMG, 'Parent', handles.axes1);
- Поворот изображения на 180 градусов
function Flip_Callback(hObject, eventdata, handles)
global IMG
image=double(IMG);
s=size(image); // записывает в переменной s размер изображения
result=zeros(s(1),s(2),s(3)); // формирует массив нулей размером s(1) на s(2) на s(3)
for i = 1:s(1)
j = 1:s(2);
k=s(1)-i+1;
l=s(2)-j+1;
result(k,l,:)=image(i,j,:); // выполняет цикл, в котором исходные пиксели из исходной матрицы присваиваются новым пикселям новой матрицы, в соотвествии с уравнением s-значение исходного пикселя +1
end
res=uint8(result);
IMG=res;
imshow(IMG, 'Parent', handles.axes1);
- Отражение по вертикали
function Mirror_Callback(hObject, eventdata, handles)
global IMG
image=double(IMG);
s=size(image);
result=zeros(s(1),s(2),s(3));
for i = 1:s(1)
j = 1:s(2);
k=s(1)-i+1;
result(k,j,:)=image(i,j,:);
end
res=uint8(result);
IMG=res;
imshow(IMG, 'Parent', handles.axes1);
- Отражение по горизонтали
function MirrorH_Callback(hObject, eventdata, handles)
global IMG
image=double(IMG);
s=size(image);
result=zeros(s(1),s(2),s(3));
for i = 1:s(1)
j = 1:s(2);
l=s(2)-j+1;
result(i,l,:)=image(i,j,:);
end
res=uint8(result);
IMG=res;
imshow(IMG, 'Parent', handles.axes1);
2.4. Тестирование приложения
Ниже будут представлены изображения, отображающие результат работы функций, описанных выше.
- Создание нового документа
- Открытие документа
- Сохранение документа
- Закрытие программы
Данная команда закрывает программу.
- Функция отображения оригинала и измене
нного изображения
- Изменение яркости
- Изменение контрастности
- Функция восстановления исходного изображения
- Размытие
- Перевод изображения в Grayscale
- Инвертирование изображения
- Поворот изображения на 180 градусов
- Отражение по вертикали
- Отражение по горизонтали
ЗАКЛЮЧЕНИЕ
Представленная программа дает возможность её пользователям трансформировать, улучшать и изменять изображения с помощью изменения яркости, контрастности, цветокоррекции и т.д. Теоретический материал предоставляет возможность изучить вопрос улучшения изображений, а так же написать собственную программу для коррекции графических файлов. Приложение прошло проверку и не вызвало никаких нареканий. В процессе разработки приложения была изучена программа MatLab, а так же изучены методы и операторы Image Processing Toolbox, которые дают возможность изменять и корректировать любое изображение стандартного формата стандартными методами и библиотеками MatLab. При выполнении данной работы возникла проблема с поиском русскоязычной литературы, в связи с этим использовалась литература с английским содержанием.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- Bitmap 2010. WiseGEEK clear answers for common questions. — [Электронный ресурс]. URL: http://www.philosophy.ru/
library/bahtin/rable.html#_ ftn1 (дата об-ращения: 25.03.2010). - Cube of RGB color model 2010. Wikimedia Commons.
[Электронный
ресурс]. URL: http://commons.wikimedia.org/
- Cube of RGB color model 2010. Wikimedia Commons.
[Электронный
ресурс]. URL: http://commons.wikimedia.org/
- Wilbert O. The Essential Guide to User Interface Design – An Introduction to GUI Design Principles and Techniques. United States of America.
- Robert – Wróbel. Praktyka przetwarzania obrazów z zadaniami w programie Matlab. — Warszawa.: 2008.
- Thomas O. Graphics and GUIs with Matlab.. — United States of America.: The MarthWorks 2004.
- Ready-built colormaps from Matlab’s Image Processing Toolbox 2012. [Электронный ресурс]. URL:
www-format: URL:http://www.mathworks.se/
- Image Processing Toolbox 6 User’s Guide. - United States of America.: United States of America. The MathWorks 2007.
- Creating Graphical User Interfaces. [Электронный ресурс]. URL:
www.mathworks.se/company/
- The Tech Terms Computer Dictionary. [Электронный ресурс]. URL:
http://www.techterms.com/
ПРИЛОЖЕНИЯ
Полный код программы
- function varargout = Instagramm(varargin)
- gui_Singleton = 1;
- gui_State = struct('gui_Name', mfilename, ...
- 'gui_Singleton', gui_Singleton, ...
- 'gui_OpeningFcn', @Instagramm_OpeningFcn, ...
- 'gui_OutputFcn', @Instagramm_OutputFcn, ...
- 'gui_LayoutFcn', [] , ...
- 'gui_Callback', []);
- if nargin && ischar(varargin{1})
- gui_State.gui_Callback = str2func(varargin{1});
- end
- if nargout
- [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
- else
- gui_mainfcn(gui_State, varargin{:});
- end
- global originalImage IMG
- function Instagramm_OpeningFcn(hObject, eventdata, handles, varargin)
- handles.output = hObject;
- guidata(hObject, handles);
- function varargout = Instagramm_OutputFcn(hObject, eventdata, handles)
- varargout{1} = handles.output;
- function PathtoFile_Callback(hObject, eventdata, handles)
- function PathtoFile_CreateFcn(hObject, eventdata, handles)
- if ispc && isequal(get(hObject,'
BackgroundColor'), get(0,' defaultUicontrolBackgroundColo r')) - set(hObject,'BackgroundColor',
'white'); - end
- function File_Callback(hObject, eventdata, handles)
- function New_Callback(hObject, eventdata, handles)
- global contChecker blurChecker brightChecker
- set(handles.PathtoFile,'
String', '') - clearvars -global
- contChecker = 0
- brightChecker = 0
- blurChecker = 0
- IMG=1;
- imshow(IMG, 'Parent', handles.axes1);
- function Open_Callback(hObject, eventdata, handles)
- clearvars -global
- global originalImage IMG contChecker brightChecker blurChecker
- contChecker = 0
- brightChecker = 0
- blurChecker = 0
- set(handles.whichImage, 'String', 'Changeable');
- [FileName,PathName,
FilterIndex] = uigetfile({'*.jpg';'*.bmp';'*. gif'}, 'Chose image to open') - set(handles.PathtoFile,'
String', fullfile(PathName, FileName)) - image=strcat(PathName,
FileName); - axes (handles.axes1);
- originalImage=imread(image);
- IMG=imread(image);
- imshow(IMG, 'Parent', handles.axes1);
- function Save_Callback(hObject, eventdata, handles)
- global IMG contChecker imgCont brightChecker imgBright blurChecker imgBlur
- if (contChecker == 1),
- IMG = imgCont;
- end
- if (brightChecker == 1),
- IMG = imgBright;
- end
- if (blurChecker == 1),
- IMG = imgBlur;
- end
- image=uint8(IMG);
- [FileName,PathName] = uiputfile( ...
- '*.jpg', 'Save image as');
- var=strcat(PathName,FileName);
- imwrite(image,var);
- function Exit_Callback(hObject, eventdata, handles)
- close
- function changing_Callback(hObject, eventdata, handles)
- global originalImage IMG contChecker brightChecker imgBright imgCont blurChecker imgBlur
- if (contChecker == 1),
- IMG = imgCont;
- end
- if (brightChecker == 1),
- IMG = imgBright;
- end
- if (blurChecker == 1),
- IMG = imgBlur;
- end
- if (get(handles.changing,'Value') == 0),
- imshow(IMG, 'Parent', handles.axes1);
- set(handles.whichImage, 'String', 'Changeable');
- else
- imshow(originalImage, 'Parent', handles.axes1);
- set(handles.whichImage, 'String', 'Original');
- end
- function Bright_Callback(hObject, eventdata, handles)
- global IMG brightChecker imgBright
- val= get(handles.Bright,'Value');
- imgBright = IMG
- brightChecker = 1
- if (get(handles.Grayscale,'Value'
) == 0), - cont = imadjust(imgBright,[0 0 0;1-val 1-val 1-val],[0 val])
- else
- cont = imadjust(imgBright,[0 1-val],[0 val])
- end
- res=uint8(cont);
- imgBright=res;
- imshow(imgBright, 'Parent', handles.axes1);
- function Bright_CreateFcn(hObject, eventdata, handles)
- if isequal(get(hObject,'
BackgroundColor'), get(0,' defaultUicontrolBackgroundColo r')) - set(hObject,'BackgroundColor',
[.9 .9 .9]); - end
- function Contrast_Callback(hObject, eventdata, handles)
- global IMG contChecker imgCont
- val= get(handles.Contrast,'Value');
- val2= get(handles.Contrast2,'Value')
; - imgCont = IMG
- contChecker = 1
- if (get(handles.Grayscale,'Value'
) == 0), - cont = imadjust(imgCont,[val val val; val2 val2 val2],[])
- else
- cont = imadjust(imgCont,[val val2],[])
- end
- res=uint8(cont);
- imgCont=res;
- imshow(imgCont, 'Parent', handles.axes1);
- function Contrast_CreateFcn(hObject, eventdata, handles)
- if isequal(get(hObject,'
BackgroundColor'), get(0,' defaultUicontrolBackgroundColo r')) - set(hObject,'BackgroundColor',
[.9 .9 .9]); - end
- function Restore_Callback(hObject, eventdata, handles)
- global originalImage IMG
- IMG = originalImage
- imshow(IMG, 'Parent', handles.axes1);
- set(handles.whichImage, 'String', 'Changeable');
- function whichImage_Callback(hObject, eventdata, handles)
- function whichImage_CreateFcn(hObject, eventdata, handles)
- if ispc && isequal(get(hObject,'
BackgroundColor'), get(0,' defaultUicontrolBackgroundColo r')) - set(hObject,'BackgroundColor',
'white'); - end
- function Contrast2_Callback(hObject, eventdata, handles)
- function Contrast2_CreateFcn(hObject, eventdata, handles)
- if isequal(get(hObject,'
BackgroundColor'), get(0,' defaultUicontrolBackgroundColo r')) - set(hObject,'BackgroundColor',
[.9 .9 .9]); - end
- function Blur_Callback(hObject, eventdata, handles)
- global IMG blurChecker imgBlur
- blurness = get(handles.Blur, 'string')
- Value = str2double(blurness);
- imgBlur = IMG
- blurChecker = 1
- blur = fspecial('gaussian',Value,
Value); - cont = imfilter(imgBlur,blur);
- res=uint8(cont);
- imgCont=res;
- imshow(imgCont, 'Parent', handles.axes1);
- function Blur_CreateFcn(hObject, eventdata, handles)
- if ispc && isequal(get(hObject,'
BackgroundColor'), get(0,'defaultUicontrolBackgro undColor')) - set(hObject,'BackgroundColor',
'white'); - end
- function Grayscale_Callback(hObject, eventdata, handles)
- global IMG originalImage
- if (get(handles.Grayscale,'Value'
) ~= 0), - IMG = rgb2gray(IMG)
- imshow(IMG, 'Parent', handles.axes1);
- else
- IMG = originalImage
- imshow(IMG, 'Parent', handles.axes1);
- end
- function Invert_Callback(hObject, eventdata, handles)
- global IMG originalImage
- if (get(handles.Invert,'Value') ~= 0),
- IMG = 255 - IMG
- else
- IMG = originalImage
- end
- imshow(IMG, 'Parent', handles.axes1);
- function Invert_CreateFcn(hObject, eventdata, handles)
- function Flip_Callback(hObject, eventdata, handles)
- global IMG
- image=double(IMG);
- s=size(image);
- result=zeros(s(1),s(2),s(3));
- for i = 1:s(1)
- j = 1:s(2);
- k=s(1)-i+1;
- l=s(2)-j+1;
- result(k,l,:)=image(i,j,:);
- end
- res=uint8(result);
- IMG=res;
- imshow(IMG, 'Parent', handles.axes1);
- function Mirror_Callback(hObject, eventdata, handles)
- global IMG
- image=double(IMG);
- s=size(image);
- result=zeros(s(1),s(2),s(3));
- for i = 1:s(1)
- j = 1:s(2);
- k=s(1)-i+1;
- result(k,j,:)=image(i,j,:);
- end
- res=uint8(result);
- IMG=res;
- imshow(IMG, 'Parent', handles.axes1);
- function MirrorH_Callback(hObject, eventdata, handles)
- global IMG
- image=double(IMG);
- s=size(image);
- result=zeros(s(1),s(2),s(3));
- for i = 1:s(1)
- j = 1:s(2);
- l=s(2)-j+1;
- result(i,l,:)=image(i,j,:);
- end
- res=uint8(result);
- IMG=res;
- imshow(IMG, 'Parent', handles.axes1);