医学图像处理课程设计图像预处理说明书.docx
《医学图像处理课程设计图像预处理说明书.docx》由会员分享,可在线阅读,更多相关《医学图像处理课程设计图像预处理说明书.docx(15页珍藏版)》请在冰豆网上搜索。
医学图像处理课程设计图像预处理说明书
医学图像处理课程设计说明书
基于matlab医学图像预处理系统设计
班级
生医112
姓名
张市力
学号
111417010231
指导教师
李振伟、何琳
课程设计任务书
(指导教师填写)
课程设计名称《医学图像处理》课程设计学生姓名张市力专业班级生医112
设计题目医学图像预处理系统设计
一、课程设计目的
1、熟练运用MATLAB编程实现医学图像读写、几何变换、直方图和频谱图显示等基础预处理;进一步巩固和加强对《医学图像处理》课程中所学相关理论知识的理解。
2、掌握MATLABGUI设计的基本原理和方法,并在此基础上进行医学图像应用处理系统的初步设计与开发;通过实践培养独立分析问题、解决问题的能力。
二、设计内容、技术条件和要求
1、运用MATLAB设计和开发一个医学图像预处理系统,该系统能够读取不同类型的(包括灰度图像、RGB图像和索引图像)医学图像、显示已读取图像的直方图(彩色图像的直方图取HSI模型中亮度分量的直方图)、能通过选择不同的插值方法和设置不同的参数(如旋转度数、缩放倍数等)对其进行旋转、缩放等几何变换,并且能显示变换前后图像的频谱(彩色图像的频谱取HSI模型中亮度分量的频谱)。
2、要求为该系统设计友好、易用的GUI界面;
3、系统在实际操作中能够按照设计要求稳定、有效、正确地运行。
4、运用该系统对各类图像进行处理实验,讨论不同图像视觉效果与其直方图的关系,并观察比较不同插值方法的效果以及图像经几何变换前后频谱的异同,总结其规律。
三、时间进度安排
1、课题介绍、人员安排、熟悉编程环境:
2天
2、分析题目、编写程序:
4天
3、调试程序并撰写设计报告:
3天
4、演示与答辩:
1天
四、主要参考文献
1、冈萨雷斯.数字图像处理(MATLAB版).电子工业出版社.2005
2、冈萨雷斯.数字图像处理(第三版).电子工业出版社.2011
3、MATLABHelpandDemos
指导教师签字:
2014年9月1日
医学图像预系统设计
一、设计目的
1、熟练运用MATLAB编程实现医学图像读写、几何变换、直方图和频谱图显示等基础预处理;进一步巩固和加强对《医学图像处理》课程中所学相关理论知识的理解。
2、掌握MATLABGUI设计的基本原理和方法,并在此基础上进行医学图像应用处理系统的初步设计与开发;通过实践培养独立分析问题、解决问题的能力。
3、改善图像的质量,它以人为对象,以改善人的视觉效果为目的。
图像处理中,输入的是质量低的图像,输出的是改善质量后的图像,常用的图像处理方法有图像增强、复原、编码、压缩等。
二、设计内容与原理
(一)内容
1、GUI界面的熟悉及使用;
2、在GUI界面的图像读取
3、图像直方图均衡化
4、采用多种插值方法进行图像缩放
5、运用插值法对图像任意角度旋转
6、在一定范围内对图像进行任意合法区域剪切
7、系统结束时的安全退出
(二)原理
插值通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数,用这个重建的函数便可求出任意位置的函数值。
1、最近邻插值
概念:
(U0,V0)点的灰度值等于离它最近点的灰度值,即:
优点:
简单,快捷。
缺点:
误差大。
当用这种方法实现大倍数处理时,在图像中可以明显地看出块状效应。
2、双线性插值
用[S]表示不超过S的最大整数,则
第一步:
第二步:
第三步:
优点:
插值效果较好。
缺点:
计算量较大,并且插值后的图像变模糊,从而损失一些细节。
3、双三次插值
对于灰度变化规律较为复杂的图像,可以采用同一直线方向上更多采样点的灰度值对该点进行非线性插值。
步骤:
第一步:
求a,b,c,d四点处的灰度值;
第二步:
对a,b,c,d四点在垂直方向上做三次多项式内插,求得插值点的灰度值;
特点:
由16个邻近点求得,插值精度高,计算量大。
三、设计思路与方案
1、根据要求,设计内容
2、根据需要,在GUI上对应相关模块
3、根据不同模块实现的功能调用函数
4、编写算法
5、调试
四、详细设计步骤
1、创建一个GUI窗口
在Matlab环境中打入“guide”
点击OK,
2、根据要求放置模块,并对模块进行处理。
3、对各模块的属性进行编辑
4、对每个pushbutten键进行回调函数编辑
单击pushbutten键右键,在viewcallbacks中选中callback
5、在蓝色区域所包含的绿色字母下方编辑算法
6、然后单击上方功能栏里的执行按钮观察功能实现情况。
结果如下图:
7、按照上述4——6的步骤实现每个pushbutten键的功能,以及其算法调试。
五、结果与分析
1、图像直方图均衡化
2、图像的频谱
3、图像的缩放(不同插值方法)
Biliner算法实现图像缩小一倍
Bicubic算法实现图像放大4倍
4、图像任意角度旋转(逆时针300度旋转)
5、图像的任意区域的裁剪
六、总结
随着应用的需求和科技的发展,图像处理有了一些新的研究趋势和特点:
多学科领域交叉综合;新理论新方法不断出现;视觉机理研究深入;实现技术研究进展迅速;应用更实用化等。
图像预处理是系统中的基础环节,处理结果的好坏自接影响着图像识别系统后续环节的进行,这样就为图像系统后续环节的进行打下了良好的基础。
通过使用MATLAB图像预处理工具箱对图像进行处理,并对结果进行观察和分析,更加深了对图像预处理的直观认识。
本次设计主要进行了以下方面的工作:
(1)对图像预处理内容及过程的认识和熟悉。
(2)对图像预处理技术的主要内容进行了操作和熟悉。
(3)对MATLAB以及其图像预处理工具简单的使用。
(4)了解和使用GUI对图像进行简单的处理。
参考文献
1、冈萨雷斯.数字图像处理(MATLAB版).电子工业出版社.2005
2、冈萨雷斯.数字图像处理(第三版).电子工业出版社.2011
3、阎建国.高亮等图像处离技术在车牌识别中的应用[J]电了技术应用,2000.1.
4、周金萍.MATLAB6.5图形图像处理与应用实例[M],利学出版社,2003.8.
5、孙兆林.MATLAB6.x图像处理[M]清华大学出版社,2002.5.
6、帝毓晋.图像工程(上册):
图像处理与分析。
北京:
清华大学出版社,1999.2.
7、徐建华.图像处理与分析.北京科学出版社,1992.
8、王磊.基于MATLAB的数字图像处理.苏州市职业大学学报。
9、贾小军.基于MATLAB的图像增强技术研究.渭南师范学院学报。
10、李信真.车明刚.《计算方法》.西安西北工业大学出版社。
11、周新伦.柳建.《数字图像处理》.国防工业出版社。
附录
1、图像的读取
functionpushbutton1_Callback(hObject,eventdata,handles)
globalIM;%设计一个全局变量用于存储打开的图片
[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif''*.gif'},'选择图片');
ifisequal(filename,0)
disp('UsersSelectedCanceled');
else
str=[pathnamefilename];%路径和文件名
globalG
G=str;
IM=imread(str);%读取图片
axes(handles.axes1);%使用第一个axes
imshow(IM);%显示图片
end
2、直方图读取
functionpushbutton3_Callback(hObject,eventdata,handles)
m=rgb2gray(IM);
axes(handles.axes2);
imhist(m);
3、频谱
functionpushbutton19_Callback(hObject,eventdata,handles)
axes(handles.axes2);
%x=imread(IM);
ifndims(IM)==3
m=fft2(IM(:
:
1));
y=fftshift(m);
imshow(log(abs(y)),[]);
else
m=fft2(x);
y=fftshift(m);
imshow(log(abs(y)),[]);
end
4、图像的任意角度旋转
functionpushbutton16_Callback(hObject,eventdata,handles)
globalIM
%I=double(im);
r=str2double(get(handles.edit14,'String'));
I2=imrotate(IM,r,'bilinear');
axes(handles.axes7);
imshow(I2);
5、图像缩放(三种插值方法)
(1)functionpushbutton15_Callback(hObject,eventdata,handles)
globalIM
%I=double(IM);
m=str2double(get(handles.edit5,'String'));
I1=imresize(IM,m,'bilinear');
axes(handles.axes7);
imshow(I1);
(2)functionpushbutton20_Callback(hObject,eventdata,handles)
globalIM
%I=double(IM);
m=str2double(get(handles.edit16,'String'));
I1=imresize(IM,m,'bicubic');
axes(handles.axes7);
imshow(I1);
(3)functionpushbutton21_Callback(hObject,eventdata,handles)
globalIM
%I=double(IM);
m=str2double(get(handles.edit17,'String'));
I1=imresize(IM,m,'nearest');
axes(handles.axes7);
imshow(I1);
6、图像的裁剪
functionpushbutton18_Callback(hObject,eventdata,handles)
x1=str2double(get(handles.edit15,'String'));
y1=str2double(get(handles.edit11,'String'));
x2=str2double(get(handles.edit12,'String'));
y2=str2double(get(handles.edit13,'String'));
globalIM
%s=get(IM)
h=imcrop(IM,[x1,x2,y1,y2]);
axes(handles.axes7);
imshow(h);