最近在做图像处理的有关课设,想起以前学过的以冈萨雷斯版为教材的数字图像处理的内容和基于MATLAB GUI编程的代码,在此浅浅记录一下。
一、GUI打开与基本操作
>>guide
在命令行窗口输入guide,新建gui,弹出fig窗用以设计gui。画好界面后进行菜单编辑器的编辑,命名菜单栏后点击查看打开回调函数,进入编程。以下是我设计gui的部分菜单:
二、图像打开、保存、另存、撤销操作
axes1、axes2图像信息存储在OpeningFcn函数中,以便操作后期图像的保存与撤销操作:
% Choose default command line output for zuoye
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
setappdata(handles.axes1,'img1',0);
setappdata(handles.axes2,'img2',0);
图像打开open:
global s; %全局变量设置,axes1图像信息存储
global cell;%用于保存操作步骤
global pos;%用于保存操作步骤
cell={};
pos=0;
axes(handles.axes1);
[filename,pathname]=uigetfile({'*.bmp;*.jpg;*.png;*.jpeg;*.tif'},'pick an image','C:\');
str=[pathname filename];
s=str;
if isequal(filename,0)||isequal(pathname,0)
warndlg('please select a picture first!','warning'); %若没选择图像,弹出警告
return;
else
img_src=imread(str);
imshow(img_src);
end
setappdata(handles.axes1,'img1',img_src);
保存save:(变换后的图像覆盖原图,老师要求不能采用截图形式保存,因此上文设变量保存更新axes1、axes2的图像信息)
global s;
axes(handles.axes1);
img=getappdata(handles.axes2,'img2');
imshow(img);
imwrite(img,s);
setappdata(handles.axes1,'img1',img);
另存save as :(变换后的图像新建路径保存)
[filename,pathname]=uiputfile({'*.jpg','JPEG(*.jpg)';'*.bmp','Bitmap(*.bmp)';'*.gif','GIF(*.gif)';'*.*','ALL Files(*.*)'},'save picture','untitled');
if filename==0
return;
else
fpath=fullfile(pathname,filename);
end
img_src=getappdata(handles.axes2,'img2');
imwrite(img_src,fpath);
撤销操作:
global cell;
global pos;
imshow(cell{pos-1});
三、图像形式
图像主要有三种形式:rgb彩图、灰度图、二值图,均以像素点矩阵表示。
彩图每个像素包含R,G,B三个分量值,取某一分量时:image(m,n,x),m,n为矩阵坐标,x为某一rgb通道。
灰度图的像素只表示明暗,不表示颜色,根据其不同灰度级来存储。
二值图每个像素值为0或1,只有黑白两种颜色。
三种图片之间可用函数转换,彩图颜色模式有rgb、lab、hsv等。转换函数有:
rgb2gray %将rgb图像转换成灰度图
rgb2lab %将rgb图象转换成lab图象
rgb2hsv %将rgb图象转换成hsv图象
hsv2rgb %将hsv图象转换成rgb图象
rgb2ycbcr %将rgb图象转换成ycbcr图象
ycbcr2rgb %将ycbcr图象转换成rgb图象
im2double %将灰度图转换成二值图