MATLAB size/length/numel 图像的灰度化,显示与判断
2017-08-17 17:17
706 查看
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为灰度图像
vv=imread('D:\实验图片\zhu.jpg');
pp=imread('D:\实验图片\12.jpg');
gg=imread('D:\实验图片\44.jpg');
[a, b, c]=size(vv);
d=length(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 =
4000
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 =
235 200 89 20
>>double(A) %返回与原矩阵数值相同但类型为double的矩阵;
ans =
235 200 89 20
>>im2double(A)
%返回矩阵类型:double;数值范围[0 1] ,0对应uint8中的0;1对应uint8中的255;
ans =
0.9216 0.7843 0.3490 0.0784
>>mat2gray(A) %对原矩阵归一化
ans =
1.0000 0.8372 0.3209 0
****************假设矩阵A为一般二维数组,非图像数据(double格式)**********************
A =
235 200 89 20
>> double(A)
ans =
235 200 89 20
>> im2double(A)
ans =
235 200 89 20
>> mat2gray(A)
ans =
1.0000 0.8372 0.3209 0
**********************小结***************************
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()的说明
判断图片是否为灰度图:
% check to see if the image is a color image...
d = length(size(im));
if d==3
image=double(rgb2gray(im));
elseif d==2
image=double(im);
end
或者 numel(size(im))>2 为彩色图像
numel(size(im))=2 为灰度图像
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为灰度图像
vv=imread('D:\实验图片\zhu.jpg');
pp=imread('D:\实验图片\12.jpg');
gg=imread('D:\实验图片\44.jpg');
[a, b, c]=size(vv);
d=length(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 =
4000
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 =
235 200 89 20
>>double(A) %返回与原矩阵数值相同但类型为double的矩阵;
ans =
235 200 89 20
>>im2double(A)
%返回矩阵类型:double;数值范围[0 1] ,0对应uint8中的0;1对应uint8中的255;
ans =
0.9216 0.7843 0.3490 0.0784
>>mat2gray(A) %对原矩阵归一化
ans =
1.0000 0.8372 0.3209 0
****************假设矩阵A为一般二维数组,非图像数据(double格式)**********************
A =
235 200 89 20
>> double(A)
ans =
235 200 89 20
>> im2double(A)
ans =
235 200 89 20
>> mat2gray(A)
ans =
1.0000 0.8372 0.3209 0
**********************小结***************************
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()的说明
判断图片是否为灰度图:
% check to see if the image is a color image...
d = length(size(im));
if d==3
image=double(rgb2gray(im));
elseif d==2
image=double(im);
end
或者 numel(size(im))>2 为彩色图像
numel(size(im))=2 为灰度图像
相关文章推荐
- matlab中size/length/numel的用法 并利用判断是否为灰度图像
- Matlab中size,length,numel的讨论
- Matlab中size、numel、length、fix函数的使用
- size, length, numel function in matlab
- matlab中size/length/numel的用法
- Matlab---size,length和numel函数
- 关于matlab中图像太大只能缩小显示问题的解决
- Matlab---size,length和numel函数比较
- Matlab 显示图像太慢
- Qt图像灰度化后显示蓝色图像
- matlab中的size(),length(),ndims()函数的用法
- fmri的图像数据在matlab中显示,利用imagesc工具进行显示,自带数据集-by 西南大学xulei教授
- 用matlab判断一个文件是否为jpg图像
- Matlab中用一个For循环连续读入并显示几个图像文件 [转]
- matlab显示图像的函数imshow
- MATLAB的size(),length(),ndims()函数
- 利用matlab编写实现显示fmri切片slice图像 混合显示 不同侧面显示 可叠加t检验图显示 by DR. Rajeev Raizada
- Matlab---size,length和numel函数
- matlab中数据类型及图像显示
- Matlab图像的显示