MATLAB数字图像处理初步
一.实验目的
1.掌握MATLAB的基本操作。
2.了解数字图像处理在MATLAB中的基本处理过程。
3.学习图像处理的简单操作方法。
二.实验设备
1.PC机一台;
2.软件matlab;
三.程序设计
1. 图像读取:imread(‘图像路径’)
Help:
imread
Read image from graphics file
Syntax
A = imread(filename, fmt)
[X, map] = imread(…)
[...] = imread(filename)
[...] = imread(URL,…)
[...] = imread(…,Param1,Val1,Param2,Val2…)
2. 图像显示:imshow(‘图像路径’)
Help:
imshow
Display image
Syntax
imshow(I)
imshow(I,[low high])
imshow(RGB)
imshow(BW)
imshow(X,map)
imshow(filename)
himage = imshow(…)
imshow(…, param1, val1, param2, val2,…)
3. 图像信息提取:whos ’’
Help:
who, whos
List variables in workspace
Graphical Interface
As an alternative to whos, use the Workspace browser. For information on viewing the contents of MAT-files without loading them, see Using the Current Folder Browser.
Syntax
who
whos
who(variable_list)
whos(variable_list)
who(variable_list, qualifiers)
whos(variable_list, qualifiers)
s = who(variable_list, qualifiers)
s = whos(variable_list, qualifiers)
who variable_list qualifiers
whos variable_list qualifiers
4. 获取图像文件压缩颜色等其他信息:imfinfo(‘图像路径’)
Help:
imfinfo
Information about graphics file
Syntax
info = imfinfo(filename,fmt)
info = imfinfo(filename)
info = imfinfo(URL,…)
5. 压缩图像并保存成jpg: imwrite
imwrite(f,’filename.jpg’,’quality’,q) 0<=q<=100
6. 将tif存为bmp:imwrite(‘源图像路径’,‘保存路径’,‘bmp’)
Help:
imwrite
Write image to graphics file
Syntax
imwrite(A,filename,fmt)
imwrite(X,map,filename,fmt)
imwrite(…,filename)
imwrite(…,Param1,Val1,Param2,Val2…)
7. 灰度图像转二值图像:im2bw()
Help:
im2bw
Convert image to binary image, based on threshold
Syntax
BW = im2bw(I, level)
BW = im2bw(X, map, level)
BW = im2bw(RGB, level)
8. RGB图像创建灰度图像:rgb2gray()
Help:
rgb2gray
Convert RGB image or colormap to grayscale
Syntax
I = rgb2gray(RGB)
newmap = rgb2gray(map)
9. 多幅图像在同一个窗口显示:subplot(1,2,1),imshow(A);subplot(1,2,2),imshow(B)
Help:
subplot
Create axes in tiled positions
Syntax
h = subplot(m,n,p) or subplot(mnp)
subplot(m,n,p,’replace’)
subplot(m,n,P)
subplot(h)
subplot(‘Position’,[left bottom width height])
subplot(…, prop1, value1, prop2, value2, …)
h = subplot(…)
四.实验步骤
1. 读取一幅图像,将其存入一个数组中;
2. 显示这幅图像;
3. 提取该图像的基本信息;
4. 获取图像文件的压缩,颜色等等其他的详细信息;
5. 压缩这幅图象,将其保存为一幅压缩了像素的jpg文件;
6. 将最初读入的tif图象另存为一幅bmp图像;
7. 将一幅灰度图像转化为二值图像,并且显示出来,观察图像的特征;
8. 根据RGB图像创建一幅灰度图像;
9. 多幅图像在同一个窗口内显示;
五.实验结果
为了方便代码书写,将matlab的工作路径设置为了所有图片所在的文件夹,也就是F:envimatlab上机实验imdemos,从而写代码时,可以省略路径。
1. 读取一幅图像,将其存入一个数组中;
A= imread(‘cameraman.tif’)
2. 显示这幅图像;
Imshow(A)
3. 提取该图像的基本信息;
Whos A
4. 获取图像文件的压缩,颜色等等其他的详细信息;
imfinfo cameraman.tif
5. 压缩这幅图象,将其保存为一幅压缩了像素的jpg文件;
imwrite(A,’1cameraman.jpg’,’quality’,50)
压缩前: 大小为60多k
压缩后:大小为6k多
6. 将最初读入的tif图象另存为一幅bmp图像;
imwrite(A,’cameraman.bmp’,’bmp’)
7. 将一幅灰度图像转化为二值图像,并且显示出来,观察图像的特征;
B=im2bw(A)
subplot(1,2,1),imshow(A);subplot(1,2,2),imshow(B)
8. 根据RGB图像创建一幅灰度图像;
C=imread(‘greens.jpg’)
D=rgb2gray(C)
subplot(1,2,1),imshow(C);subplot(1,2,2),imshow(D)
9. 多幅图像在同一个窗口内显示;
subplot(2,2,1),imshow(A);subplot(2,2,2),imshow(B);
subplot(2,2,3),imshow(C);subplot(2,2,4),imshow(D)
六、问题与思考:
1. Matlab软件可以支持哪些图像文件格式?
⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像专家组的图像压缩格式。
⑵BMP(Windows Bitmap):有1位、4位、8位、24位非压缩图像,8位RLE(Run length Encoded)的图像。文件内容包括文件头(一个BITMAP FILEHEADER数据结构)、位图信息数据块(位图信息头BITMAP INFOHEADER和一个颜色表)和图像数据。
⑶PCX(Windows Paintbrush):可处理1位、4位、8位、16位、24位等图像数据。文件内容包括文件头、图像数据和扩展色图数据。
⑷TIFF(Tagged Iamge File Format):处理1位、4位、8位、24位非压缩图像,1位、4位、8位、24位packbit压缩图像,1位CCITT压缩图像等。文件内容包括文件头、参数指针表与参数域、参数数据表和图像数据四部分。
⑸PNG(Portable Network Graphics):包括1位、2位、4位、8位和16位灰度图像,8位和16位索引图像,24位和48位真彩色图像。
⑹GIF(Graphics Interchange Format):任何1位到8位的可交换的图像。
⑺HDF(Hierarchial Data Format):有8位、24位光栅图像数据集。
⑻ICO(Windows Icon resource):有1位、4位、8位非压缩图像。
⑼CUR(Windows Cursor resource):有1位、4位、8位非压缩图像。
⑽XWD(X Windows Dump):包括1位、8位Zpixmaps,XYBitmaps,XYPixmmmaps。
⑾RAS(Sun Raster image):有1位bitmap、8位索引、24位真彩色和带有透明度的32位真彩色。
⑿PBM(Portable Bitmap)。
⒀PGM(Portable Graymap)。
⒁PPM(Portable Pixmap)。
2. 说明函数imread 的用途格式以及各种格式所得到图像的性质。
imread的常见调用格式为:
A = imread(filename,fmt)
其作用是将文件名用字符串filename表示的,扩展名用fmt表示的图像文件中的数据读到矩阵A中。如果filename所指的为灰度级图像,则A为一个二维矩阵;如果filename所指的为RGB图像,则A为一个m×n×3的三维矩阵。Filename表示的文件名必须在MATLAB的搜索路径范围内,否则需指出其完整路径。
imread的其他几种重要的调用格式为:
[X,map] = imread(filename.fmt)
[…] = imread(filename)
[…] = imread(URL,…)
[…] = imread(…,idx) (CUR,ICO and TIFF only)
[…] = imread(…,’frames’,idx) (GIF only)
[…] = imread(…,ref) (HDF only)
[…] = imread(…,’BackgroundColor’,BG) (PNG only)
[A,map,alpha] = imread(…) (ICO,CUR and PNG only)
上面一些参数的含义如下:idx是指读取图标(cur、ico、tiff)文件中第idx个图像,默认值为1。’frame’,idx是指读取gif文件中的图像帧,idx值可以是数量、向量或’all’。ref是指整数值。alpha是指透明度。
3. 为什么用I = imread(‘lena.bmp’) 命令得到的图像I 不可以进行算术运算?
MATLAB系统默认的算术运算是针对双精度类型(double)的数据,而上述命令产生的矩阵的数据类型是无符号8位(MATLAB为图像提供的特殊的数据类型),直接进行运算会溢出。