在处理图像过程中一定要对图像类型进行转换,不然中间会出现很多操作错误,所以要把这部分的内容进行学习整理一下,有哪些函数可以更便捷的转换呢!
图像类型转换关系如下所示
RGB转灰度 rgb2gray()
X = rgb2gray(I) 即将RGB图像I转换成灰度图像X(RGB即为真彩色图像)
I = imread('tree.png');
X = rgb2gray(I);
imshow(X);
RGB转为索引图像 rgb2ind()
同上用法,其也可以输入参数项dither_option,表示是否抖动
灰度图像转索引图象gray2ind()
matlab中的灰度图像是一个二维数组矩阵,而索引图像不仅包括一个二维的数组矩阵,还包括一个M X 3的颜色映射表。所以要想将灰度图像转换成为索引图像,则必须生成对应的颜色映射表。而MATLAB中可以直接调用函数gray2ind()来实现图像转换。其调用格式如下:
-
[X, map] = gray2ind(I, n);
该函数是将灰度图像I特换为索引图像,其中I指的是原灰度图像,n是灰度级数,默认值为64. [X, map]对应转换后的索引图像,map中对应的颜色值为颜色图gray(n)中的颜色值 -
[X, map] = gray2ind(BW, n):
该函数是将二值图像BW转换为索引图像,其中n是灰度级数,默认值为2。二值图像实际上也是灰度图像,只是灰度级为2
索引图像转灰度图像 ind2gray()
利用函数gray2ind( )可以将灰度图像转换为索引图像,同样,索引图像也是可以转换成为灰度图像的,在MATLAB中直接调用函数ind2gray( )即可实现,其调用格式如下:
- I=ind2gray(X,map)
该函数是将具有颜色映射表map的索引图像转换为灰度图像,去除了索引图像中的颜色、饱和度信息,保留了图像的亮度信息。其中[X,map]对应索引图像,I表示转换后的灰度图像。输入图像的数据类型可以是double型或uint8型,但输出为double型。
索引图像转RGB图像 ind2rgb()
- RGB = ind2rgb(X,map):
该函数是将索引图像[X,map]转换为RGB图像,其中[X,map]指向索引图像,RGB指向转换后的真彩色图像。转换过程中形成一个三维数组,然后将索引图像的颜色映射表中的颜色值赋值给三维数组。输入图像的数据类型可以是double型、uint8型 或uint16型,输出为double型。
其它图像转二值图像 im2bw()
在MATLAB中,二值图像中的数据类型实际上是logical型,’0’代表黑色、’1’代表白色,所以二值图像实际上是一幅“黑白”图像。那么,将其他图像转换为二值图像,首先必须规定一个规则:将其他数组中什么数据变为’1’,什么数据变为’0’。
常用的方法是“阈值法”,它是确定一个阈值,小于阈值就取为’0’,其他的全部取为’1’ 。在MATLAB中实现这一功能的函数为im2bw( ),其调用格式根据转换的原图像不同而各有差异。如果输入不是灰度图像,先将其转换为灰度图像,然后通过阈值法转换为二值图像。
矩阵转灰度图
在MATLAB中,一个数据矩阵就相当于一幅数字图像,只是在数字图像中对应的数组元素必须在一定的取值范围,因此,只要将对应数据矩阵中的元素按一定规律进行转换,就可以将矩阵转换为图像了。在MATLAB中可以利用函数mat2gray( ),将一个数据矩阵转换为一幅灰度图像,其调用格式为:
- I = mat2gray(X[ xmin, xmax]):
该函数是按照指定的取值区间[xmin,xmax]将数据矩阵X转换为灰度图像I, xmin对应灰度值0,即黑色,xmax对应灰度值1,即白色。数据矩阵中小于xmin的值取为0,大于xmax的值取为1。如果不指定取值区间[xmin, xmax],即缺省情况下,将数据矩阵X中最小值设为xmin,最大值设为xmax。
图像显示函数
- imshow
用来显示图片的
I = imread('moon.tif');
figure,imshow(I);
而有时为了数据处理,要把读取的图片信息转化为更高的精度,
I = double(imread(‘moon.tif’));
为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型。如果直接运行imshow(I),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0-1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。
有两个解决方法:
- imshow(I/256); -----------将图像矩阵转化到0-1之间
- imshow(I,[]); -----------自动调整数据的范围以便于显示.
从实验结果看两种方法都解决了问题,但是从显示的图像看,第二种方法显示的图像明暗黑白对比的强烈些!
三维图像的绘制
- surf
绘制三维立体图
z1 = 0 ; %底面所在的平面
z2 = 2 ; %顶面面所在的平面
M = 20 ; % 纬线数目
N = 20; % 经线数目
t = linspace(0,2*pi,N);
s = linspace(0,2*pi, M)';
r = (2 + sin(s));
h = linspace(z1,z2, M)';
X = r*cos(t);
Y = r*sin(t);
Z = h*ones(size(t));
surf(X,Y,Z);
shading interp
一个精美的花瓶就出来了~
-
plot
绘制二维图形的最基本函数,它是针对向量或矩阵的列来绘制曲线的。
plot(x)
plot(x,y) x为横坐标,y为纵坐标
plot(x,y1,x,y2,…) 以公共的x 元素为横坐标值,以y1,y2,… 元素为纵坐标值绘制多条曲线 -
fplot
函数fplot 用来绘制数学函数,其调用格式为:
fplot(fun,lims)
其中fun 就是所要绘制的函数,可以是定义函数的M 文件名,也可以是以x 为变量的可计算字符串,lims=[XMIN XMAX YMIN YMAX]限定了x,y 轴上的绘图空间。
- ezplot
函数ezplot它无需数据准备,直接画出函数图形,基本调用格式为ezplot(f),其中f 是字符串或代表数学函数的符号表达式,只有一个符号变量
其它
- imfinfo
imfinfo函数用于读取图象文件的有关信息,其语法格式为
imfinfo(filename,fmt)
imfinfo函数返回一个结构info,它反映了该图象的各方面信息,其主要数据包括:文件名(路径)、文件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数、图象的类型等。
- imhist
MATLAB图象处理工具箱提供了imhist函数来计算和显示图象的直方图,imhist函数的语法格式为:
imhist(I,n)
imhist(X,map)
其中imhist(I,n)计算和显示灰度图象I的直方图,n为指定的灰度级数目,默认值为256。imhist(X,map)计算和显示索引色图象X的直方图,map为调色板。
例:
I = imread('rice.tif');
imshow(I)
figure, imhist(I)
- imresize
MATLAB图像处理工具箱中的函数imresize可以用最近邻插值,双线性插值,三次插值三种方法来对图像进行插值缩放,如果不指定插值方法,则默认为最邻近插值法。
Imresize函数的语法格式为:
B = imresize(A,m,method)
参数method用于指定插值的方法,可选用的值为’nearest’(最邻近法),‘bilinear’(双线性插值),‘bicubic’(双三次插值),默认为’nearest’。
B = imresize(A,m,method)返回原图A的m倍放大的图像(m小于1时效果是缩小)。
一些函数就写到这里啦,后面碰到了就再来补充,嘻嘻嘻嘻~