size:获取数组的行数和列数
length:数组长度(即行数或列数中的较大值)
numel:元素总数。
s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时数组的行数,第二个元素是数组的列数。
[r,c]=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。
如果在size函数的输入参数中再添加一项,并用1或2为该项赋值,则size将返回数组的行数或列数。 其中r=size(A,1)该语句返回的时数组A的行数, c=size(A,2) 该语句返回的时数组A的列数。
n=numel(A)该语句返回数组中元素的总数。
n=length(A):如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A));如果A为空数组,则返回0;如果A是一个向量则返回A的长度。
n=max(size(A)):若A为非空数组,返回A的最大维数;若A为空数组,返回A中最长的非0维数。
彩色图片为3维,灰度图片为2维。
zhu和44为彩色图片 12为灰度图像
pp=imread('D:\实验图片\12.jpg');
gg=imread('D:\实验图片\44.jpg');
[a, b, c]=size(vv);
h=length(size(pp));
k=length(size(gg));
tt=size(pp);
[l, m, n]=size(gg) ;
[ll, mm, nn]=size(pp)
numel(size(vv))
numel(size(pp))
numel(size(gg))
a =800
b = 600
c = 3
d = 3
h =2
k =3
tt = 1280 1024
l = 640
m = 670
n = 3
ll = 1280
mm =1024
nn = 1
ans = 3
ans = 2
ans = 3
通过imread(‘ ’)读取图片,读入的图像为unit8型,而MATLAB中矩阵运算中要求所有的运算变量为double型(双精度型)。通常使用im2double函数将图像数据转换成双精度型数据。
同时比较double、im2double、mat2gray区别
****************假设某图像数据A(uint8格式)**********************
A =
>>double(A)
ans =
>>im2double(A)
%返回矩阵类型:double;数值范围[0 1] ,0对应uint8中的0;1对应uint8中的255;
ans =
>>mat2gray(A)
ans =
****************假设矩阵A为一般二维数组,非图像数据(double格式)**********************
A =
>> double(A)
ans =
>> im2double(A)
ans =
>> mat2gray(A)
ans =
**********************小结***************************
im2double:如果输入类型是uint8、unit16 、logical,则按照0-->>0,255-->>1,将其值按比例处理成0~1之间的double数值;如果输入类型是double,输出没有处理;
double:返回数值与输入相同的double类型矩阵;
mat2gray:对输入进行归一化处理,最小值-->>0;最大值-->>1,输出类型为double。
注意:double( img)就是简单的数据类型转换,将无符号整型转换为双精度浮点型double,但是数据大小没有变化,原本数据是0~255之间,转化后还是0~255。例如原来是255,那么转换后为255.0,小数位0个数是由double数据长度决定,实际数据大小还是255,只不过这个255已经是double类型空间存储了,再增加不会发生溢出情况。而im2double(img)则不仅仅是将uint8转换到double类型,而且把数据大小从0~255映射到0~1区间。
img = imread('./1.jpg'); % 读入是unit8型(0~255)数据
I1 = im2double(img); % 把图像转换成double精度类型(0~1)
I2 = double(img)/255; %uint8转换成double,作用同im2double
各数据类型的转换参考: http://blog.csdn.net/fx677588/article/details/53301740 此篇中,还有图像显示imshow()的说明
判断图片是否为灰度图:
d = length(size(im));
if d==3
image=double(rgb2gray(im));
elseif d==2
image=double(im);
end