[编者注:]图像就是用户数据,当前社会随时随地可以得到。图像数据一般存储为磁盘文件,通常是用文件菜单打开文件(完成赋值语句),本作业是通过按钮来实现常规情况下菜单的功能。打开文件后,首先获得图像像素大小,height和 width,通过双循环语句,完成对每个像素操作,实现对图像的处理操作,体现编程思想;同时,通过读取图像depth,[height, width, depth] = size(handles.Img),进行分支判断,选择结构控制语句应用得当;运行程序,打开数据前,坐标轴隐藏,显示图像切换功能不可用等相关处理(初始化),值得推荐。
一、Matlab大作业说明与课程建议
1.大作业说明
本次大作业我选择了图像处理系统。在去年大一上半学期时,我曾经用C/C++和Opencv库完成了一个类似的、更为复杂的系统,今年的matab大作业由于时间限制,我仅选择了三个部分实现:灰度化、Sobel算子边缘检测、最邻近插值法实现旋转。
2.课程建议
首先感谢张老师一学期来的辛勤付出。在这个课程中,毫无疑问我学习到了许多。张老师课程设置合理,课程难度适中,给我很大帮助。
可以看到,这门课的定位是对matlab的基础应用进行讲解。个人的一些拙见:在这门课的基础上,可以开设对matlab更细化方向的课程:如数学建模与Matlab、Matlab数值计算等方向的课程。当时我选择这门课的一个原因是想为明年参加数学建模竞赛进行编程基础的训练。而今年我们东大开设的“第二课堂”课程(以社团形式开设的兴趣课程)无疑也是一种很好的途径。我认为可以与有关社团合作,开展细化方向的Matlab课程,让Matlab在东大得到更广泛的应用。
再次谢谢张老师!
二、程序运行情况
1、运行程序,打开数据前,坐标轴隐藏,显示图像切换功能不可用。
2、通过打开图片按钮,弹出选择图片对话框。
3、原始图像显示在坐标轴中
4、点击“灰度化”按钮,并选择“操作后图像”单选框,显示处理结果
三、设计界面(Photo.fig)
四、程序代码(Photo.m)
function varargout = Photo(varargin)
% PHOTO MATLAB code for Photo.fig
% Last Modified by GUIDE v2.5 19-May-2022 16:59:30
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Photo_OpeningFcn, ...
'gui_OutputFcn', @Photo_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
% End initialization code - DO NOT EDIT
function Photo_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
handles.Isread = 0;
guidata(hObject, handles);
function varargout = Photo_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
handles.Source.Enable = 'off';
handles.Destination.Enable = 'off';
function Open_Callback(hObject, eventdata, handles)
[filename, pathname] = uigetfile({'*.jpg';'*.bmp';'*.png'}, '请选择图片');
if isequal(filename, 0)
errordlg('未选择图片','错误','modal');
else
handles.Isread = 1;
Img = imread([pathname filename]);
handles.Img = Img;
imshow(handles.Img);
handles.destImg = handles.Img;
handles.Source.Enable = 'on';
handles.Destination.Enable = 'on';
axes(handles.mainAxes);
handles.output = hObject;
guidata(hObject, handles);
end
function Save_Callback(hObject, eventdata, handles)
[filename, pathname] = uiputfile({'*.bmp';'*.jpg';'*.png'});
if isequal([filename, pathname],[0, 0])
errordlg('保存有误','错误','modal');
return;
else
SaveFile = fullfile(pathname, filename);
imwrite(handles.destImg, SaveFile)
end
function RGB2GRAY_Callback(hObject, eventdata, handles)
[height, width, depth] = size(handles.Img);
handles.destImg = zeros(height, width);
handles.destImg = uint8(handles.destImg);
if depth < 2
errordlg('原图像不是彩色图', '错误', 'modal');
return;
else
for i = 1:height
for j = 1:width
handles.destImg(i, j, 1) = 0.299 * handles.Img(i, j, 1) + 0.587 * handles.Img(i, j, 2) + 0.114 * handles.Img(i, j, 3);
end
end
领取专属 10元无门槛券
私享最新 技术干货