Matlab图像处理之图像类型转换及图像绘制函数(三)

在处理图像过程中一定要对图像类型进行转换,不然中间会出现很多操作错误,所以要把这部分的内容进行学习整理一下,有哪些函数可以更便捷的转换呢!


图像类型转换关系如下所示
在这里插入图片描述

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时效果是缩小)。

一些函数就写到这里啦,后面碰到了就再来补充,嘻嘻嘻嘻~

发布了86 篇原创文章 · 获赞 197 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44790423/article/details/104702235