精华内容
下载资源
问答
  • matlab中uint16(uint8)函数的用法

    万次阅读 多人点赞 2018-10-31 15:32:56
    matlabuint16函数的用法; 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的用法同理
    有用记得点赞奥!

    展开全文
  • 我在Python中使用Z_axis = bytescale(img)完成了这项工作,但这与在MATLAB中使用im2uint8得到的结果不同。在MATLAB中,使用im2uint8转换成uint8后的DICOM图像的最小值和最大值分别为(124,136)。但是在Python中,...

    我想把DICOM图像从int16转换成uint8。我在Python中使用Z_axis = bytescale(img)完成了这项工作,但这与在MATLAB中使用im2uint8得到的结果不同。在MATLAB中,使用im2uint8转换成uint8后的DICOM图像的最小值和最大值分别为(124,136)。但是在Python中,使用bytescale进行转换后,这些值是(0255)。在

    Python代码:for person in range(0, len(dirs1)):

    if not os.path.exists(os.path.join(directory, dirs1[person])):

    Pathnew = os.path.join(directory, dirs1[person])

    os.makedirs(Pathnew)

    for root, dirs, files in os.walk(os.path.join(path, dirs1[person])):

    dcmfiles = [_ for _ in files if _.endswith('.dcm')]

    for dcmfile in dcmfiles:

    dcm_image = pydicom.read_file(os.path.join(root, dcmfile))

    img = dcm_image.pixel_array

    Z_axis = bytescale(img)

    minVal = Z_axis.min()

    maxVal = Z_axis.max()

    Matlab代码:

    ^{pr2}$

    显示时图像看起来是相等的,但数值不是。那么,bytescale和{}函数是否相等?如果不是,我想要像Python中的im2uint8这样的结果。我应该选择什么样的功能(尤其是DICOM图像)?在

    例如,在MATLAB中读取DICOM文件后:img = dicomread([galleryPath Files2(j).name]);

    img = [ -1024, -1024, 16;

    -1024, 8, 11;

    17, 5, 8];

    但在Python中,阅读后的相同图像是:dcm_image = pydicom.read_file(os.path.join(root, dcmfile))

    img = dcm_image.pixel_array

    img = array([[ -1024, -1024, 27],

    [ -1024, 27, 26],

    [ 24, 26, 23]])

    我不知道为什么在MATLAB和Python中它们是不同的。在MATLAB中应用im2uint8后,输出为:Z_axis = im2uint8(img)

    Z_axis =

    3×3 uint8 matrix

    124 124 128

    124 128 128

    128 128 128

    在Python中应用bytescale后,输出是:bytescale(img)

    Z_axis =

    array([[0, 0, 83],

    [0, 83, 83],

    [83, 83, 83]], dtype=uint8)

    展开全文
  • im2uint8函数分析

    2015-06-29 15:53:00
    uint8函数有效的输入的图像数据类为:logical,uint8,uint16,double,single和int16 如果输入类型为logical,则输入数据为1时转换为255,数据为0还是0。 如果输入类型为uint8,则输入数据...

    环境:Win7 64位 + Matlab R2010a

    本次分析的函数为im2uint8,这个函数在图像处理中要用到,主要把图像数据类转换到uint8

    uint8函数有效的输入的图像数据类为:logical,uint8,uint16,double,single和int16

    • 如果输入类型为logical,则输入数据为1时转换为255,数据为0还是0。
    • 如果输入类型为uint8,则输入数据保持不变。
    • 如果输入类型为uint16,则输入数据除以255,然后四舍五入。
    • 如果输入数据为double,则输入数据乘以255,小于0的数设置为0,大于255的数设置为255,其他的数四舍五入。
    • 如果输入数据为single,处理方式和double一样。
    • 如果输入数据为int16,处理暂且没弄清楚。

     

    上面输出的结果根据Matlab提供的M文件进行分析,M文件如下

    function u = im2uint8(varargin)
    %IM2UINT8 Convert image to 8-bit unsigned integers.
    %   IM2UINT8 takes an image as input, and returns an image of class uint8.  If
    %   the input image is of class uint8, the output image is identical to it.  If
    %   the input image is not uint8, IM2UINT8 returns the equivalent image of class
    %   uint8, rescaling or offsetting the data as necessary.
    %
    %   I2 = IM2UINT8(I1) converts the intensity image I1 to uint8, rescaling the
    %   data if necessary.
    %
    %   RGB2 = IM2UINT8(RGB1) converts the truecolor image RGB1 to uint8, rescaling
    %   the data if necessary.
    %
    %   I = IM2UINT8(BW) converts the binary image BW to a uint8 intensity image,
    %   changing one-valued elements to 255.
    %
    %   X2 = IM2UINT8(X1,'indexed') converts the indexed image X1 to uint8,
    %   offsetting the data if necessary. Note that it is not always possible to
    %   convert an indexed image to uint8. If X1 is double, then the maximum value
    %   of X1 must be 256 or less.  If X1 is uint16, the maximum value of X1 must be
    %   255 or less.
    %
    %   Class Support
    %   -------------
    %   Intensity and truecolor images can be uint8, uint16, double, logical,
    %   single, or int16. Indexed images can be uint8, uint16, double or
    %   logical. Binary input images must be logical. The output image is uint8.
    %
    %   Example
    %   -------
    %       I1 = reshape(uint16(linspace(0,65535,25)),[5 5])
    %       I2 = im2uint8(I1)
    %
    %   See also IM2DOUBLE, IM2INT16, IM2SINGLE, IM2UINT16, UINT8.
    
    %   Copyright 1993-2004 The MathWorks, Inc.
    %   $Revision: 1.20.4.5 $  $Date: 2005/11/15 00:58:23 $
    
    iptchecknargin(1,2,nargin,mfilename);
    
    img = varargin{1};
    iptcheckinput(img,{'double','logical','uint8','uint16','single','int16'}, ...
                  {'nonsparse'},mfilename,'Image',1);
    
    if nargin == 2
      typestr = varargin{2};
      iptcheckstrs(typestr,{'indexed'},mfilename,'type',2);
    end
    
    % 如果图像类型为uint8,则不改变
    if isa(img, 'uint8')
        u = img; 
        
    % 如果图像类型为logical(二值),则将1转为255和0仍然为0
    elseif isa(img, 'logical')
        u=uint8(img);
        u(img)=255;
    
    else %double, single, uint16, or int16
      if nargin == 1        %输入参数个数为1
        if isa(img, 'int16')    %如果图像类型为int16,则将其转为int16--这是因为grayto8函数不支持int16
          img = int16touint16(img);
        end
      
        % intensity image; call MEX-file
        u = grayto8(img);
      
      else        %输入参数个数为2
        if isa(img, 'int16')
          eid = sprintf('Images:%s:invalidIndexedImage',mfilename);
          msg1 = 'An indexed image can be uint8, uint16, double, single, or ';
          msg2 = 'logical.';
          error(eid,'%s %s',msg1, msg2);
        
        elseif isa(img, 'uint16')
          if (max(img(:)) > 255)
            msg = 'Too many colors for 8-bit integer storage.';
            eid = sprintf('Images:%s:tooManyColorsFor8bitStorage',mfilename);
            error(eid,msg);
          else
            u = uint8(img);
          end
        
        else %double or single   值范围1-256
          if max(img(:)) >= 257 
            msg = 'Too many colors for 8-bit integer storage.';
            eid = sprintf('Images:%s:tooManyColorsFor8bitStorage',mfilename);
            error(eid,msg);
          elseif min(img(:)) < 1
            msg = 'Invalid indexed image: an index was less than 1.';
            eid = sprintf('Images:%s:invalidIndexedImage',mfilename);
            error(eid,msg);
          else
            u = uint8(img-1);
          end
        end
      end
    end

     

    这其中有个grayto8函数,这个函数在MEX文件中,具体源代码google找了一份,注释了一下

    /*
     * GRAYTO8 MEX-file
     *
     * B = GRAYTO8(A) converts the double array A to uint8 by scaling A by 255
     * and then rounding.  NaN's in A are converted to 0.  Values in A greater 
     * than 1.0 are converted to 255; values less than 0.0 are converted to 0.
     *
     * B = GRAYTO8(A) converts the uint16 array A by scaling the elements of A
     * 255/65535, rounding, and then casting to uint8.
     *
     * Copyright 1993-2007 The MathWorks, Inc.
     *
     */
    
    #include "mex.h"
    #include "math.h"
    #include "mwsize.h"
    
    // double类型转换
    void ConvertFromDouble(double *pr, uint8_T *qr, mwSize numElements) {
        mwSize k;
        double val;
    
        for (k = 0; k < numElements; k++) {
            val = *pr++;
            if (mxIsNaN(val)) {
                *qr++ = 0;
            }
            else {
                val = val * 255.0 + 0.5;    // 数据加0.5是为了四舍五入需要 例如 uint8(245.1+0.5)=245 和 uint8(245.6+0.5)=246
                if (val > 255.0) val = 255.0;
                if (val < 0.0)   val = 0.0;
                *qr++ = (uint8_T) val;
            }
        }
    }
    
    // single类型转换(处理方式和double类型一样)
    void ConvertFromSingle(float *pr, uint8_T *qr, mwSize numElements) {
        mwSize k;
        float val;
    
        for (k = 0; k < numElements; k++) {
            val = *pr++;
            if (mxIsNaN(val))
                *qr++ = 0;
            else {
                val = val * 255.0f + 0.5f;
                if (val > 255.0) val = 255.0;
                if (val < 0.0)   val = 0.0;
                *qr++ = (uint8_T) val;
            }
        }
    }
    
    // uint16类型转换
    void ConvertFromUint16(uint16_T *pr, uint8_T *qr, mwSize numElements) {
        mwSize k;
        /* 
         除以257的原因来自于uint16数字映射到uint8
         例如数字x转换到uint8
            y = x*255/65535
            由于257 = 65535/255,则y=x/257
        */
        double factor = 1.0 / 257.0;
    
        for (k = 0; k < numElements; k++)
            *qr++ = (uint8_T) ( (double) (*pr++) * factor + 0.5 );
    }
    
    void ValidateInputs(int nrhs, const mxArray *prhs[]) {
        if (nrhs < 1) {
            mexErrMsgIdAndTxt("Images:grayto8:tooFewInputs",
                              "%s","Too few input arguments.");
        }
        if (nrhs > 1) {
            mexErrMsgIdAndTxt("Images:grayto8:tooManyInputs",
                              "%s","Too many input arguments.");
        }
        if (!mxIsDouble(prhs[0]) && !mxIsUint16(prhs[0]) && !mxIsSingle(prhs[0])) {
            mexErrMsgIdAndTxt("Images:grayto8:invalidType",
                              "%s","Input must be double, single, or uint16.");
        }
        if (mxIsComplex(prhs[0])) {
            mexWarnMsgIdAndTxt("Images:grayto8:ignoringImaginaryPartOfInput",
                               "%s","Ignoring imaginary part of input.");
        }
    }
    
    
    void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
        uint8_T *qr;
    
        (void) nlhs;  /* unused parameter */
    
        ValidateInputs(nrhs, prhs);
    
        plhs[0] = mxCreateNumericArray(mxGetNumberOfDimensions(prhs[0]),
                                       mxGetDimensions(prhs[0]), 
                                       mxUINT8_CLASS, mxREAL);
        qr = (uint8_T *) mxGetData(plhs[0]);
    
        if (mxIsDouble(prhs[0]))
            ConvertFromDouble((double *) mxGetData(prhs[0]), qr, mxGetNumberOfElements(prhs[0]));
    
        else if (mxIsUint16(prhs[0]))
            ConvertFromUint16((uint16_T *) mxGetData(prhs[0]), qr, mxGetNumberOfElements(prhs[0]));
    
        else
            ConvertFromSingle((float *) mxGetData(prhs[0]), qr, mxGetNumberOfElements(prhs[0]));
    
    }

     

    转载于:https://www.cnblogs.com/cpointer/p/4606983.html

    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼程序如下: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数字图像处理的相关内容 MATLAB求图像的均值、中值、众数、方差、协方差、相关系数 MATLAB求图像直方图、累计直方图前言一、图像显示问题说明1.说明2.案例展示二、图像类型转换三、自定义显示函数1.函数...
  • 我正在尝试从MATLAB R2013a中的图像中提取HOG功能。这是我从MATLAB文档网站复制的代码:input='1.png';Z=imread(input);...我得到的错误是:类型为'uint8'的输入参数的未定义函数'extractHOGFeatu...
  • matlab中的uint8

    万次阅读 2017-09-06 11:24:13
    matlab提供强制转换为uint8函数uint8(number)。 但这个函数的做法是把大于255的数全部强制置为255,而小于255的部分则保持原样不变。 若希望将0-65535的灰度级映射到0-255上,则可采用以下的办法: uint8...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼程序如下: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...
  • 8、数学软件 Matlab Matlab 文件操作 Matlab 文件操作介绍 ? 文件操作是一种重要的输入输出方式, Matlab 提供了一系列输入输出函数,专门用于文件操作。 ? Matlab ......卷积神经网络代码理解 1、代码来源:代码来自 ...
  • 今天发现一个奇怪的现象。 在用 imresize() 缩小图象时,如果图象时 double 格式的,缩小后会产生不连通的现象。 ...左边是 class(img) = uint8,右边是 class(img) = double。 可以发现,do...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼程序如下: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...
  • 将图像转换为uint8格式 & MATLAB实现

    千次阅读 2019-10-16 09:34:32
    在根据 VOC 数据的格式处理我自己的数据时,需要 ...要转换其实很简单,先将标签值映射到 0~255,注意但此时不再是 255 为前景了,然后通过 im2uint8 函数将数据转换为 uint8 类型。 bin = (lebel == 255) / 255 l...
  • 1.fopen函数 filename='D:\test4.jpg'; file_id = fopen(filename, 'rb'); 在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为: fileID=fopen(文件名,...
  • 本文为转载其他地方的文章;MATLAB函数1、matlab函数bitset设置数的某一位二进制位为1. 《Simulink与信号处理》使用方法C =bitset(A,bit)将数A的第bit二进制位设为1.C...应用举例例1: .C =bitset(uint8(9),5) C = 2...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼程序如下: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...
  • 生成代码01介绍在Simulink中做一个简单的模块,如下uint16 MySumFunction(uint8 a, uint8 b){ uint8 c=0; c = a + b; return c;}上面的模块在AUTOSAR中可以当做一个SWC,输入有两个,a和b,输出只有一个c,计算a+b...
  • matlab中图像函数1

    2011-10-29 21:15:25
    MATLAB还支持另一种类型无符号整型(uint8),即图像矩 阵中每个数据占用1个字节。  在使用MATLAB工具箱时,一定要注意函数所要求的参数类型。另外,uint8 与double两种类型数据的值域不同,编程需注意值域转换。 ...
  • import cv2 import numpy as np def imcomplement(img): # 负片... table = np.array([255 - i for i in np.arange(0, 256)]).astype("uint8") return cv2.LUT(img, table) # 使用OpenCV的查找表函数    
  • MATLAB:range = getrangefromclass(I)...matlab中图像数据类型可以是:uint8, uint16, int16, logical, single, 或者 double。 请问Python中有相同功能的函数吗?或者Python如何实现根据数据类型返回默认取值范围?
  • Matlab-imcomplement函数

    千次阅读 2011-05-27 16:05:00
    一个简单的例子: X = uint8([ 255 10 75; 44 225 100]); X2 = imcomplement(X)  X2 = 0 245 180 211 30 155 注意点: 1. 图像文件中用uint8来表示256级灰度。 对于真彩色位图, 一个像
  • Matlab中imadjust函数的使用方法

    千次阅读 2020-03-27 12:25:30
    imadjust 函数imadjust可以对灰度图像进行亮度变化。 调用格式 J = imadjust(I,[low_in high_in],[low_out high_out],gamma) 此函数将图像I中low_in至high_in之间的值映射...输入图像I应该为uint8、uint16或double类...
  • im2double 、mat2gray与double double 就是简单地把一个变量类型转换成double类型,数值大小不变 mat2gray是把一个double...如果输入是 uint8 unit16或者是二值的logical类型,则函数im2double 将其值归一化到0~1之间

空空如也

空空如也

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

matlabuint8函数

matlab 订阅