Обработка изображений в среде Matlab

Автор работы: Пользователь скрыл имя, 12 Сентября 2013 в 21:37, курсовая работа

Краткое описание

Целью данной курсовой работы является создание редактора в программе 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);

 

  1. Закрытие программы

function Exit_Callback(hObject, eventdata, handles)

close // закрывает программу

 

  1. Функция отображения оригинала и измененного изображения

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 // завершает цикл

 

  1.  Изменение яркости

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);

 

  1. Изменение контрастности

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);

 

  1. Функция восстановления исходного изображения

function Restore_Callback(hObject, eventdata, handles)

global originalImage IMG

IMG = originalImage

imshow(IMG, 'Parent', handles.axes1);

set(handles.whichImage, 'String', 'Changeable');

 

  1. Размытие

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);

 

  1.  Перевод изображения в 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

 

  1. Инвертирование изображения

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);

 

  1. Поворот изображения на 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);

 

  1.  Отражение по вертикали

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);

 

 

 

  1. Отражение по горизонтали

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. Тестирование  приложения

Ниже  будут представлены изображения, отображающие результат работы функций, описанных  выше.

 

 

 

 

 

 

 

 

  1. Создание нового документа

 

 

  1. Открытие документа

 

 

  1. Сохранение документа

 

  1. Закрытие программы

Данная команда  закрывает программу.

 

  1. Функция отображения оригинала и измененного изображения

 

 

 

  1.  Изменение яркости

  1. Изменение контрастности

 

 

 

 

  1. Функция восстановления исходного изображения

 

  1. Размытие

 

 

 

  1.  Перевод изображения в Grayscale

 

  1. Инвертирование изображения

 

  1. Поворот изображения на 180 градусов

 

  1.  Отражение по вертикали

 

 

  1. Отражение по горизонтали

 

 

ЗАКЛЮЧЕНИЕ

Представленная  программа дает возможность её пользователям  трансформировать, улучшать и изменять изображения с помощью изменения яркости, контрастности, цветокоррекции и т.д. Теоретический материал предоставляет возможность изучить вопрос улучшения изображений, а так же написать собственную программу для коррекции графических файлов. Приложение прошло проверку и не вызвало никаких нареканий. В процессе разработки приложения была изучена программа MatLab, а так же изучены методы и операторы Image Processing Toolbox, которые дают возможность изменять и корректировать любое изображение стандартного формата стандартными методами и библиотеками MatLab. При выполнении данной работы возникла проблема с поиском русскоязычной литературы, в связи с этим использовалась литература с английским содержанием.

 

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

  1. Bitmap 2010. WiseGEEK clear answers for common questions. — [Электронный ресурс]. URL: http://www.philosophy.ru/library/bahtin/rable.html#_ftn1 (дата об-ращения: 25.03.2010).
  2. Cube of RGB color model 2010. Wikimedia Commons.

[Электронный  ресурс]. URL: http://commons.wikimedia.org/wiki/File:RGBCube_d.svg. (дата об-ращения: 25.03.2010).

  1. Cube of RGB color model 2010. Wikimedia Commons.

[Электронный  ресурс]. URL: http://commons.wikimedia.org/wiki/File:RGBCube_d.svg. (дата об-ращения: 25.03.2010).

  1. Wilbert O. The Essential Guide to User Interface Design – An Introduction to GUI Design Principles and Techniques. United States of America. 
  2. Robert – Wróbel. Praktyka przetwarzania obrazów z zadaniami w programie Matlab. — Warszawa.: 2008. 
  3. Thomas O. Graphics and GUIs with Matlab.. — United States of America.: The MarthWorks 2004.
  4. Ready-built colormaps from Matlab’s Image Processing Toolbox 2012. [Электронный ресурс]. URL:

www-format: URL:http://www.mathworks.se/help/techdoc/ref/colormap.html.

  1. Image Processing Toolbox 6 User’s Guide. - United States of America.: United States of America. The MathWorks 2007. 

 

 

  1. Creating Graphical User Interfaces. [Электронный ресурс]. URL:

www.mathworks.se/company/newsletters/news_notes/clevescorner/dec04.html? s_cid=wiki_matlab_3

 

  1. The Tech Terms Computer Dictionary. [Электронный ресурс]. URL:

http://www.techterms.com/definition/vectorgraphic. - Vector Graphic 2012.

 

 

 

 

 

 

 

ПРИЛОЖЕНИЯ

  1. Полный код программы

  1. function varargout = Instagramm(varargin)
  2. gui_Singleton = 1;
  3. gui_State = struct('gui_Name',       mfilename, ...
  4.                    'gui_Singleton',  gui_Singleton, ...
  5.                    'gui_OpeningFcn', @Instagramm_OpeningFcn, ...
  6.                    'gui_OutputFcn',  @Instagramm_OutputFcn, ...
  7.                    'gui_LayoutFcn',  [] , ...
  8.                    'gui_Callback',   []);
  9. if nargin && ischar(varargin{1})
  10.     gui_State.gui_Callback = str2func(varargin{1});
  11. end
  12. if nargout
  13.     [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
  14. else
  15.     gui_mainfcn(gui_State, varargin{:});
  16. end
  17. global originalImage IMG
  18. function Instagramm_OpeningFcn(hObject, eventdata, handles, varargin)
  19. handles.output = hObject;
  20. guidata(hObject, handles);
  21. function varargout = Instagramm_OutputFcn(hObject, eventdata, handles)
  22. varargout{1} = handles.output;
  23. function PathtoFile_Callback(hObject, eventdata, handles)
  24. function PathtoFile_CreateFcn(hObject, eventdata, handles)
  25. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  26.     set(hObject,'BackgroundColor','white');
  27. end
  28. function File_Callback(hObject, eventdata, handles)
  29. function New_Callback(hObject, eventdata, handles)
  30. global contChecker blurChecker brightChecker
  31. set(handles.PathtoFile,'String', '')
  32. clearvars -global
  33. contChecker = 0
  34. brightChecker = 0
  35. blurChecker = 0
  36. IMG=1;
  37. imshow(IMG, 'Parent', handles.axes1);
  38. function Open_Callback(hObject, eventdata, handles)
  39. clearvars -global
  40. global originalImage IMG contChecker brightChecker blurChecker
  41. contChecker = 0
  42. brightChecker = 0
  43. blurChecker = 0
  44. set(handles.whichImage, 'String', 'Changeable');
  45. [FileName,PathName,FilterIndex] = uigetfile({'*.jpg';'*.bmp';'*.gif'}, 'Chose image to open')
  46. set(handles.PathtoFile,'String', fullfile(PathName, FileName))
  47. image=strcat(PathName,FileName);
  48. axes (handles.axes1);
  49. originalImage=imread(image);
  50. IMG=imread(image);
  51. imshow(IMG, 'Parent', handles.axes1);
  52. function Save_Callback(hObject, eventdata, handles)
  53. global IMG contChecker imgCont brightChecker imgBright blurChecker imgBlur
  54. if (contChecker == 1),
  55.     IMG = imgCont;
  56. end
  57. if (brightChecker == 1),
  58.     IMG = imgBright;
  59. end
  60. if (blurChecker == 1),
  61.     IMG = imgBlur;
  62. end
  63. image=uint8(IMG);
  64. [FileName,PathName] = uiputfile( ...
  65.        '*.jpg', 'Save image as');
  66. var=strcat(PathName,FileName);
  67. imwrite(image,var);
  68. function Exit_Callback(hObject, eventdata, handles)
  69. close
  70. function changing_Callback(hObject, eventdata, handles)
  71. global originalImage IMG contChecker brightChecker imgBright imgCont blurChecker imgBlur
  72. if (contChecker == 1),
  73.     IMG = imgCont;
  74. end
  75. if (brightChecker == 1),
  76.     IMG = imgBright;
  77. end
  78. if (blurChecker == 1),
  79.     IMG = imgBlur;
  80. end
  81. if (get(handles.changing,'Value') == 0),
  82.     imshow(IMG, 'Parent', handles.axes1);
  83.     set(handles.whichImage, 'String', 'Changeable');
  84. else
  85.    imshow(originalImage, 'Parent', handles.axes1);
  86.    set(handles.whichImage, 'String', 'Original');
  87. end
  88. function Bright_Callback(hObject, eventdata, handles)
  89. global IMG brightChecker imgBright
  90. val= get(handles.Bright,'Value');
  91. imgBright = IMG
  92. brightChecker = 1
  93. if (get(handles.Grayscale,'Value') == 0),
  94.     cont = imadjust(imgBright,[0 0 0;1-val 1-val 1-val],[0 val])
  95. else
  96.     cont = imadjust(imgBright,[0 1-val],[0 val])
  97. end
  98. res=uint8(cont);
  99. imgBright=res;
  100. imshow(imgBright, 'Parent', handles.axes1);
  101. function Bright_CreateFcn(hObject, eventdata, handles)
  102. if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  103.     set(hObject,'BackgroundColor',[.9 .9 .9]);
  104. end
  105. function Contrast_Callback(hObject, eventdata, handles)
  106. global IMG contChecker imgCont
  107. val= get(handles.Contrast,'Value');
  108. val2= get(handles.Contrast2,'Value');
  109. imgCont = IMG
  110. contChecker = 1
  111. if (get(handles.Grayscale,'Value') == 0),
  112.    cont = imadjust(imgCont,[val val val; val2 val2 val2],[])
  113. else
  114.     cont = imadjust(imgCont,[val val2],[])
  115. end
  116. res=uint8(cont);
  117. imgCont=res;
  118. imshow(imgCont, 'Parent', handles.axes1);
  119. function Contrast_CreateFcn(hObject, eventdata, handles)
  120. if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  121.     set(hObject,'BackgroundColor',[.9 .9 .9]);
  122. end
  123. function Restore_Callback(hObject, eventdata, handles)
  124. global originalImage IMG
  125. IMG = originalImage
  126. imshow(IMG, 'Parent', handles.axes1);
  127. set(handles.whichImage, 'String', 'Changeable');
  128. function whichImage_Callback(hObject, eventdata, handles)
  129. function whichImage_CreateFcn(hObject, eventdata, handles)
  130. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  131.     set(hObject,'BackgroundColor','white');
  132. end
  133. function Contrast2_Callback(hObject, eventdata, handles)
  134. function Contrast2_CreateFcn(hObject, eventdata, handles)
  135. if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  136.     set(hObject,'BackgroundColor',[.9 .9 .9]);
  137. end
  138. function Blur_Callback(hObject, eventdata, handles)
  139. global IMG blurChecker imgBlur
  140. blurness = get(handles.Blur, 'string')
  141. Value = str2double(blurness);
  142. imgBlur = IMG
  143. blurChecker = 1
  144. blur = fspecial('gaussian',Value,Value);
  145. cont = imfilter(imgBlur,blur);
  146. res=uint8(cont);
  147. imgCont=res;
  148. imshow(imgCont, 'Parent', handles.axes1);
  149. function Blur_CreateFcn(hObject, eventdata, handles)
  150. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  151.     set(hObject,'BackgroundColor','white');
  152. end
  153. function Grayscale_Callback(hObject, eventdata, handles)
  154. global IMG originalImage
  155. if (get(handles.Grayscale,'Value') ~= 0),
  156.     IMG = rgb2gray(IMG)
  157.     imshow(IMG, 'Parent', handles.axes1);
  158. else
  159.     IMG = originalImage
  160.     imshow(IMG, 'Parent', handles.axes1);
  161. end
  162. function Invert_Callback(hObject, eventdata, handles)
  163. global IMG originalImage
  164. if (get(handles.Invert,'Value') ~= 0),
  165.     IMG = 255 - IMG
  166. else
  167.     IMG = originalImage
  168. end
  169. imshow(IMG, 'Parent', handles.axes1);
  170. function Invert_CreateFcn(hObject, eventdata, handles)
  171. function Flip_Callback(hObject, eventdata, handles)
  172. global IMG
  173. image=double(IMG);
  174. s=size(image);
  175. result=zeros(s(1),s(2),s(3));
  176. for i = 1:s(1)
  177.     j = 1:s(2);
  178.     k=s(1)-i+1;
  179.     l=s(2)-j+1;
  180.     result(k,l,:)=image(i,j,:);
  181. end
  182. res=uint8(result);
  183. IMG=res;
  184. imshow(IMG, 'Parent', handles.axes1);
  185. function Mirror_Callback(hObject, eventdata, handles)
  186. global IMG
  187. image=double(IMG);
  188. s=size(image);
  189. result=zeros(s(1),s(2),s(3));
  190. for i = 1:s(1)
  191.     j = 1:s(2);
  192.     k=s(1)-i+1;
  193.     result(k,j,:)=image(i,j,:);
  194. end
  195. res=uint8(result);
  196. IMG=res;
  197. imshow(IMG, 'Parent', handles.axes1);
  198. function MirrorH_Callback(hObject, eventdata, handles)
  199. global IMG
  200. image=double(IMG);
  201. s=size(image);
  202. result=zeros(s(1),s(2),s(3));
  203. for i = 1:s(1)
  204.     j = 1:s(2);
  205.     l=s(2)-j+1;
  206.     result(i,l,:)=image(i,j,:);
  207. end
  208. res=uint8(result);
  209. IMG=res;
  210. imshow(IMG, 'Parent', handles.axes1);

Информация о работе Обработка изображений в среде Matlab