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')
== 0),
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') == 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 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,Value); // присваивает
переменной blur значения «тип блюра» и
значения размытия
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')
~= 0),
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/wiki/File:RGBCube_d.svg. (дата об-ращения: 25.03.2010).
- Cube of RGB color model 2010.
Wikimedia Commons.
[Электронный
ресурс]. URL: http://commons.wikimedia.org/wiki/File:RGBCube_d.svg. (дата об-ращения: 25.03.2010).
- 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/help/techdoc/ref/colormap.html.
- 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/newsletters/news_notes/clevescorner/dec04.html?
s_cid=wiki_matlab_3
- The Tech Terms Computer Dictionary. [Электронный ресурс]. URL:
http://www.techterms.com/definition/vectorgraphic. - Vector Graphic 2012.
ПРИЛОЖЕНИЯ
Полный код программы
- 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,'defaultUicontrolBackgroundColor'))
- 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,'defaultUicontrolBackgroundColor'))
- 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,'defaultUicontrolBackgroundColor'))
- 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,'defaultUicontrolBackgroundColor'))
- set(hObject,'BackgroundColor','white');
- end
-
- function Contrast2_Callback(hObject, eventdata, handles)
- function Contrast2_CreateFcn(hObject, eventdata, handles)
- if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
- 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,'defaultUicontrolBackgroundColor'))
- 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);