1. 前言
MATLAB是Math Works公司于1982年推出的一套高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便的,界面友好的用户环境。MATLAB的推出得到了各个领域专家学者的广泛关注,其强大的扩展功能为各个领域的应用提供了基础。由各个领域的专家学者相继推出了MATLAB工具箱,而且工具箱还在不断的增加,这些工具箱给各个领域的研究和工程应用提供了有力的工具。借助于这些“巨人肩上的工具”,各个层次的研究人员可直观、方便地进行分析、计算及设计工作。从而大大地节省了时间。
2. 本文所用到的MATLAB命令
imread(); image(); whos; for; randn(); double(); uint8(); cat(); dwt2();
关于上述的命令使用方法可以参考一些MATLAB方面的书籍或者用MATLAB自带的帮助(help)命令.
如 我想知道dwt2()命令的使用方法 可以执行下面的命令
>> help dwt2
系统就会告诉你它的使用要求和方法,如果系统说找不到对应的帮助文件,那就可能是你装的MATLAB里面没有这个命令,那很可能这个命令就不能使用
. 本文所用到的图像都是作者直接把图像文件放到Matlab的work子目录里面的。如果直接在Matlab上运行作者所写的代码,肯定不会通过。不过Matlab自己也带有图像,查阅一下相关的资料,就很容易明白怎么去做。
3. 程序和实验结果
⑴
>> [x,map]=imread('lena.bmp');
>> image(x);colormap(map);
>> whos x
Name Size Bytes Class
x 256x256 65536 uint8 array
Grand total is 65536 elements using 65536 bytes
图1为运行结果
图1
⑵.图像的旋转
① >> image(x');colormap(map); x’是x的转置
② >> [x,map]=imread('lena.bmp');
>> for i=1:128
for j=1:256
t=x(i,j);
x(i,j)=x(256-i+1,j);
x(256-i+1,j)=t;
end
end
>> image(x);colormap(map);
①和②的运行结果,自己先想想应该是什么一个结果,然后再到电脑上实现一下,看看是否与自己的想法一致。
③>> [x,map]=imread('lena.bmp');
>> for i=1:128
for j=1:256
x(i,j)=x(256-i+1,j);
end
end
>> image(x);colormap(map);
运行结果如图2
图2
④ >> [x,map]=imread('lena.bmp');
>> b=randn(256);
>> x=double(x)*b;
>> image(x);colormap(map);
运行结果将是原图像变成了一个模糊的一个图像,和原图像完全不一样。
⑤ >> det(b)
ans = -5.3438e+252
>> image(x*inv(b));colormap(map);
我们将会看到,图像又被还原成了原来的图像。
.通过这几个例子,可以看出利用矩阵的知识来处理图像,是很方便的,当然矩阵有很多变换方式,有兴趣的自己可以做一些变换,看看得到什么效果.
⒋ MATLAB在小波中的应用
MATLAB工具箱中,有专门的小波处理图像的函数命令,这对我们对图像利用小波的知识进行相应的变换提供了方便,这里我们只是对灰度图像和彩色图像进行小波分解。限于篇幅,没有把运行结果显示在文章中。
- 灰度图像的分解
① >> [x,map]=imread('lena.bmp'); >> [ca,ch,cv,cd]=dwt2(x,'db1');
>> image([ca,ch;cv,cd]);colormap(map);
② >>image([ca,4*ch;4*cv,4*cd]);colormap(map);
对后面的三个都乘以一个数,主要是为了能看清楚这三个分量。
⑵ 对彩色图像的分解
彩色图像在存储在电脑上是以三位矩阵的方式存储的,关于图像的存储方法自己可以查阅相关的资料.
MATLAB提供的小波分解函数一般只对二维矩阵可以进行分解和重构;根据彩色图像成像的原理,我们把彩色图像的RGB三个分量先提出来,对三个分量进行分解,然后再加起来,就得到了彩色图像的分解。MATLAB也提供了从三维矩阵提取二维矩阵的方法.
① >> [x,map]=imread('Barbara.bmp');
>> image(x);colormap(map);
② >> [x,map]=imread('Barbara.bmp');
>> image(x);colormap(map);
>> a=x(:,:,1);
>> b=x(:,:,2);
>> c=x(:,:,3);
>> [ca,ch,cv,cd]=dwt2(a,'db1');
>> [ca1,ch1,cv1,cd1]=dwt2(b,'db1');
>> [ca2,ch2,cv2,cd2]=dwt2(c,'db1');
>> B=uint8(cat(3,ca,ca1,ca2));
>> B1=uint8(cat(3,ch,ch1,ch2));
>> B2=uint8(cat(3,cv,cv1,cv2));
>> B3=uint8(cat(3,cd,cd1,cd2));
>> image([B,B1;B2,B3]);colormap(map);
三个分量看得不是很明显;我们适当地扩大分量,来看一下效果
B1=uint8(cat(3,4*ch,4*ch1,4*ch2));
B2=uint8(cat(3,4*cv,4*cv1,4*cv2));
B3=uint8(cat(3,4*cd,4*cd1,4*cd2));
image([B,B1;B2,B3]);colormap(map);
实验结果可以看出,其它三个被突出了。
为了说明a,b,c是原来彩色图像的三个RGB分量,我们可以用a,b,c再组合成原来的彩色的图像.
>> image(cat(3,a,b,c));colormap(map);
运行结果可以看出,和原来的彩色图像是一样的。
⒌ 结束语
本文只是进行了一些简单的图像处理,Mtalab软件本身还包含一些复杂的图像处理命令,如边缘检测,图像的增强等等,另外,对图像进行了小波分解以后,还可以进行图像的压缩,还可以利用二进小波变换来求图像的奇异点。总之,Mtalab作为一个强大的数据处理软件,
为我们进行科学研究提供了极大的方便。