第4章MATLAB图像显示.docx
《第4章MATLAB图像显示.docx》由会员分享,可在线阅读,更多相关《第4章MATLAB图像显示.docx(19页珍藏版)》请在冰豆网上搜索。
第4章MATLAB图像显示
第四章图像显示
Matlab进行图像处理的步骤如下:
读取图像到Matlab工作空间
↓
对图像矩阵进行格式转换
↓
对图像矩阵数据进行处理
↓↓
显示图像保存图像
【目录】
一、读图像和图像信息
1、读取图像
函数imread可以从任何Matlab支持的图像文件格式中,以任意位深度读取一幅图像。
格式为:
[X,MAP]=imread('FILENAME.FMT'),其中:
FILENAME-为需要读入的图像文件名称,FMT-为图像格式。
【例】图像读取演示
[X1,MAP1]=imread('演示图像-1位黑白.tif');
[X2,MAP2]=imread('演示图像-8位灰度.tif');
[X3,MAP3]=imread('演示图像-256色.tif');
[X4,MAP4]=imread('演示图像-16位灰度.tif');
[X5,MAP5]=imread('演示图像-24位色.tif');
[X6,MAP6]=imread('演示图像-48位色.tif');
图像类型
简称
显示的颜色数
特点
1位单色
单色
21=2种(黑、白)
每象素对应一个值,取值为0和1
8位灰度
黑白
28=256个(黑到白)
每象素对应一个值,取值为0-255,每值对应一灰度
8位彩色
256色
28=256种彩色
每象素对应一个值,取值为0-255,每值对应一颜色
16位灰度
216=65536个(黑到白)
每象素对应一个值,取值为0-65535,每值对应一灰度
24位彩色
真彩色
28×28×28=16M种彩色
每象素对应三个值,分别代表R、G、B,取值为0-255
48位彩色
216×216×216=0.25G种色
每象素对应三个值,分别代表R、G、B,取值为0-65535
whos
NameSizeBytesClass
MAP10x00doublearray
MAP20x00doublearray
MAP3256x36144doublearray
MAP40x00doublearray
MAP50x00doublearray
MAP60x00doublearray
X1427x427182329logicalarray
X2427x427182329uint8array
X3427x427182329uint8array
X4427x427364658uint16array
X5427x427x3546987uint8array
X6427x427x31093974uint16array
Grandtotalis1824058elementsusing2558750bytes
2、读取图像信息
可以通过调用imfinfo函数获得与图像文件有关的信息,格式如下:
INFO=imfinfo('FILENAME.FMT')其中:
返回的INFO是Matlab的一个结构体。
【例】查看图像信息
INFO=imfinfo('演示图像-48位色.tif')
INFO=
Filename:
[1x36char]
FileModDate:
'23-May-201222:
14:
23'
FileSize:
1107548
Format:
'tif'
FormatVersion:
[]
Width:
427
Height:
427
BitDepth:
48
ColorType:
'truecolor'
FormatSignature:
[7373420]
ByteOrder:
'little-endian'
NewSubfileType:
0
BitsPerSample:
[161616]
Compression:
'Uncompressed'
PhotometricInterpretation:
'RGB'
StripOffsets:
13528
SamplesPerPixel:
3
RowsPerStrip:
427
StripByteCounts:
1093974
XResolution:
2.7115
YResolution:
2.7115
ResolutionUnit:
'Inch'
Colormap:
[]
PlanarConfiguration:
'Chunky'
TileWidth:
[]
TileLength:
[]
TileOffsets:
[]
TileByteCounts:
[]
Orientation:
1
FillOrder:
1
GrayResponseUnit:
0.0100
MaxSampleValue:
[655356553565535]
MinSampleValue:
0
Thresholding:
1
NewSubFileType:
0
Software:
'AdobePhotoshop7.0'
DateTime:
'2010:
05:
2322:
14:
23'
二、图像显示
Matlab的图像显示函数主要有imshow、image、imview、colorbar和subimage五个。
imview函数打开专门用于图像显示的浏览器。
函数imview与imshow的区别在于用imview函数打开的图像浏览器可以对图像进行一些简单的操作。
image函数与imshow的区别在于,image函数创建的图像由纵横坐标。
1、imshow(I,n)
显示灰度级为n的图像,n缺省为256。
【例】按256灰度级显示
I=imread('moon.tif');
imshow(I,256)
colorbar
【例】按8灰度级显示
I=imread('moon.tif');
imshow(I,8)
colorbar
2、imshow(I,[low,high])
以灰度范围[low,high]显示图像,如果不知道灰度范围,可以用imshow(I,[])显示。
【例】按最大灰度范围显示
I=imread('moon.tif');
imshow(I,[])
colorbar
【例】按指定灰度范围显示
I=imread('moon.tif');
imshow(I,[64,128])
colorbar
小结:
显示灰度图像的格式为:
imshow(I)I为所显示的灰度图像的数据矩阵
imshow(I,n)n为整数,代表多要显示图像的灰度等级数,默认为256
imshow(I,[low,high])low和high表示数据数组的最小值和最大值;
如果使用空矩阵([]),指定数据范围,imshow将自动进行数据标度。
3、imshow(BW)
显示二值图像。
【例】双精度灰度图像
bw1=zeros(100,100);
bw1(2:
2:
98,2:
2:
98)=1;
imshow(bw1);
whosbw1
NameSizeBytesClass
bw1100x10080000doublearray
Grandtotalis10000elementsusing80000bytes
【例】8位的灰度图像
bw1=zeros(100,100);
bw1(2:
2:
98,2:
2:
98)=1;
bw2=uint8(bw1);
imshow(bw2,[]);
colorbar
whosbw2
NameSizeBytesClass
bw2100x10010000uint8array
Grandtotalis10000elementsusing10000bytes
【例】二值图像
bw1=zeros(100,100);
bw1(2:
2:
98,2:
2:
98)=1;
bw2=uint8(bw1);
bw3=bw2~=0;
imshow(bw3);
whosbw3
NameSizeBytesClass
bw3100x10010000logicalarray
Grandtotalis10000elementsusing10000bytes
【例】显示二值图像
BW=imread('circles.tif');
imshow(BW);
【例】取反显示二值图像
BW=imread('circles.tif');
imshow(~BW);
【例】显示二值图像
clf
BW=imread('circles.tif');
imshow(BW,[100;001]);
小结:
显示二值图像的格式为:
imshow(BW)
imshow(BW,map)用色图map将0和1对应的像素点显示的颜色进行改变。
4、imshow(X,MAP)
显示索引图像,X为数据图像矩阵,MAP为调色板。
【例】显示索引图像
[X,MAP]=imread('canoe.tif');
imshow(X,MAP);
colorbar
【例】显示伪彩色图像
I=imread('moon.tif');
imshow(I,jet(256))
colorbar
小结:
显示索引图像的格式为:
imshow(X,map)
image(X):
带有坐标
5、imshow(RGB)
显示真彩色图像。
【例】
rgb=imread('flowers.tif');
imshow(rgb);
6、显示多帧图像序列
一个多帧的图像文件包含了一幅或多幅图像。
MATLAB支持的多帧图像文件格式是HDF和TIFF。
多帧图像一旦被读入matlab内,多帧图像的图像帧被保存在图像数组的第四维中。
多帧图像可以从磁盘中用imread指令导入或者由matlab创建。
多帧图像有以下几种不同的显示方法:
●用imshow函数显示单帧图像;
●用montage函数显示所有帧图像;
●用immoive函数显把帧图像转换成动画显示。
6.1显示单帧图像
例如:
显示多帧图像数组I的第七帧
命令为:
imshow(I(:
:
:
7))
clearall
clc
clf
mri=uint8(zeros(128,128,1,27));
%初始化一个27帧的图像数组
forframe=1:
27
[mri(:
:
:
frame),map]=imread('mri.tif');
%把对应的每一帧读入内存中
end
imshow(mri(:
:
:
7),map)%显示图像中的第七帧
6.2显示多帧图像
Montage函数用于在同一时间显示多帧图像中的所有帧,所有帧显示在同一图像对象中。
调用格式如下:
●montage(I):
显示灰度图像I共K帧:
mXnX1Xk数组
●Montage(BW):
显示二值图像BW共K帧:
mXnX1Xk数组
●Montage(X,MAP):
显示索引图像X共K帧:
mXnX1Xk数组
●Montage(RGB):
显示真彩色图像RGB共K帧:
mXnX3Xk数组
Montage函数把所有帧图像以近似正方形的方式排序。
对于每一帧图像的色图必须相同。
显示多帧图像示例:
clearall
clc
clf
mri=uint8(zeros(128,128,1,27));
%初始化一个27帧的图像数组
forframe=1:
27
[mri(:
:
:
frame),map]=imread('mri.tif');
%把对应的每一帧读入内存中
end
montage(mri,map)%显示图像中的所有帧
6.3显示动画
immovie函数可以从一个多帧图像数组中创建matlab动画
例如:
clearall
clc
clf
mri=uint8(zeros(128,128,1,27));
%初始化一个27帧的图像数组
forframe=1:
27
[mri(:
:
:
frame),map]=imread('mri.tif');
%把对应的每一帧读入内存中
end
mov=immovie(mri,map);%创建动画帧结构
movie(mov)%播放动画
7、imshowfilename
直接从磁盘显示图像。
【例】直接显示图像
imshow('moon.tif');
I=getimage;
whosI
NameSizeBytesClass
I537x358192246uint8array
Grandtotalis192246elementsusing192246bytes
8、subimage
多图显示多个调色板的图像。
【例】
loadtrees;
[x2,map2]=imread('forest.tif');
subplot(2,1,1),subimage(X,map);colorbar
subplot(2,1,2),subimage(x2,map2);colorbar
【例】不用专用函数显示多图
loadtrees;
[x2,map2]=imread('forest.tif');
subplot(2,1,1),imshow(x2,map2);colorbar
subplot(2,1,2),imshow(X,map);colorbar
三、保存图像
1、imwrite函数
imwrite(I,'文件名','文件格式')-保存无调色板的图像
imwrite(X,MAP,'文件名','文件格式')-保存有调色板的图像
imwrite(...,'文件名')-文件名中含格式
imwrite(...,'参数','值')-指定保存参数
文件格式:
bmp、jpg、pcx、tif等。
【例】将tif图像保存为jpg图像
[x,map]=imread('canoe.tif');
imwrite(x,map,'canoe.jpg','JPG','Quality',75)
四、图像数据格式转换
1、索引图像
假设:
X8-表示8位的索引图像,X16-表示16位的索引图像,X64-表示双精度的索引图像,则有:
X64=double(X8)+1-uint8格式转double格式
X64=double(X16)+1-uint16格式转double格式
X8=uint8(X64-1)-double格式转uint8格式
X16=uint16(X64-1)-double格式转uint16格式
X8=uint8(X16)-uint16格式转uint8格式
X16=uint16(X8)-uint8格式转uint16格式
2、灰度图像
G=mat2gray(A,[Amin,Amax])
AminAmax默认为A的最小和最大值返回是个Double类型的值
假设:
I8-表示8位的灰度图像,I16-表示16位的灰度图像,I64-表示双精度的灰度图像,则有:
I64=double(I8/255)-uint8格式转double格式
I64=double(I16/65535)-uint16格式转double格式
I8=uint8(round(I64*255))-double格式转uint8格式
I16=uint16(round(I64*65535))-double格式转uint16格式
I8=uint8(round(I16/257))-uint16格式转uint8格式
I16=uint16(round(I8*257))-uint8格式转uint16格式
3、真彩色图像
假设:
RGB8-表示8位的真彩图像,RGB16-表示16位的真彩图像,RGB64-表示双精度的真彩图像,则有:
RGB64=double(RGB8/255)-uint8格式转double格式
RGB64=double(RGB16/65535)-uint16格式转double格式
RGB8=uint8(round(RGB64*255))-double格式转uint8格式
RGB16=uint16(round(RGB64*65535))-double格式转uint16格式
RGB8=uint8(round(RGB16/257))-uint16格式转uint8格式
RGB16=uint16(round(RGB8*257))-uint8格式转uint16格式
4、二值图像
G=im2bw(f,T)T默认为0.5
假设BW8表示8位二值图像,BW64表示双精度二值图像,则有:
BW64=double(BW8)uint8格式转double格式
BW8=uint8(BW64)~=0double格式转uint8格式