您的位置:首页 > 编程语言 > MATLAB

matlab图像处理函数

2017-10-10 16:11 351 查看
1.1 读取和保存图像(其中I=imread(‘’))

1.1.1 imtool()
imtool(I)在图形中显示灰度图像I,I为矩阵,元素范围为0-255.
imtool(I,[low,high])小于等于low的为黑色,大于等于high的为白色,中间的为灰度默认等级。
imtool(X,map)X为索引图像,为一矩阵,map为颜色表,第一二三个元素分别是红绿蓝。
imtool(RGB)显示真彩色图像,
imtool(BW)显示二值图像。BW为一个矩阵,元素由0和1组成,0为黑色,1为白色。
imtool close all 关闭所有图像工具

1.1.2
subplot(m,n,p)或者subplot(m n p)
subplot是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果m=2就是表示2行图。p表示图所在的位置,p=1表示从左到右从上到下的第一个位置。

1.1.3  subimage 和imshow
subimage 显示坐标

imshow不显示坐标

1.1.4 图像的数据格式

1、uint8与double

double函数只是将读入图像的uint8数据转换为double类型,一般不使用;常用的是im2double函数,将uint8图像转为double类型,范围为0-1,如果是255的图像,那么255转为1,0还是0,中间的做相应改变。

MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double。因I2=im2double(I1) :把图像数组I1转换成double精度类型;如果不转换,在对uint8进行加减时会产生溢出。默认情况下,matlab将图象中的数据存储为double型,即64位浮点数;matlab还支持无符号整型
(uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。

    im2double():将图象数组转换成double精度类型

    im2uint8():将图象数组转换成unit8类型

    im2uint16():将图象数组转换成unit16类型

2、uint8和im2uint8

  在数据类型转换时候uint8和im2uint8的区别,uint8的操作仅仅是将一个double类型的小数点后面的部分去掉;但是im2uint8是将输入中所有小于0的数设置为0,而将输入中所有大于1的数值设置为255,再将所有其他值乘以255。图像数据在计算前需要转换为double,以保证精度;很多矩阵数据也都是double的。要想显示其,必须先转换为图像的标准数据格式。如果转换前的数据符合图像数据标准(比如如果是double则要位于0~1之间),那么可以直接使用im2uint8。如果转换前的数据分布不合规律,则使用uint8,将其自动切割至0~255(超过255的按255)。最好使用mat2gray,将一个矩阵转化为灰度图像的数据格式(double)    

3、double类型图像的显示

    图像数据在进行计算前要转化为double类型的,这样可以保证图像数据运算的精度。很多矩阵的很多矩阵数据也都是double的,要想显示其,必须先转换为图像的标准数据格式。如果直接运行imshow(I),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。具体方法有:

 imshow(I/256);    ----------将图像矩阵转化到0-1之间               

 imshow(I,[]);     ----------自动调整数据的范围以便于显示 (注意这里,必须是灰度图,否则不行)

 imshow(uint8(I));

 imshow(mat2gray(I));

 上面的mat2gray是将最终获得的矩阵转化为灰度图像。常用的为:

 A = im2uint8(mat2gray(result))

 这样就将result矩阵转化为uint8类型的图像。

1.1.5 图像的减法运算(差分方法) 用途:

检测图像变化及运动物体,作为许多图像处理工作的准备步骤。 函数调用格式:
Z = imsubtract(X,Y) 和 Z = imabsdiff(X,Y) 实现:图像-图像,图像-常数

可以看到,减法运算中有两种函数可以,imsubtract(X,Y)和 imabsdiff(X,Y),两者基本没有太大的差别,但是减法操作有时会导致某些像素值变为一个负数,对于uint8或uint16类型的数据,如果发生这种情况,那么imsubtract函数自动将这些负数截取为0,而imabsdiff计算后取了绝对值,从而使用的时候,为了避免差值产生负值,同时避免像素值运算结果之间差异过小(减去后结果为负数的不好都变成0),建议调用函数imabsdiff。

[b]2、图像转换:I = imread('1.jpg')[/b]
 
1)  二进制图像:在二进制图像中,每个点位两个离散值中的一个,这两个值代表开和关。二进制图像可以看做一个仅包括黑与白的特殊灰度图像,也可以看做仅有两种颜色的索引图像。
 
2)灰度图像:它的数据矩阵中的元素值一般都在[0,1]或[0,255]之间,灰度图像根据这些数据利用线性插值来和色图中的颜色种类匹配。灰度图像是一个二维的灰度(亮度)函数f(x,y)。
 
3)RGB图像:图像中每个象素的颜色用三个数据来存储,分别指定红、绿、蓝三原色在象素颜色中的比例关系,组成一个三维数组。彩色图像是由三个二维灰度函数f(x,y)组成。三个是RGB或者HSV。
 
4)索引图像:它的数据信息包括一个数据矩阵和一个双精度色图矩阵,它的数据矩阵中的值直接指定该点的颜色为色图矩阵中的某一种。色图矩阵中,每一行表示一种颜色,每行有三个数据,分别表示该种颜色中红、绿、蓝的比例情况,所有元素值都在[0,1]内。
 
5)  多帧图像: 多帧图像阵列是由多帧图像组成的,每一帧图像可以为前四种图像中的一种,但组成一个多帧图像阵列的图像必须为同一种。

2.1 RGB图像转换成灰度图像:
J = rgb2gray(I);
2.2 灰度图像转换成索引图像:
[x,map] = gray2ind(J);
2.3RGB图像转换成索引图像:
[x,map] = rgb2ind(I,256);
2.4索引图像转换成灰度图像:
J = ind2gray(x,map);
2.5索引图像转换成RGB图像:
K = ind2rgb(x,map);





2.6 灰度图像转换成二值图像:
 
1)灰度图像转换成二值图像:
BW = im2bw(I, level)
2)索引图像转换成二值图像:
BW = im2bw(X, map, level)
3)RGB图像转换成二值图像:
BW = im2bw(RGB, level)
     其中level就是设置阈值的。level取值范围[0, 1]。

3、[b]图像变换:[/b]
 
3.1傅里叶变换:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: