imshow不显示坐标
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型。
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类型图像的显示
上面的mat2gray是将最终获得的矩阵转化为灰度图像。常用的为:
这样就将result矩阵转化为uint8类型的图像。
可以看到,减法运算中有两种函数可以,imsubtract(X,Y)和 imabsdiff(X,Y),两者基本没有太大的差别,但是减法操作有时会导致某些像素值变为一个负数,对于uint8或uint16类型的数据,如果发生这种情况,那么imsubtract函数自动将这些负数截取为0,而imabsdiff计算后取了绝对值,从而使用的时候,为了避免差值产生负值,同时避免像素值运算结果之间差异过小(减去后结果为负数的不好都变成0),建议调用函数imabsdiff。
2、图像转换:I = imread('1.jpg')
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、图像变换:
3.1傅里叶变换: