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

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  为灰度图像
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: