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

Matlab函数陷阱

2016-07-05 11:03 656 查看
一、uint8()和im2uint8()的区别

1.uint8()函数

输入 edit uint8,查看函数解释。

% Values outside this range saturate on overflow, namely they are mapped

% to 0 or 255 if they are outside the range.

从解释中可以看出,如果数据值超出0~255的范围,那么小于0的值将变为0,大于255的值将变为255。

2.im2uint8()函数

输入 edit im2uint8,查看函数源码。

这里以对int16类型的数据进行变换为例,说明im2uint8()的原理。

if strcmp(classImg, 'int16')
z = uint16(int32(img) + 32768);
u = uint8(double(z)*1/257);
end


因为int16数据类型的范围是-32768~32767,所以,在转换时先将所有数值+32768,然后再将0~65535范围线性变换到0~255范围(double(z)*255/65535也就是源码中的double(z)*1/257)。

结论:uint8()对数据进行有损压缩,im2uint8()是进行的线性压缩,损失很小。

二、length()函数使用需谨慎

help length

Length of largest array dimension.

函数返回值为矩阵行数和列数的最大值,并不是固定方向的数值。为了安全起见,不要使用length函数,用size()函数代替。

size(array,1)表示计算矩阵的行数,size(array,2)表示计算矩阵的列数。不会产生歧义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab