matlab交互式程序设计示例:[1]数字图像处理
1、运用交互式的设计方法,把直方图-Cameraman试验 及拉普拉斯滤波器图像增强试验结合一块组成一个MATLAB图像处理系统小系统,两个试验分别在test1.m 和test2.m文件中,总的系统调用在program.m文件中。
为了好对比,每一个试验的如果都以subplot()的方式,共同显示在窗体中。如下图
在对于test2.m里的拉普拉斯滤波器图像增强试验 采用交互的方法自主输入不同的奇数方阵 还加入了数值类型判别异常冗错功能。
2、对于直方图-Cameraman试验的主程序设计
%注意
%K = im2gray(K);
%H=histeq(K);
%histeq处理gray图像
clear;
close all;
a=imread('Cameraman.jpg'); %读取图像至工作空间
subplot(3,3,1);
imshow(a);
title('Cameraman');
b=rgb2gray(a); %RGB转换为灰度图像
subplot(3,3,2);
imshow(b); %显示图像
title('实验1 灰度图像');
subplot(3,3,3);
imhist(b);
%imshow(j);
title('实验2 灰度直方图');
J=imadjust(b,[0.3,0.7],[0,1],1);
subplot(3,3,4),imshow(J);
title(' 实验3 用 g(m,n)=a’+(b’-a’)* f(m,n) /(b-a)进行变换 ');
subplot(3,3,5);
g=im2bw(a,0.7);
imshow(g);
title(' 实验4 图像二值化');
subplot(3,3,6);
w=histeq(b);
%K = im2gray(K);
%H=histeq(K);
%histeq处理gray图像
imhist(w);
title(' 实验5 利用直方图均衡化进行图像增强');
而后保存为test1.m如下图:
3、拉普拉斯滤波器图像增强试验的主程序设计
f1=imread('moon.tif');
subplot(2,2,1);
w1=fspecial('laplacian',0);
w0=[1 1 1;1 -8 1;1 1 1];
f1=im2double(f1);
g1=f1-imfilter(f1,w1,'replicate');
imshow(f1);
title('原图像');
subplot(2,2,2);
g2=f1-imfilter(f1,w0,'replicate');
imshow(g2);
title('3*3中心为-8的拉普拉斯滤波器增强的图像');
while 1
n=input('请输入一个奇数 例n=5, 9, 15, 25\n n=');
try
if rem(n,2)==0
assert();
end
A=ones(n);
m=(n+1)/2;
n1=n^2;
n1=1-n1;
disp('你输入的数对应的中心值是:');disp(n1);
A(m,m)=n1;
g3=f1-imfilter(f1,A,'replicate');
subplot(2,2,3);
imshow(g3);
title('对比测试图像');
catch
disp('你输入的不是奇数');
end
s=input('是否结束拉普拉斯滤波器图像增强对比试验\n y代表结束返回主菜单 n代表继续试验 例:n=y or n\n n=','s');
if s=='y'
disp('结束拉普拉斯滤波器图像增强对比试验,返回主菜单');
break;
end %if
end %while
而后保存为test2.m如下图:
4、对于拉普拉斯滤波器图像增强试验,为了解决在n=input('请输入一个奇数例n=5, 9,15, 25\n n=');语句执行中,用户输入的不是奇数,想到了用MATLAB中的异常机制,try catch end 其中为了让不是奇数自行抛出异常而被 catch捕获而执行catch中的语句我想到了用一个if end 来自行执行assert();抛出异常因为assert()不是MATLAB中的语言所以一定会抛出错误这样就可以变向的达到自抛出异常的作用了if rem(n,2)==0 assert();end 如果不是奇数就执行 assert 函数,catch收到异常就进行冗错
5、交互式的主程序里,主要运用一个switch语句来处理用户的不同输入 ,主程序program.m如下
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%运用交互式的设计方法,把直方图-Cameraman试验 及拉普拉斯滤波器图像增强试验结合
%一块组成一个MATLAB图像处理系统小系统,两个试验分别在test1.m 和test2.m文件
%中,总的系统调用在program.m文件中。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp('………………………………欢迎使用MATLAB图像处理系统………………………………');
disp('使用说明:请输入一个数字进行选择 0 代表:直方图-Cameraman试验 ');
disp('1代表:拉普拉斯滤波器图像增强试验 例num=0,1 ');
disp('Designed by wangxiaobo王晓博 email:1wangxiaobo@163.com');
while 1
num=input('请输入一个数字进行选择例num=0, 1\n num=');
switch num
case 0
disp('直方图-Cameraman试验');
test1();
case 1
disp('拉普拉斯滤波器图像增强试验');
test2();
otherwise
end
s=input('是否结束MATLAB图像处理系统使用\n n=y or n\n n=','s');
if s=='y'
disp('谢谢使用');
exit;
break;
end
disp('………………………………主菜单………………………………\n');
end
6、两个试验分别在test1.m 和test2.m文件中,总的系统调用在program.m文件中。
使用方法:
第一步在command windows 里输入program 运行这个文件。(源代码要放到MATLAB的work工作目录中,以待运行路径搜索)命令窗口如下图所示
7、使用说明:输入一个数字进行选择
0 代表:直方图-Cameraman试验
1代表:普拉斯滤波器图像增强试验
所以上图输入的是0直方图-Cameraman试验运行,结果如下图:
8、第二步 命令窗体现在显示的是
是否结束MATLAB图像处理系统使用
n=yor n
n=
就是说如果选择y就结束程序的运行,如选择n则继续。回到主菜单。我可以选择0 代表:直方图-Cameraman试验 1代表:普拉斯滤波器图像增强试验 ,这次选择 1
提示如下图:
9、进行拉普拉斯滤波器图像增强试验,要我们选择滤波的矩阵是多大的,我们可以选5
输出中心值是-24,增强效果如下图:
10、命令窗口提示我们是不是要结束拉普拉斯滤波器图像增强试验 我们选n代表不结束,继续试验,如下图命令窗口,
11、输入9后的图像效果如下图:
12、我们可以接着上面的样子,输入15,25,23,33,等分别以25 和33分效果展示如下图25 33.
13、结束试验可以选择y代表 想结束,返回到主菜单 再选择y 退出matlab程序运行。