精华内容
下载资源
问答
  • matlabuint8double ,数据类型处理

    千次阅读 2019-02-04 11:01:03
    导入图像时,一般matlab的图像数据类型为uint8(8位无符号整数),该图像为8位图像,运算中matlab中数值一般采用double型(64位),存储可以为uint8 也可为double 。 所以 一般有如下操作: 先将图像转为double运算—...

    导入图像时,matlab读取图像数据类型保存为uint8(8位无符号整数);
    运算中,matlab中数值一般采用double型(64位);
    显示图像时(imshow函数),对double型是认为在0-1范围内(大于1时显示为白色),uint8型时是0~255范围。。
    参考操作如下:
    先将图像转为double运算—
    im2double(image);%double像素值在0~1变化,0是黑色,1是白色

    参考代码如下:

    img_raw = imread('C:\Users\Administrator\Desktop\IMG\dawu\009.jpg');
    gray1 = rgb2gray(img_raw);  %灰度化
    [m1,n1] = size(gray1);
    gray = im2double(gray1);  %转化数据类型
    

    …之后一系列运算,imshow(image);(此时数据类型为double)

    如果要输出uint8类型,参考代码如下:

    gray = im2uint8(gray);
    figure(1),imshow(gray);
    

    ----解释-------说明---------学习----------
    1.double函数及im2double函数
    double是将读入图像的uint8数据转换为double类型,一般不使用;
    常用im2double函数。
    原因:如果用double函数则最后要将数据转为uint8或者归一化至0-1;
    (操作代码为:%将图像矩阵转化到0-1之间 imshow(I/255); %转化数据类型 imshow(uint8(I));
    2.uint8和im2uint8
    在数据类型转换时,uint8和im2uint8的区别,uint8的操作是将一个double类型的小数点后面的部分去掉;im2uint8是将输入中所有小于0的数设置为0,而将输入中所有大于1的数值设置为255,再将所有其他值乘以255。
    3.上面有些用除以255可以转化,看个人代码习惯。
    4. 其他相关内容,用到再总结,详见参考2。

    参考文章

    1. https://blog.csdn.net/SMF0504/article/details/72899725
    2. https://blog.csdn.net/FX677588/article/details/53301740
    展开全文
  • matlab中处理图像像素点数据: ...matlab中imshow图片,要先转换成uint8: subplot(1,2,1),imshow(uint8(img1)),title('original');subplot(1,2,2),imshow(uint8(img2)),title('after'); matlab图...

    matlab中处理图像像素点数据:

    img1=double(imread('lenna.bmp'));

    matlab中imshow图片,要先转换成uint8:

    subplot(1,2,1),imshow(uint8(img1)),title('original');
    subplot(1,2,2),imshow(uint8(img2)),title('after');


     

    matlab图像处理关于unit8的问题_百度知道 https://zhidao.baidu.com/question/545122188.html

     

    为了节省存储空间,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)/255; %uint转换成double
    如果不转换,计算会产生溢出。


     

    matlab图像类型转换以及uint8、double、im2double、im2uint8和mat2gray等说明 - Thomas会写字 - CSDN博客 https://blog.csdn.net/kakiebu/article/details/78959249

    1. matlab图像保存说明

      matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点double(64位,8个字节),自然可以节省很大一部分存储空间。 
      详细来说imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。例如,彩色图像像素大小是400*300( 高 * 宽 ),则保存的数据矩阵为400*300*3,其中每个颜色通道值是处于0~255之间。 
      但是虽然matlab中读入图像的数据类型是uint8,而在图像矩阵运算的时候,使用的数据类型却是double类型。一是为了保证精度,二是因为如果不转换,在对uint8进行加减时会产生溢出,可能提示的错误为: 

    Function ‘*’ is not defined for values of class ‘uint8’

      1个字节无符号整型最大只能存储数据为255,对图片的操作所以很容易溢出。

    2. matlab图像类型转换

     

      matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,区别如下:

     

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

      这里补充说明一下,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区间。 

     

    转载于:https://www.cnblogs.com/wxl845235800/p/9931934.html

    展开全文
  •  matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点double(64位,8个字节),自然可以节省很大一部分存储空间。...

    1. matlab图像保存说明

      matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点double(64位,8个字节),自然可以节省很大一部分存储空间。
      详细来说imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。例如,彩色图像像素大小是400*300( 高 * 宽 ),则保存的数据矩阵为400*300*3,其中每个颜色通道值是处于0~255之间。
      但是虽然matlab中读入图像的数据类型是uint8,而在图像矩阵运算的时候,使用的数据类型却是double类型。一是为了保证精度,二是因为如果不转换,在对uint8进行加减时会产生溢出,可能提示的错误为: 

    Function ‘*’ is not defined for values of class ‘uint8’

      1个字节无符号整型最大只能存储数据为255,对图片的操作所以很容易溢出。

    2. matlab图像类型转换

      matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,区别如下:

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

      这里补充说明一下,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区间。
      另外需要补充说明下面这种情况:

    img = imread('./1.jpg');
    I1  = double(img);
    I2  = im2double(I2); % I2数据依然是0~255,并不是0~1,即I1=I2

      因为I1已经是double类型,imdouble不会对double类型数据0~255映射到区间0~1,所以上面im2double操作没有任何作用,I1和I2相等。
      总结如下:函数im2double将输入转换成double类型。如果输入是uint8、unit16 或者是二值的logical类型,则函数im2double 将其值归一化到0~1之间,当然就是double类型的了。如果输入本身就是double类型,输出还是double类型,并不进行映射。
      如果已经是double类型的数据需要映射,则进行下面操作即可:  

    I2 = I1/255;

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

      在matlab处理完数据好,我们希望显示或者imwrite写入图片时候,需要注意。如果直接对double之间的数据矩阵I运行imshow(I),我们会发现有时候显示的是一个白色的图像。
      这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。所以对double类型的图像显示的时候,要么归一化到0~1之间,要么将double类型的0~255数据转为uint8类型。解决方法如下:

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

    4. uint和double数据转换的深入说明

      double和uint8、uint16之间数据转换有下面的函数:

    im2double(); % 将图像数组转换成double精度类型
    im2uint8();  % 将图像数组转换成unit8类型 
    im2uint16(); % 将图像数组转换成unit16类型

      当然,当图像数据是double类型的0~1之间,下面两者操作是等价的:

    I1=im2uint8(I); 
    I2=uint8(round(I*255)); 

      但是matlab默认double类型图片数据是位于0~1之间的,而uint8是位于0~255。所以如果矩阵数据图像是double类型(0~1之间)可直接im2uint8,这样不仅完成数据类型转换,而且将0~1之间映射为了0~255之间的数据。
      但是如果图像矩阵数据是double类型的0~255,直接im2uint8转换的话,matlab会将大于1的数据都转换为255,0~1之间的数据才会映射到0~255之间整型的数据。例如下面程序:

    img64 = [1,2,3,4];
    I8    = im2uint8(img64); % I8结果为[255 255 255 255]

    5. mat2gray()和im2double()区别

      这两个如果都是对uint8数据操作,区别就在于前者是归一化操作,归一化后也在0~1之间,自然结果也是double类型,后者是将数据从0~255映射到0~1。例如:

    I  = uint8([1,1,2,3]);
    I1 = mat2gray(I);  % 归一化,I1结果是double型[0,0,0.5,1]
    I2 = im2double(I); % 映射化,I2结果是double型[0.0039,0.0039,0.0078,0.0118]

      可以看出,虽然两者都是一种归一化,im2double只不过最大值永远是常数255,最小值永远是0,如下:

    I0.0255.00.0I−0.0255.0−0.0

      而mat2gray最大值和最小值都是当前矩阵中最大最小的值,如下:
    Imin(I)max(I)min(I)I−min(I)max(I)−min(I)

      另外补充一个函数,mat2str()是将数型转换为字符串类型,一般在批量处理图片,给保存图片格式的名称中有作用,这样就不需要格式化sprintf操作了,非常方便。


    个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

    转载请注明出处:https://blog.csdn.net/fx677588/article/details/53301740

    展开全文
  •  matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点double(64位,8个字节),自然可以节省很大一部分存储空间。...

    1. matlab图像保存说明

      matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点double(64位,8个字节),自然可以节省很大一部分存储空间。 
      详细来说imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。例如,彩色图像像素大小是400*300( 高 * 宽 ),则保存的数据矩阵为400*300*3,其中每个颜色通道值是处于0~255之间。 
      但是虽然matlab中读入图像的数据类型是uint8,而在图像矩阵运算的时候,使用的数据类型却是double类型。一是为了保证精度,二是因为如果不转换,在对uint8进行加减时会产生溢出,可能提示的错误为: 

    Function ‘*’ is not defined for values of class ‘uint8’

      1个字节无符号整型最大只能存储数据为255,对图片的操作所以很容易溢出。

    2. matlab图像类型转换

      matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,区别如下:

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

      这里补充说明一下,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区间。 
      另外需要补充说明下面这种情况:

    img = imread('./1.jpg');
    I1  = double(img);
    I2  = im2double(I2); % I2数据依然是0~255,并不是0~1,即I1=I2
    • 1
    • 2
    • 3

      因为I1已经是double类型,imdouble不会对double类型数据0~255映射到区间0~1,所以上面im2double操作没有任何作用,I1和I2相等。 
      总结如下:函数im2double将输入转换成double类型。如果输入是uint8、unit16 或者是二值的logical类型,则函数im2double 将其值归一化到0~1之间,当然就是double类型的了。如果输入本身就是double类型,输出还是double类型,并不进行映射。 
      如果已经是double类型的数据需要映射,则进行下面操作即可:  

    I2 = I1/255;
    • 1

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

      在matlab处理完数据好,我们希望显示或者imwrite写入图片时候,需要注意。如果直接对double之间的数据矩阵I运行imshow(I),我们会发现有时候显示的是一个白色的图像。 
      这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。所以对double类型的图像显示的时候,要么归一化到0~1之间,要么将double类型的0~255数据转为uint8类型。解决方法如下:

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

    4. uint和double数据转换的深入说明

      double和uint8、uint16之间数据转换有下面的函数:

    im2double(); % 将图像数组转换成double精度类型
    im2uint8();  % 将图像数组转换成unit8类型 
    im2uint16(); % 将图像数组转换成unit16类型
    • 1
    • 2
    • 3

      当然,当图像数据是double类型的0~1之间,下面两者操作是等价的:

    I1=im2uint8(I); 
    I2=uint8(round(I*255)); 
    • 1
    • 2

      但是matlab默认double类型图片数据是位于0~1之间的,而uint8是位于0~255。所以如果矩阵数据图像是double类型(0~1之间)可直接im2uint8,这样不仅完成数据类型转换,而且将0~1之间映射为了0~255之间的数据。 
      但是如果图像矩阵数据是double类型的0~255,直接im2uint8转换的话,matlab会将大于1的数据都转换为255,0~1之间的数据才会映射到0~255之间整型的数据。例如下面程序:

    img64 = [1,2,3,4];
    I8    = im2uint8(img64); % I8结果为[255 255 255 255]
    • 1
    • 2

    5. mat2gray()和im2double()区别

      这两个如果都是对uint8数据操作,区别就在于前者是归一化操作,归一化后也在0~1之间,自然结果也是double类型,后者是将数据从0~255映射到0~1。例如:

    I  = uint8([1,1,2,3]);
    I1 = mat2gray(I);  % 归一化,I1结果是double型[0,0,0.5,1]
    I2 = im2double(I); % 映射化,I2结果是double型[0.0039,0.0039,0.0078,0.0118]
    • 1
    • 2
    • 3

      可以看出,虽然两者都是一种归一化,im2double只不过最大值永远是常数255,最小值永远是0,如下: 

    I0.0255.00.0

      而mat2gray最大值和最小值都是当前矩阵中最大最小的值,如下: 
    Imin(I)max(I)min(I)

      另外补充一个函数,mat2str()是将数型转换为字符串类型,一般在批量处理图片,给保存图片格式的名称中有作用,这样就不需要格式化sprintf操作了,非常方便。


    个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

    转载请注明出处:CSDN 无鞋童鞋

    展开全文
  • MATLAB图像数据格式imshow uint8double

    千次阅读 2019-05-11 16:26:54
    double(64位):matlab中数值一般采用double型存储和运算。 uint8(8位无符号整数):为了节省存储空间,matlab为图像提供的特殊数据类型。imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中,因此,...
  • 今日在用MATLAB放大...上网找答案未果,之后偶然发现类型不同,原来的是`uint8`,后来变成`double`,仰天长叹。一开始郁闷的滑稽—— ![这里写图片描述](https://ooo.0o0.ooo/2017/07/01/59571e28b5e18.png)顺藤摸瓜
  • 图像处理中uint8double的问题

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

    万次阅读 多人点赞 2019-04-18 19:22:36
    1. 图像数据格式 double(64位):matlab中数值一般采用double型存储和运算。 uint8(8位无符号整数):为了节省存储空间,matlab为图像提供的特殊数据类型。...matlab读入图像的数据是uint8,而matlab中数值一般采...
  • 在图像处理,很多处理手段都需要求图像的直方图或者累计直方图,所以在进行后续图像处理之前,先完成这两个函数,后续进行其他操作时可以直接调用这两个函数。 提示:以下是本篇文章正文内容 一、图像显示问题...
  • 1、uint8double double函数只是将读入图像的uint8数据转换为double类型,一般不使用;常用的是im2double函数,将 ...MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double。因此 I2=im2dou...
  • MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double,因此 I2=im2double(I1) :把图像数组I1转换成double精度类型;如果不转换,在对uint8进行加减时会产生溢出,可能提示的错误为:Function '*' ...
  • a=[50,60,70; 80,90,50; 100,55,40] 假设a是一个灰度图的mat形式(当然实际的size肯定比这大,我只是举例子),如果需要对这个矩阵的像素进行加减处理,很可能...一种情况是,转换成double,但是转换成double...
  • matlab中图像格式转换

    千次阅读 2019-11-27 10:05:41
    1、在MATLAB中,数值一般都采用double型(64位)存储和运算. 2、为了节省存储空间,MATLAB为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称为8位型像。 3、函数image能够直接显示8位图像,...
  • matlab中double和im2double的区别

    千次阅读 2017-12-27 19:16:44
    为了是图像处理不溢出(因为图像通道的数据是uint8类型的,计算过程很容易溢出),通常需要转换为双精度浮点数, I=imread('some.jpg'); img=double(I); 实际上是扩大了存储的宽度,原来的值大小不变,而im2...
  • uint 8:无符号的8位(8bit)整型数据(unit 都是存储型)int :整型数据1、在MATLAB中,数值一般都采用double型(64位)存储和运算.2、为了节省存储空间,MATLAB为图像提供了特殊的数据类型uint8(8位无符号整数),...
  • im2uint8 将输入所有小于0的设置为0,而将输入所有大于1的设置为255 其他的所有乘以255 im2uint16 将输入所有小于0的设置为0,而将输入所有大于1的设置为65535 mat2gray 把一个double类的任意数组转换成值...
  • im2uint8 将输入所有小于0的设置为0,而将输入所有大于1的设置为255 其他的所有乘以255 im2uint16 将输入所有小于0的设置为0,而将输入所有大于1的设置为65535 mat2gray 把一个double类的任意数组转换成值...
  • 1 有些函数支持double型,而不支持uint8的数据类型,所以要转换 2 精度问题了,因为uint8进行数据处理的时候,容易造成数据溢出或精度不够。 为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无...
  • matlab 数据类型转换

    2019-06-24 16:39:17
    最近实际编程遇到几个数据转换的问题,正好总结一下。附几个帖子。 1 matlab将uint16转换成uint8的方法 ...2matlab图像类型转换以及uint8double、im2double、im2uint8和mat2gray等说明 https://blog.csdn...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 133
精华内容 53
关键字:

matlab中uint8转double

matlab 订阅