【Matlab】abs不支持复整数

需要将uint8转换成double型数据才能计算
https://blog.csdn.net/lihe4151021/article/details/89372688
图像数据格式uint8与double以及图像类型转换

  1. 图像数据格式
    double(64位):matlab中数值一般采用double型存储和运算。
    uint8(8位无符号整数):为了节省存储空间,matlab为图像提供的特殊数据类型。imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中,因此,matlab读入图像的数据是uint8.
  2. 图像类型转换
    matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,区别如下:
img = imread('test.jpg'); % 读入是unit8型(0~255)数据
I1  = im2double(img);    % 把图像转换成double精度类型(0~1)
I2  = double(img)/255;   % uint8转换成double,作用同im2double

(1) im2double( )和double( )的区别。double( img)就是简单的数据类型转换,将无符号整型转换为双精度浮点型double,但是数据大小没有变化,原本数据是0-255之间,转化后还是0-255。例如原来是255,那么转换后为255.0,小数位0个数是由double数据长度决定,实际数据大小还是255,只不过这个255已经是double类型空间存储了,再增加不会发生溢出情况。而im2double(img)则不仅仅是将uint8转换到double类型,而且把数据大小从0-255映射到0-1区间。
(2)对double型数据进行im2double处理没有任何作用,即imdouble不会对double类型数据0-255映射到区间0-1

原文地址:https://www.cnblogs.com/kinologic/p/14306925.html