MATLAB图像显示与格式转换.docx
《MATLAB图像显示与格式转换.docx》由会员分享,可在线阅读,更多相关《MATLAB图像显示与格式转换.docx(20页珍藏版)》请在冰豆网上搜索。
MATLAB图像显示与格式转换
第五讲MATLAB可视化(三)
图像显示
Matlab进行图像处理的步骤如下:
读取图像到Matlab工作空间
↓
对图像矩阵进行格式转换
↓
对图像矩阵数据进行处理
↓↓
显示图像保存图像
【目录】
【正文】
一、图像文件格式
1、调色板
调色板是包含不同颜色的颜色表,每种颜色以红、绿、蓝三种颜色的组合来表示,图像的每一个像素对应一个数字,而该数字对应调色板中的一种颜色。
调色板的单元个数是与图像的颜色数相对应的,256色图像的调色板就有256个单元。
真彩图像的每个像素直接用R、G、B三个字节来表示颜色,因此不需要调色板。
2、图像类型
图像类型
简称
显示的颜色数
特点
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
3、图像文件格式
文件
类型
说明
1位
单色
8位
灰度
8位
彩色
16位
灰度
24位
彩色
48位
彩色
BMP
微软视窗系统图像文件格式
√
√
√
×
√
×
GIF
用于网页上的动画、透明
√
√
√
×
×
×
TIFF
可储存多幅图像
√
√
√
√
√
√
PCX
Paintbrush软件图像格式
√
√
√
×
√
×
JPG
连续色调静态图像数字压缩
×
√
×
×
√
×
PSD
Photoshop软件图像格式
√
√
√
√
√
√
二、读图像和图像信息
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');
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-200422:
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:
YResolution:
ResolutionUnit:
'Inch'
Colormap:
[]
PlanarConfiguration:
'Chunky'
TileWidth:
[]
TileLength:
[]
TileOffsets:
[]
TileByteCounts:
[]
Orientation:
1
FillOrder:
1
GrayResponseUnit:
MaxSampleValue:
[655356553565535]
MinSampleValue:
0
Thresholding:
1
NewSubFileType:
0
Software:
'AdobePhotoshop'
DateTime:
'2004:
05:
2322:
14:
23'
三、图像类别与数据格式
双精度类:
Double
(每个元素占8个字节)
整数类:
Unit8
(每个元素占1个字节)
整数类(Unit16)
(每个元素占2个字节)
真
彩
图
像
数组大小:
m×n×3
(:
:
1)-红色分量
(:
:
2)-绿色分量
(:
:
3)-蓝色分量
元素取值:
[0,1]
(无调色板)
数组大小:
m×n×3
(:
:
1)-红色分量
(:
:
2)-绿色分量
(:
:
3)-蓝色分量
元素取值:
[0,255]
(无调色板)
数组大小:
m×n×3
(:
:
1)-红色分量
(:
:
2)-绿色分量
(:
:
3)-蓝色分量
元素取值:
[0,65535]
(无调色板)
索
引
图
像
图像数组大小:
m×n
图像元素取值:
[1,p]
色度矩阵:
p×3
色度元素值:
[0,1]
图像数组大小:
m×n
图像元素取值:
[0,p-1]
色度矩阵:
p×3
色度元素值:
[0,255]
图像数组大小:
m×n
图像元素取值:
[0,p-1]
色度矩阵:
p×3
色度元素值:
[0,65535]
灰
度
图
像
图像数组大小:
m×n
图像元素值:
[0,1]
色度矩阵:
p×3
色度元素值:
[0,1]
图像数组大小:
m×n
图像元素值:
[0,255]
色度矩阵:
p×3
色度元素值:
[0,1]
图像数组大小:
m×n
图像元素值:
[0,65535]
色度矩阵:
p×3
色度元素值:
[0,1]
二
值
图
像
图像数组大小:
m×n
图像元素值:
0或1
图像数组大小:
m×n
图像元素值:
0或1
四、图像显示
Matlab的图像显示函数主要有imshow、colorbar和subimage三个。
1、imshow(I,n)
显示灰度级为n的图像,n缺省为256。
【例】按256灰度级显示
I=imread('');
imshow(I,256)
colorbar
【例】按8灰度级显示
I=imread('');
imshow(I,8)
colorbar
2、imshow(I,[low,high])
以灰度范围[low,high]显示图像,如果不知道灰度范围,可以用imshow(I,[])显示。
【例】按最大灰度范围显示
I=imread('');
imshow(I,[])
colorbar
【例】按指定灰度范围显示
I=imread('');
imshow(I,[64,128])
colorbar
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('');
imshow(BW);
【例】取反显示二值图像
BW=imread('');
imshow(~BW);
【例】显示二值图像
clf
BW=imread('');
imshow(BW,[100;001]);
4、imshow(X,MAP)
显示索引图像,X为数据图像矩阵,MAP为调色板。
【例】显示索引图像
[X,MAP]=imread('');
imshow(X,MAP);
colorbar
【例】显示伪彩色图像
I=imread('');
imshow(I,jet(256))
colorbar
5、imshow(RGB)
显示真彩色图像。
【例】
rgb=imread('');
imshow(rgb);
6、imshowfilename
直接显示图像。
【例】直接显示图像
imshow('');
I=getimage;
whosI
NameSizeBytesClass
I537x358192246uint8array
Grandtotalis192246elementsusing192246bytes
7、subimage
多图显示多个调色板的图像。
【例】
loadtrees;
[x2,map2]=imread('');
subplot(2,1,1),subimage(X,map);colorbar
subplot(2,1,2),subimage(x2,map2);colorbar
【例】不用专用函数显示多图
loadtrees;
[x2,map2]=imread('');
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('');
imwrite(x,map,'','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、灰度图像
假设:
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、二值图像
假设BW8表示8位二值图像,BW64表示双精度二值图像,则有:
BW64=double(BW8)uint8格式转double格式
BW8=uint8(BW64)~=0double格式转uint8格式
plot3(X,Y,Z,'bo')