图像文件的保存
1、常用格式的保存
与图像读取相对应,MATLAB提供了imwrite函数将MATLAB中的矩阵数组保存或常用格式的图像文件。调用形式如下:
Imwrite(A,filename,fmt)
该函数将图像数据A写入到名为filename的文件中,文件格式由fmt参数定义。当fmt参数省略时,MATLAB会由filename的后缀名推断文件格式。当表示为灰度图像时,A是一个M*N的矩阵;当表示真彩RGB图像时,A是M*N*3的矩阵;A不能是空矩阵;当文件格式为TIFF时,imwrite才能接受M*N*4的矩阵。
当需要将索引图像矩阵与其他相关联的颜色查找表写入到图像文件中时,应采用如下调用形式:
Imwrite(X,map,filename,fmt)
该函数将索引图像X和与它相关联的颜色查找表map一起写进filename的文件中,文件格式由fmt参数定义。如果X数据类型是uint8和uint16类型,那么imwrite函数会原封不动地将X数据写入到文件中,如果X的数据类型是double类型,那么函数会将数据转化为uint8(X-1)后写入文件。Map参数必须是一个长度不大于256的有效的颜色查找表。
Imwrite函数支持在调用时添加的一些参数,这些参数根据图像格式的不同而不同。具体的参数列表,此处不再累述,见help imwrite。
例:
>> a = zeros(256,256,'uint8');
>> a(:,1:64) = 0;
>> a(:,65:128) =16;
>> a(:,129:192) = 32;
>> a(:,193:256) = 48;
>> imwrite(a,colormap,'test1.gif');
>>imwrite(a,colormap,'test2.gif','TransparentColor',0,'BackgroundColor',16);
>> imshow('test1.gif')
>> imshow('test2.gif')
2、其他格式的保存
(1)DICOM格式的保存
图像的DICOM可以通过dicomwrite函数来完成,其调用形式如下:
Dicomwrite(x,map,filename,param1,value1,param2,value2,…)
其中,x为表示图像数据的矩阵,可以是M*N的二值图像矩阵,M*N的灰色图像矩阵或索引图像矩阵或M*N*3的RGB图像矩阵。Map为当x表示索引图像时的颜色查找表。Filename为保存的文件名,其中文件的拓展名.dcm必须添加。此调用形式后的一些参数设置,help dicomwrite,就可以查到。
(2)EXCEL格式的保存
图像的EXCEL表格格式保存可以通过xlswrite函数来完成,调用形式为
Xlswrite(filename,X,sheet,range)
其中,filename为EXCEL表格文件名。X为一个M*N的矩阵,M须小于65536,N须小于256.sheet指示表格中的表单,可以用数字来表示表单的序号,也可以用字符串来表示表单的名字。Range参数用一个字符串来表示保存至表格中的范围区域,参数需要规定区域的左下角和右下角坐标。
图像的显示
1、 常用图像显示
MATLAB提供两类图像显示函数,一类是不附带图像坐标的显示函数,如imshow,impixel,montage等;另一类是附带图像坐标的显示图像,如imhist,image,imagesc等,这类函数都是从MATLAB中的axis类派生出来的。
(1)imshow函数
Imshow函数调用方式如下:
Imshow(I)
其中,I为输入图像,I可以是表示灰色图像的M*N的矩阵,也可以是表示真彩RGB图像的M*N*3的矩阵,也可以是图像文件名。在没有特殊需求的时候,使用这种方式即可。有时,需要改变显示窗口的一些属性,这可以通过在image函数中添加属性来完成。
参数 | 参数值 |
Border | 此参数控制显示图像时周围是否有边界,可取‘tight’和‘loose’。在默认情况下可由语句iptgetpref(‘ImshowBorder’) |
DisplayRange | 用[LOW,HIGH]参数值来控制灰度图像的显示效果。只有在显示文件时,‘DisplayRange’参数不能省。 |
InitialMagnification | 一个数值变量或字符串‘fit’,此参数定义了图像显示的放大系数。当参数设置为100时,按照100%的比例显示。当参数设置为‘fit’时,函数按照窗口尺寸缩放图像。默认情况下,放大参数可由语句iptgetpref(‘ImshowInitialMagnification’)得到。 |
Parent | 父轴句柄,定义显示窗口位置 |
XData | 两元素向量,定义了图像水平方向的坐标 |
YData | 两元素向量,定义了图像竖直方向的坐标 |
程序员可以通过’Border’属性去掉imshow显示窗口的灰色边框。
>> X = imread('D:\Mymatlab\picture\jing.jpg');
>> imshow(X);
>> figure,imshow(X,'border','tight');
程序员可以通过设置‘InitialMagnification’属性来修改屏幕与图像像素之间的对应关系。设置‘XData’和’YData’两个属性来改变图像的高度宽度之比。
>> imshow(X,'XData',[1 256],'YData',[1 512])
>> hax1 = subplot(1,2,1),imshow('D:\Mymatlab\picture\jing.jpg')
>> hax2 = subplot(1,2,2),imshow('D:\Mymatlab\picture\ge.gif')
Image函数具有调节拉伸灰度的功能,可通过以下调用形式来完成。
Imshow(I,[low,high])
>> Y = imread('D:\Mymatlab\picture\dicomfile\9.jpg');
>> imshow(Y),figure;
>> imshow(Y,[]);
如果每次显示图像时都需要调节’Border’和‘InitialMagnification’这样的属性,可以使用iptsetpref函数进行设置,这样MATLAB关闭之前,Imshow函数的显示属性就不会改变。最常用的是
>> iptsetpref(‘ImshowBorser’,’tight’);
这样就取消了每次显示的灰色边框。
如果需要使用imshow函数显示索引图像,则可以先调用imshow函数,再设置颜色查找表。
>> [X,map] = imread('D:\Mymatlab\picture\ge.gif');
>> imshow(X);
>> colormap(map);
2、 image函数
image函数是附带坐标的图像显示函数,因为image函数是将图像矩阵当做索引图像或者RGB图像来显示,显示灰色图像很不方便。调用形式为:
image(X)
其中,X为输入图像,可以是索引图像的M*N的二维图像矩阵,也可以表示真彩RGB图像的M*N*3的矩阵,也可以是文件。
3、 subimage函数
subimage函数通常可以与subplot函数配合使用来实现一个图形窗口中显示多幅图像的效果。 Subimage(X,map)
其中,X为二维图像矩阵,map为X使用的颜色查找表,如果是灰色图像则无此参数。
>>X1 = imread(‘baby.jpg’);
>>X2 = imread(‘jin.jpg’);
>>X3 = imread(‘by.jpg’);
>>subplot(2,2,[1 2]),subimage(X1);
>>subplot(2,2,3),subimage(X2);
>>subplot(2,2,4),subimage(X3);
4、像素信息的显示
MATLAB提供的两个比较常用的查看像素信息的函数:impixel,impixelinfo函数,impixel函数首先显示出图像,然后允许程序员在图像上直接标记感兴趣的点,标记结束后,可以返回标记点的信息,调用信息如下:
[c,r,p] = impixel(x,map)
该函数返回程序员标记点的坐标嗯哼像素值,标记点的行坐标序列保存在C中,列坐标保存在R中,标记点的像素值序列保存在P中,这里像素值全部采用RGB的表示方式,即如果一个三元素向量是灰度图像的话,则三个元素的值都相同。
>> X =imread('D:\Mymatlab\picture\ge.gif');
>> [c,r,p] = impixel(X);
>> c
c =
114
执行完图像,函数先将图像显示出来,让程序员在显示的图像中选择图像中选择像素点,并用星号来表示选中的像素点,选择完毕后不要在选择完像素点后直接关闭图像显示窗口,否则会导致选择的信息全部丢失,应该右击或双击,此时选择的像素点信息将被输出至[c,r,p]。
Impixelinfo函数可以直接在图像上动态的显示当前鼠标所指位置的像素信息,但是不利于保存像素信息。使用代码参考:
>> x= imread(‘baby.jpg’);
>>imshow(x);
>>Impixelinfo;
左下角