matlabGUI设计论文.docx
《matlabGUI设计论文.docx》由会员分享,可在线阅读,更多相关《matlabGUI设计论文.docx(24页珍藏版)》请在冰豆网上搜索。
matlabGUI设计论文
《数字图像处理》
期末大作业暨课程考核报告
姓名:
周阳扬舟
学号:
24112201824
序号:
28
湖南理工学院南湖学院
2014年6月
第一部分:
设计部分
1、绘制灰度直方图,实现直方图均衡化和直方图规定化
1.1算法原理
1.2算法设计
1.3实验结果及对比分析
2、灰度图像的对比度增强
2.1算法原理
2.2算法设计
2.3实验结果及对比分析
3、图像的几何变换
3.1算法原理
3.2算法设计
3.3实验结果及对比分析
4、图像加噪,然后使用中值和均值进行滤波处理.
4.1算法原理
4.2算法设计
4.3实验结果及分析
5、采用robertprewittsobel拉普拉斯算子对图像进行边缘提取
5.1算法原理
5.2算法设计
5.3实验结果及分析
第二部分:
编写一个基于GUI的图像处理程序
2.1界面功能设计
2.2界面功能实现
2.3gui功能调试
3.小结(感受和体会)
一、设计部分
1绘制灰度直方图,实现直方图均衡化和直方图规定化
1.1算法原理
将灰度化图像的每个灰度级的像素个数统计出来,并计算占总像素的比例,就是灰度直方图。
反映了各个灰度级分布的情况,为进一步处理图像打下基础。
可以求出出图像的灰度直方图,然后进行均衡化,规定化。
1.2算法设计
绘制灰度直方图,实现直方图均衡化和直方图规定化算法流程图:
直方图规定化算法流程图
直方图均衡算法流程图
直方图统计算法流程图
1.3实验结果及对比分析
(1)程序如下:
clear
I=rgb2gray(imread('zhouyan.jpg'));%读入图像,并进行灰度处理
subplot(2,2,1),imshow(I),title('灰度图像')%显示
subplot(2,2,2),imhist(I),title('灰度图像的直方图')%显示
ylim('auto');%设定刻度线和取值范围
G=histeq(I,1024);%对图像I进行直方图均衡化处理,生成图像
subplot(2,2,3),imshow(G),title('直方图均衡化处理图像')%显示
subplot(2,2,3),imshow(G),title('直方图均衡化处理图像')
ylim('auto')%设定刻度线和取值范围
imwrite(I,'1.jpg')%将灰度图像I写入计算机
imwrite(I,'1.jpg')%将均衡化后的图像I写入计算机
ylim('auto')%设定刻度值和取值范围
xlim('auto')%设定刻度值和取值范围
K=histeq(I,[050100150200256])%进行直方图规定化
subplot(2,2,4),imshow(K),title('直方图规定化处理图像')%显示
ylim('auto')%设定刻度值和取值范围
xlim('auto')%设定刻度值和取值范围
imwrite(K,'K.jpg')%将K写入计算机
(2)在mmatlab中的运行结果截图:
1、
2
2、
3
2灰度图像的对比度增强
2.1算法原理
增强图像对比度实际是增强原图的各部分的反差。
实际中往往是通过增强原图里某两个
灰度值间的动态范围来实现的。
通过调用库函数immultiply改变对比度。
并和原灰度图像进行对比。
2.1算法流程
对比度改变算法流程图:
2.3实验结果及对比分析
(1)程序代码如下:
a=imread('zhouyang.jpg');%读图片函数
b=rgb2gray(a);
subplot(2,2,1);
imshow(b);
title('灰度化的图像');
g=immultiply(b,0.5);%对比度变换
subplot(2,2,2);
imshow(g);
title('对比度为0.5的图像');
subplot(2,2,3);
d=immultiply(b,5);
imshow(d,5);
title('对比度为5的图像');
(2)实验结果:
3图像的几何变换
3.1算法原理
a、图像平移变换:
e、图像的镜像变换
将图像水平或是垂直方向上的像素点进行调换。
利用size函数得到图像的大小,m,n。
若是水平镜像则X=m-x;若是垂直镜像则Y=n-y;(x,y)为原灰度图像的像素。
(X,Y)镜像后图像的像素。
3.2算法设计
几何变换的算法流程图为:
:
3.3实验结果及对比分析
(1)程序代码如下:
平移
a=imread('zhouyang.jpg');%读图片函数
b=rgb2gray(a);
subplot(1,2,1);
imshow(b);
title('原始图像');
[M,N]=size(b);
fory=1:
N;
forx=1:
M;
X=x+290;
Y=y+130;
ifX>=1&&X<=M&&Y>=1&&Y<=N;
B(X,Y)=a(x,y);
end;
end;
end;
subplot(1,2,2);
imshow(B);
title('平移后的图形');
.镜像
程序代码:
a3=imread('E:
\123.jpg');%读图片函数
b3=rgb2gray(a3);
subplot(1,2,1);
imshow(b3);
title('原始图像');
[P,Q]=size(b3);
fory=1:
Q;
forx=1:
P;
X=P-x;
Y=Q-y;
ifX>=1&&X<=P&&Y>=1&&Y<=Q;
D(X,Y)=b3(x,y);
end;
end;
end;
subplot(1,2,2);
imshow(D);
title('镜像后的图形');
运行结果:
:
4图像加噪(用输入参数控制不同噪声),然后使用空域和频域进行滤波处理
4.1算法原理
中值滤波法的原理:
对一个窗口(记为W)内的所有像素灰度值进行排序,取排序结果的中间值作为W中心点处像素的灰度值。
4.2实验结果及分析
(1)程序代码:
figure
a=imread('zhouyang.jpg');%读图片函数
I=rgb2gray(a);subplot(2,2,1);
imshow(I);title('原图');
In=imnoise(I,'gauss',0.02);subplot(2,2,2);
imshow(In);
title('加高斯噪声后的图形');
d=medfilt2(In);
subplot(2,2,3)
imshow(d);title('中值滤波后的图形');
e=filter2(fspecial('average',5),In)/255;
subplot(2,2,4);
imshow(e);title('5*5平均值滤波后的图形');
figure
a=imread(''zhouyang.jpg'');%读图片函数
I=rgb2gray(a);
subplot(2,2,1);
imshow(I);
title('原图');
In=imnoise(I,'salt&pepper',0.02);
subplot(2,2,2);
imshow(In);
title('加椒盐噪声后的图形');
d=medfilt2(In);
subplot(2,2,3);
imshow(d);
title('中值滤波后的图形');
f=filter2(fspecial('average',7),In)/255;
subplot(2,2,4)
imshow(f);
title('7*7平均值滤波后的图像');
(2)运行结果:
椒盐噪声
乘性噪声
、
高斯噪声
均值滤波
5采用robert,prewitt,sobel,拉普拉斯算子对图像进行边缘提取
5.1算法原理
5.2算法设计
算法实现流程图:
5.3实验结果及分析
程序代码及实验结果:
%拉普拉斯边缘检测函数定义
function[out1,out3,out2]=edgeLaplacian(I)
%I=[15255100200200;17254101109;371010026;108721;1165022;239720]
L1=[0-10;-14-1;0-10];
L3=[0-10;-15-1;0-10];
L2=[-1-1-1;-14-1;-1-1-1];
[M,N]=size(I);
I=im2double(I);
out1=zeros(M,N);
out3=zeros(M,N);
out2=zeros(M,N);
forx=2:
M-1
fory=2:
N-1
out1(x,y)=grad(I,x,y,L1);
out3(x,y)=grad(I,x,y,L3);
out2(x,y)=grad(I,x,y,L2);
end
end
%对输出图像进行标准化处理
out1=out1+abs(min(min(out1)));out3=out3+abs(min(min(out3)));out2=out2+abs(min(min(out2)));%对输出图像加一个数
%out1=abs(out1);out3=abs(out3);out2=abs(out2);%对输出图像取绝对值
figure
subplot(221);imshow(I);title('原图像');
subplot(222);imshow(out1,[]);title('L1方向上边缘');
subplot(223);imshow(out3,[]);title('L2方向上边缘');
subplot(224);imshow(out2,[]);title('L3方向上边缘');
functionout=grad(I,x,y,L)
sub=[I(x-1,y-1)I(x-1,y)I(x-1,y+1);...
I(x,y-1)I(x,y)I(x,y+1);...
I(x+1,y-1)I(x+1,y)I(x+1,y+1)];
m=sub.*L;
out=sum(m(:
));
%Roberts函数定义
function[outResult,outRoberts]=edgeroberts4(I)
M1=[0-10;-14-1;0-10]/sqrt(3);
[M,N]=size(I);
I=im2double(I);
outRoberts=zeros(M,N);
outResult=zeros(M,N);
forx=2:
M-1
fory=2:
N-1
outRoberts(x,y)=grad(I,x,y,M1);
outResult(x,y)=sqrt(outRoberts(x,y));
end
end
figure
subplot(1,2,1);imshow(I);title('原图像');
subplot(1,2,2);imshow(outResult);title('Robert边缘');
functionoutResult=grad(I,x,y,M)
sub=[I(x-1,y-1)I(x-1,y)I(x-1,y+1);I(x,y-1)I(x,y)I(x,y+1);I(x+1,y-1)I(x+1,y)I(x+1,y+1)];
outMid=sub.*M;
outResult=sum(outMid(:
))^2;
%sobel函数定义
function[out,outx,outy]=edgesobel(I)
%I=[15255100200200;17254101109;371010026;108721;1165022;239720]
M1=[-1-2-1;000;121];
M2=[-101;-202;-101];
[M,N]=size(I);
I=im2double(I);
outx=zeros(M,N);
outy=zeros(M,N);
out=zeros(M,N);
forx=2:
M-1
fory=2:
N-1
outx(x,y)=grad(I,x,y,M1);
outy(x,y)=grad(I,x,y,M2);
out(x,y)=sqrt(outx(x,y)+outy(x,y));
end
end
figure
subplot(1,2,1);imshow(I);title('原图像');
subplot(1,2,2);imshow(out);title('Sobel边缘');
functionout=grad(I,x,y,M)
sub=[I(x-1,y-1)I(x-1,y)I(x-1,y+1);...
I(x,y-1)I(x,y)I(x,y+1);...
I(x+1,y-1)I(x+1,y)I(x+1,y+1)];
out1=sub.*M;
out=sum(out1(:
))^2;
%函数调用
a=imread('ty.jpg');
I=rgb2gray(a);
subplot(1,2,1);
imshow(I);
title('原图');
J2=edge(I,'prewitt');
subplot(1,2,2),imshow(J2);
title('perwitt边缘检测');
%读入待处理图像
a=imread('yyy.jpg');
I=rgb2gray(a);
[out,outx,outy]=edgesobel(I);%Sobel边缘检测
[out1,out3,out2]=edgeLaplacian(I);%拉普拉斯边缘检测
[outResult,outRoberts]=edgeroberts4(I);%Roberts边缘检测
实验结果:
Roberts
Sobel
Prewitt
拉普拉斯
第二部分:
编写一个基于GUI的图像处理程序。
2.1界面功能设计
图形用户界面(GraphicalUserInterfaces,GUI)是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。
用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。
1、GUI整体界面
2.功能实现部分(算法包GUI界面功能设计)
实现一个图像灰度化
图像旋转
GUI界面设计结果
设计结果:
第三部分:
小结(感受和体会)
我觉以下几点对于学好matlab很重要:
兴趣、悟性、勤奋、坚持。
兴趣,不知道哪位名人说过“兴趣是最好的老师。
”我觉得非常有道理,我曾对于matlab制作动画很感兴趣,并收集了很多例子,在小木虫贴出来后很多人对于matlab制作动画都很感兴趣, 计算模拟版活动---程序模拟动画展示 ,一个人一旦对某事物有了浓厚的兴趣,就会主动去求知、去探索、去实践,并在求知、探索、实践中产生愉快的情绪和体验。
这样才能主动学习,并且学好到精通。
悟性,通常人认为指顿悟,慧根,我觉得就是对一个问题不断的思索,将自己的体会和感受融合,获得属于自己的知识。
有很多事情、问题,都是可以想明白的。
只有不停的想,才能想明白,想透彻。
就像我自己解决matlab编程进行DGGE电泳图谱多样性相似性分析,当时没有工具,而且问题必须解决,于是我不停的想,吃饭时,睡觉前,最终终于解决。
勤奋,一勤天下无难事。
从古到今,有多少名人不是有勤奋而得来成功的。
现在的年轻人,一代比一代聪明。
要不被别人淘汰,要超越别人,只有靠时间堆出来。
每天多学一些,多积累一些。
学习matlab也一样,想要学会,使用熟练,不花时间练习,写代码,亲自运行调试,是很难掌握好的。