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

    【转载】
    原文传送门:https://blog.csdn.net/fx677588/article/details/53301740

    1. matlab图像保存说明

    matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点double(64位,8个字节),自然可以节省很大一部分存储空间。
      详细来说imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。例如,彩色图像像素大小是400300( 高 * 宽 ),则保存的数据矩阵为400300*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]
    

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

    展开全文
  • matlab为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式...matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,区别如下: I2

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

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


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

    I2=im2double(I1)  %把图像I1转换成double精度类型 (假设图形矩阵I1数值范围为0~255)

    或者

    I64=double(I8)/255;   %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

    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼程序如下:clear allclcticpopsize=15;lanti=10;maxgen=50;cross_rate=0.4;mutation_rate=0.1;a0=0.7;zpopsize=5;bestf=0;nf=0;number=0;I=imread('C:\Users\Yu\Pictures...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    程序如下:

    clear all

    clc

    tic

    popsize=15;

    lanti=10;

    maxgen=50;

    cross_rate=0.4;

    mutation_rate=0.1;

    a0=0.7;

    zpopsize=5;

    bestf=0;

    nf=0;

    number=0;

    I=imread('C:\Users\Yu\Pictures\feiji.jpg');

    if numel(I)>2

    I=rgb2gray(I);

    end

    [m,n]=size(I);

    p=imhist(I);

    p=p';

    p=p/(m*n);

    figure(1);

    subplot(1,2,1);

    imshow(I);

    title('yuantu');

    hold on

    pop=2*rand(popsize,lanti)-1;

    pop=hardlim(pop);

    for gen=1:maxgen

    [fitness,yuzhi,number]=fitnessty(pop,lanti,I,popsize,m,n,number);

    if max(fitness)>bestf

    bestf=max(fitness);

    nf=0;

    for i=1:popsize

    if fitness(1,i)==bestf

    v=i;

    end

    end

    yu=yuzhi(1,v);

    elseif max(fitness)==bestf

    nf=nf+1;

    end

    if nf>=20

    break;

    end

    A=shontt(pop);

    f=fit(A,fitness);

    pop=select(pop,f);

    pop=coss(pop,corss_rate,popsize,lanti);

    pop=mutation_compute(pop,mutation_rate,lanti,popsize);

    a=shonqt(pop);

    if a>a0

    zpop=2*rand(zpopsize,lanti)-1;

    zpop=hardlim(zpop);

    pop(popsize+1,popsize+zpopsize)=zpop(:,:);

    [fitness,yuzhi,number]=fitnessty(pop,lanti,I,popsize,m,n,number);

    A=shontt(pop);

    f=fit(A,fitness);

    pop=select(pop,f);

    end

    if gen==maxgen

    [fitness,yuzhi,number]=fitnessty(pop,lanti,I,popsize,m,n,number);

    end

    end

    imshow(I);

    subplot(1,2,2);

    fresult(I,yu);

    title('fazhifengehou');

    展开全文
  • matlab中uint16(uint8)函数的用法

    万次阅读 多人点赞 2018-10-31 15:32:56
    matlab中uint16函数的用法; 1.函数用法:将输入参数映射到无符号16位范围之内,即将参数限定在0-65535之间; 2.实例:当输入为一个实数a时: if a<0 输出ans=0; if 0<=a<=65535 输出ans=a; if...

    matlab中uint16函数的用法;
    1.函数用法:将输入参数映射到无符号16位范围之内,即将参数限定在0-65535之间;
    2.实例:当输入为一个实数a时:
    if a<0 输出ans=0;
    if 0<=a<=65535 输出ans=a;
    if a>65535 输出ans=65535;
    当输入为一个矩阵a时:对于矩阵中的每一个元素进行上述标量操作;
    if a=[-1 2 65539] 输出ans=[0 2 65535];
    注意:uint8的用法同理
    有用记得点赞奥!

    展开全文
  • matlab中uint8

    万次阅读 2017-09-06 11:24:13
    matlab中uint16的范围是0-65535,uint8的范围是0-255。 matlab提供强制转换为uint8的函数即uint8(number)。 但这个函数的做法是把大于255的数全部强制置为255,而小于255的部分则保持原样不变。 若希望将0-65535...
  • matlabuint8、double ,数据类型处理

    千次阅读 2019-02-04 11:01:03
    导入图像时,一般matlab的图像数据类型为uint8(8位无符号整数),该图像为8位图像,运算中matlab中数值一般采用double型(64位),存储可以为uint8 也可为double 。 所以 一般有如下操作: 先将图像转为double运算—...
  • 1、图像在matlab中的保存 matlab读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,比double型(64位,8个字节),节省了存储空间。 **imread()**是将灰度图像存入一个...
  • matlab中处理激光点云等数据时,其原始数据通常是存储为uint8类型,需要将其连续的4个uint8数据组合后转换成float型。 假如有这样一组数据 使用如下代码可以实现数据类型的转换: typecast(fliplr(uint8([65...
  • Matlab图像处理中uint8和double的问题

    万次阅读 2017-06-07 14:51:21
     为了节省存储空间,matlab为图像提供了特殊的数据类型uint...因此,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算, I2=im2double(I
  • matlab中处理图像像素点...matlab中imshow图片,要先转换成uint8:subplot(1,2,1),imshow(uint8(img1)),title('original');subplot(1,2,2),imshow(uint8(img2)),title('after');为了节省存储空间,matlab为图像提供...
  • matlab中怎样将uint8转化成double型 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对...
  • matlab中处理图像像素点数据: ...matlab中imshow图片,要先转换成uint8: subplot(1,2,1),imshow(uint8(img1)),title('original');subplot(1,2,2),imshow(uint8(img2)),title('after'); matlab图...
  • 我在Python中使用Z_axis = bytescale(img)完成了这项工作,但这与在MATLAB中使用im2uint8得到的结果不同。在MATLAB中,使用im2uint8转换成uint8后的DICOM图像的最小值和最大值分别为(124,136)。但是在Python中,...
  • matlab中,我们常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算。...这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8...
  • matlab图像数据类型uint8,double关系

    千次阅读 多人点赞 2019-04-05 20:07:50
    数字图像处理深入思考(一)double型的图像矩阵转化为uint8(I)类型(二)图像的【0,1】和【0,255】显示 深入思考 ...matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)运...
  •  matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点double(64位,8个字节),自然可以节省很大一部分存储空间。...
  • 这个问题是在刚开始接触使用Matlab处理图像时经常会遇见的困惑。  网上有这么一种说法:  默认情况下,matlab将图像的数据存储为double型,即64位...matlab还支持无符号整型(uint8和uint16);uint型的优势在
  • matlab中uint8的为无符号8位整数,范围 : [0 255],那么当越界时会发生什么呢?小于0:>> uint8(-1)ans = 0大于255:uint8(266)ans = 255这都比较自然,没什么。我今天遇到的使我犯错的是这样一个东西,如果两个...
  • MATLAB图像数据格式imshow uint8与double

    千次阅读 2019-05-11 16:26:54
    double(64位):matlab中数值一般采用double型存储和运算。 uint8(8位无符号整数):为了节省存储空间,matlab为图像提供的特殊数据类型。imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中,因此,...
  • 为了节省存储空间,matlab为图像提供了特殊的数据类型...因此,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,I2=im2double(I1) %把图像I
  •  matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点double(64位,8个字节),自然可以节省很大一部分存储空间。...
  • 为了节省存储空间,matlab为图像提供了特殊的数据类型...因此,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算, I2=im2double(I1) %...
  • uint8与byte可以说是一样的,因为文档有这样的定义: The Go Programming Language Specification Numeric types uint8 the set of all unsigned 8-bit integers (0 to 255) byte alias for uint8 1 2 3 4 也就是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 453
精华内容 181
关键字:

matlab中uint8

matlab 订阅