精华内容
下载资源
问答
  • Matlab中处理double型图像以及对imshow(I,[])函数的理解 转载 本文链接:Matlab中处理double型图像以及对imshow(I,[])函数的理解 近期学习使用matlab处理图像,对于显示double型图像遇到些问题,查阅相关博客、...

    Matlab中处理double型图像以及对imshow(I,[])函数的理解

    转载 本文链接:Matlab中处理double型图像以及对imshow(I,[])函数的理解

    近期学习使用matlab处理图像,对于显示double型图像遇到些问题,查阅相关博客、论坛,总结如下:
    1、在matlab中,为了保证精度,经过了运算的图像矩阵I其数据类型会从uint8型变成double型。
    2、如果直接运行imshow(I),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~ 1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。

    解决办法如下:
    1、imshow(I/256); % 将图像矩阵转化到0-1之间
    2、imshow(I,[]); % 自动调整数据的范围以便于显示
    3、inshow(uint8(I)); % 转成uint8

    针对第二种解决方法,官方文档(https://cn.mathworks.com/help/matlab/ref/imshow.html?searchHighlight=imshow&s_tid=doc_srchtitle )中提示:
    imshow(I,[low high]) 显示灰度图像 I,将该显示范围指定为一个二元素向量 [low high]。
    参数 “[low high]” 可简写为 “[]”, 即将I的最大值 max(I) 和最小值 min(I) 分别作为纯白(255)和纯黑(0),中间的K值相应地映射为0到255之间的标准灰度值,相当于将double型的矩阵I拉伸成为了0-255的uint8型的矩阵。这里需要注意当图像的所有像素值相同时,该函数会将像素值当做最大值映射为255,图像会显示为白色,因此这时需要给定显示范围,如 imshow(I,[0 255])。

    展开全文
  • 图像数据经过处理后由uint8变成double型,直接运行imshow,会显示全白 因为imshow()显示图像时对double型是认为在01范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0255范围。而经过运算的范围在0-255...

    若图像数据经过处理后由uint8变成double型,直接运行imshow,会显示全白

    因为imshow()显示图像时对double型是认为在01范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0255范围。而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。

    解决方法一 imshow(uint8(Z))

    强转为uint8型数据,虽然可以保证显示范围,但是显示精度确实大大降低,好多细节的区域不会显示出来

    解决方法二 imshow(I/max(max(Z)));

    既要把doule类型的矩阵显示出来又要保证显示精度,或者直接 imshow(Z/256),将0-255的double转换为0-1的double

    解决方法三 imshow(Z,[]) imshow(Z,[0,255])

    用指定的灰度范围 [low high]显示灰度图像 I。显示结果,图像中灰度值等于或低于low的都将用黑色显示,而灰度值大于等于high的都显示为白色,介于low和high之间的用其灰度级的默认值的中间色调显示。如果你用了一个空矩阵 ([]) 来代替 [low high], imshow 函数将使用 [min(I(😃)max(I(😃)]作为第二个参数。

    展开全文
  • 图像数据格式uint8与double以及图像类型转换

    万次阅读 多人点赞 2019-04-18 19:22:36
    double(64位):matlab中数值一般采用double型存储和运算。 uint8(8位无符号整数):为了节省存储空间,matlab为图像提供的特殊数据类型。imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中,因此,...

    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

    img = imread('test.jpg'); % 读入是unit8型(0~255)数据
    I1  = im2double(img);    % 把图像转换成double精度类型(0~1)
    I2  = double(img)/255;   % uint8转换成double,作用同im2double:
    

    个人体会:在MATLAB中经过部分处理得到double型数据(0-1,如果灰度值超过1可能需要进行归一化操作),如果需要保存但是未来可能还有进一步的图像处理操作,建议将其以.mat矩阵形式保存而不是uint8,否则会大大损失图像精度(如果保存为uint8,下一次处理时有需要从uint8转换为double,在此过程中抹去了灰度值小数的有效数据位)。

    3. matlab图像显示imshow类型问题

    (1)imshow()显示double型
    如果直接对double之间的数据矩阵I运行imshow(I),我们会发现有时候显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0-1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0-255范围。所以对double类型的图像显示的时候,要归一化到0-1之间。
    (2)imshow()显示uint8型
    对double类型的图像显示的时候,除了归一化到0-1之间,也可以将double类型的0-255数据转为uint8类型。

    imshow(I/255);    % 将图像矩阵转化到0-1之间
    imshow(I,[]);     % 自动调整数据的范围以便于显示
    inshow(uint8(I)); % 转成uint8
    

    补充:imshow()用法:imshow(I,[low high])
    用指定的灰度范围 [low high]显示灰度图像I。显示结果,图像中灰度值等于或低于low的都将用黑色显示,而灰度值大于等于high的都显示为白色,介于low和high之间的用其灰度级的默认值的中间色调显示。如果你用了一个空矩阵([])来代替 [low high], imshow 函数将使用 [min(I(:))max(I(:))]作为第二个参数。

    展开全文
  • 1 有些函数支持double型,而不支持uint8的数据类型,所以要转换 2 精度问题了,因为uint8进行数据处理的时候,容易造成数据溢出或精度不够。 为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无符号...

    1 有些函数支持double型,而不支持uint8的数据类型,所以要转换
    2 精度问题了,因为uint8进行数据处理的时候,容易造成数据溢出或精度不够。

    为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称作8位图像。

    imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。

    因此,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,
    I2=im2double(I1) %把图像I1转换成double精度类型 (假设图形矩阵范围0~255)
    或者
    I64=double(I8); %uint转换成double
    如果不转换,计算会产生溢出。

    经过计算后,I2已经是double型。如果现在想imshow显示图像结果,就需要再转换成uint8格式。如果矩阵复合数据图像标准(0~1之间),
    I3=im2uint8(I2) %把矩阵I2转换成uint8类型
    如果超出0~1范围,就要用uint8()
    I8=uint8(round(I64*255)); %double转换成uint8
    或者mat2gray()
    I3=mat2gray(I2) &把矩阵转化为灰度图像格式double

    最后可以知道,im2uint8,im2double和uint8,double是有区别的。

    展开全文
  • 1 有些函数支持double型,而不支持uint8的数据类型,所以要转换 2 精度问题了,因为uint8进行数据处理的时候,容易造成数据溢出或精度不够。 为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无...
  • 关于Matlab中double类型图像的...原因:imwrite函数保存图像时,如果图像double型,取值范围是0~1;若为uint8型,取值范围是0~255. 如果图像满足这两条件中的任何一个,这个矩阵就可以被直接保存成图像,但是运...
  • 1 有些函数支持double型,而不支持uint8的数据类型,所以要转换 2 精度问题了,因为uint8进行数据处理的时候,容易造成数据溢出或精度不够。为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无符号整数...
  • 在matlab中,为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型。如果直接运行imshow(I),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于...
  • 这是因为imshow()显示图像时对double型是认为在0-1(灰度空间)范围内,即大于1时都是显示为白色,而imshow()显示uint8型时是0~255范围。而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。 ...
  • 关于图像分块的文章:...于是将struct结构体中的double型数据提取出来,并生成新的变量的方法,针对上述代码,应该是: 参考网站:https://zhidao.baidu.com/question/17
  • 在matlab中,为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型。如果直接运行imshow(I),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于...
  • matlab图像数据类型uint8,double关系

    千次阅读 多人点赞 2019-04-05 20:07:50
    数字图像处理深入思考(一)double型图像矩阵转化为uint8(I)类型(二)图像的【0,1】和【0,255】显示 深入思考 (一)double型图像矩阵转化为uint8(I)类型 为了节省存储空间,matlab为图像提供了特殊的数据...
  • 为了节省存储空间,matlab为图像提供了特殊的数据类型...因此,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算, I2=im2double(I1) %...
  • 图像处理中uint8和double的问题

    千次阅读 2018-04-14 16:09:48
    matlab为图像提供了特殊的数据类型uint...因此,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,I2=im2double(I1) %把图像I1转换成doub...
  • MATLAB图像数据格式imshow uint8与double

    千次阅读 2019-05-11 16:26:54
    double(64位):matlab中数值一般采用double型存储和运算。 uint8(8位无符号整数):为了节省存储空间,matlab为图像提供的特殊数据类型。imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中,因此,...
  • Matlab图像处理中uint8和double的问题

    万次阅读 2017-06-07 14:51:21
     为了节省存储空间,matlab为图像提供了特殊的数据类型uint...因此,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算, I2=im2double(I
  • 为了节省存储空间,matlab为图像提供了特殊的数据类型...因此,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,I2=im2double(I1) %把图像I
  • 最近在做图像处理时,用到imshow,发现时而正常时而不正常,查阅诸多资料,做个总结: 1、imread() 返回的图像类型是uint8...2、matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 259
精华内容 103
关键字:

double型图像