matlab图像数据类型转换
matlab数据类型及转换

Matlab中有15种基本数据类型,主要是整型、浮点、逻辑、字符、日期和时间、结构数组、单元格数组以及函数句柄等。
1、整型:(int8;uint8;int16;uint16;int32;uint32;int64;uint64)通过intmax(class)和intmin(class) 函数返回该类整型的最大值和最小值,例如intmax(‘int8’)=127;2、浮点:(single;double)浮点数:REALMAX('double')和REALMAX('single')分别返回双精度浮点和单精度浮点的最大值,REALMIN('double')和REALMIN ('single')分别返回双精度浮点和单精度浮点的最小值。
3、逻辑:(logical)Logical:下例是逻辑索引在矩阵操作中的应用,将5*5矩阵中大于0.5的元素设定为0:A = rand(5);A(A>0.5)=0;4、字符:(char)Matlab中的输入字符需使用单引号。
字符串存储为字符数组,每个元素占用一个ASCII字符。
如日期字符:DateString=’9/16/2001’ 实际上是一个1行9列向量。
构成矩阵或向量的行字符串长度必须相同。
可以使用char函数构建字符数组,使用strcat函数连接字符。
例如,命令 name = ['abc' ; 'abcd'] 将触发错误警告,因为两个字符串的长度不等,此时可以通过空字符凑齐如:name = ['abc ' ; 'abcd'],更简单的办法是使用char函数:char(‘abc’,’abcd’),Matlab自动填充空字符以使长度相等,因此字符串矩阵的列纬总是等于最长字符串的字符数.例如size(char(‘abc’,’abcd’))返回结果[2,4],即字符串’abc’实际存在的是’abc ’,此时如需提取矩阵中的某一字符元素,需要使用deblank函数移除空格如name=char(‘abc’,’abcd’); deblank(name(1,:))。
matlab图像各种代码

1,二值化和阈值处理%图像二值化(选取一个域值,(5) 将图像变为黑白图像)I=imread('C:\Documents and Settings\Administrator\桌面\DIP-E1增强\DIP-E1增强\p12.tif'); bw=im2bw(I,0.5);%选取阈值为0.5subplot(1,3,1);imshow(I);title('原图');subplot(1,3,2);imshow(bw);title('显示二值图像');J=find(I<150);I(J)=0;J=find(I>=150);I(J)=255;subplot(1,3,3);imshow(I);title(' 图像二值化 ( 域值为150 ) ');2非线性变换%对数变换I=imread('C:\Documents and Settings\Administrator\桌面\DIP-E1增强\DIP-E1增强\p12.tif');I=mat2gray(I);%对数变换不支持uint8类型数据,将一个矩阵转化为灰度图像的数据格式(double)J=log(I+1);subplot(1,2,1);Imshow(I);%显示图像title('原图');subplot(1,2,2);Imshow(J);title('对数变换后的图像')3,反色变换I1=imread('C:\Documents and Settings\Administrator\桌面\DIP-E1增强\DIP-E1增强\p12.tif'); figure,imshow(I);title('原始图像');I2=imcomplement(I1);figure,imshow(I2);title('反色后图像');4.灰度图像均衡化I=imread('C:\Documents and Settings\Administrator\桌面\DIP-E1增强\DIP-E1增强\p12.tif');J=histeq(I);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);figure,subplot(1,2,1),imhist(I,64);subplot(1,2,2),imhist(J,64);一打开图片和灰阶化global imglobal xglobal yglobal zx=0.002;y=0.02;z=0.04;[filename,pathname]=...uigetfile();str=[pathname filename];im=imread(str);axes(handles.axes1);imshow(im);title();im = rgb2gray(im);axes(handles.axes2);imshow(im);title();二线性变换global im;global J;J=imadjust(im,[0.3,0.7],[]); axes(handles.axes1);imshow(im);title();axes(handles.axes2);imhist(im);title();axes(handles.axes3);imshow(J);title();axes(handles.axes4);imhist(J);title();三分段线性变换global im;global H;H=double(im);[M,N]=size(H);%½øÐлҶȱ任for i=1:Mfor j=1:Nif H(i,j)<=30H(i,j)=H(i,j);elseif im(i,j)<=150H(i,j)=(200-30)/(150-30)*(H(i,j)-30)+30;elseH(i,j)=(255-200)/(255-150)*(H(i,j)-150)+200;endendend%±ä»»ºóµÄ½á¹ûaxes(handles.axes1);imshow(im);title();axes(handles.axes2);imhist(im);title();axes(handles.axes3);imshow(uint8(H));title();axes(handles.axes4);imhist(uint8(H));title();四非线性变换global im;global J;global H;J=double (im) ;H=(log(J+1))/10;axes(handles.axes1);imshow(im);title();axes(handles.axes2);imhist(im);title();axes(handles.axes3);imshow(H);title();axes(handles.axes4);imhist(H);title();五生成灰度直方图global im;axes(handles.axes1);imshow(im);title();axes(handles.axes2);imhist(im);title();六直方图均衡化global im;global J;J=histeq(im);axes(handles.axes1);imshow(im);title();axes(handles.axes2);imshow(J);title();axes(handles.axes3);imhist(im);title();axes(handles.axes4);imhist(J);title一打开图片和灰阶化global imglobal xglobal yglobal zx=0.002;y=0.02;z=0.04;[filename,pathname]=...uigetfile();str=[pathname filename]; im=imread(str);axes(handles.axes1);imshow(im);title();im = rgb2gray(im);axes(handles.axes2);imshow(im);title();二线性变换global im;global J;J=imadjust(im,[0.3,0.7],[]); axes(handles.axes1);imshow(im);title();axes(handles.axes2);imhist(im);title();axes(handles.axes3);imshow(J);title();axes(handles.axes4);imhist(J);title();三分段线性变换global im;global H;H=double(im);[M,N]=size(H);%½øÐлҶȱ任for i=1:Mfor j=1:Nif H(i,j)<=30H(i,j)=H(i,j);elseif im(i,j)<=150H(i,j)=(200-30)/(150-30)*(H(i,j)-30)+30;elseH(i,j)=(255-200)/(255-150)*(H(i,j)-150)+200;endendend%±ä»»ºóµÄ½á¹ûaxes(handles.axes1);imshow(im);title();axes(handles.axes2);imhist(im);title();axes(handles.axes3);imshow(uint8(H));title();axes(handles.axes4);imhist(uint8(H));title();四非线性变换global im;global J;global H;J=double (im) ;H=(log(J+1))/10;axes(handles.axes1);imshow(im);title();axes(handles.axes2);imhist(im);title();axes(handles.axes3);imshow(H);title();axes(handles.axes4);imhist(H);title();五生成灰度直方图global im;axes(handles.axes1);imshow(im);title();axes(handles.axes2);imhist(im);title();六直方图均衡化global im;global J;J=histeq(im);axes(handles.axes1);imshow(im);title();axes(handles.axes2);imshow(J);title();axes(handles.axes3);imhist(im);title();axes(handles.axes4);imhist(J);title平滑处理用3*3屏蔽窗口的8近邻均值进行滤波for(int j=1;j<height-1;j++){for(int i=1;i<wide-1;i++){averg=0;averg=(int)((p_data[(j-1)*wide+(i-1)]+p_data[(j-1)*wide+i]+p_data[(j-1)*wide+(i+1)]+p_data[j*wide+(i-1)]+p_data[j*wide+i+1]+p_data[(j+1)*wide+(i-1)]+p_data[(j+1)*wide+i]+p_data[(j+1)*wide+i+1])/8); //求周围8近邻均值if(abs(averg-p_temp[j*wide+i])>127.5)p_temp[j*wide+i]=averg;}}利用巴特沃斯(Butterworth)低通滤波器对受噪声干扰的图像进行平滑处理I=imread('aaa.jpg');imshow(I);J1=imnoise(I,'salt & pepper'); % 叠加椒盐噪声figure,imshow(J1);f=double(J1); % 数据类型转换,MATLAB不支持图像的无符号整型的计算g=fft2(f); % 傅立叶变换g=fftshift(g); % 转换数据矩阵[M,N]=size(g);nn=2; % 二阶巴特沃斯(Butterworth)低通滤波器d0=50;m=fix(M/2); n=fix(N/2);for i=1:Mfor j=1:Nd=sqrt((i-m)^2+(j-n)^2);h=1/(1+0.414*(d/d0)^(2*nn)); % 计算低通滤波器传递函数result(i,j)=h*g(i,j);endendresult=ifftshift(result);J2=ifft2(result);J3=uint8(real(J2));figure,imshow(J3); % 显示滤波处理后的图像归一化OTSU算法代码:I=imread(' E:\360Apps\tupian.bmp');th=graythresh(I);J=im2bw(I,th);imshow(I);subplot(122)imshow(J);Bernsen算法代码:clc;clear allclose allI=imread('****');[m,n] = size(I);I_gray=double(I);T=zeros(m,n);M=3;N=3;for i=M+1:m-Mfor j=N+1:n-Nmax=1;min=255;for k=i-M:i+Mfor l=j-N:j+Nif I_gray(k,l)>maxmax=I_gray(k,l);endif I_gray(k,l)<minmin=I_gray(k,l);endendendT(i,j)=(max+min)/2;endendI_bw=zeros(m,n);for j=1:nif I_gray(i,j)>T(i,j)I_bw(i,j)=255;elseI_bw(i,j)=0;endendendsubplot(121),imshow(I);subplot(122),imshow(I_bw);改进的Bernsen算法代码:clc;clear allclose allI=imread('****');I_gray=double(I);[m,n] = size(I);a=0.3;A=0;T1=0;S=0;for i=1:mfor j=1:nA=A+I_gray(i,j) ;endendA=A*0.9;while(S<A)T1=T1+1;for i=1:mfor j=1:nif(I_gray(i,j)==T1)S=S+I_gray(i,j);endendendendT2=zeros(m,n);T3=zeros(m,n);M=3;N=3;for i=M+1:m-Mfor j=N+1:n-Nmax=1;min=255;for k=i-M:i+Mfor l=j-N:j+Nif I_gray(k,l)>maxmax=I_gray(k,l);endif I_gray(k,l)<minmin=I_gray(k,l);endendendT2(i,j)=(max+min)/2;T3(i,j)=max-min;endendT4=medfilt2(T2,[M,N]);T5=(T1+T4)/2;I_bw=zeros(m,n);for i=1:mfor j=1:nif I_gray(i,j)>(1+a)*T1I_bw(i,j)=255;endif I_gray(i,j)<(1-a)*T1I_bw(i,j)=0;endif (1-a)*T1<=I_gray(i,j)<=(1-a)*T1 if T3(i,j)>a*T1if I_gray(i,j)>=T4(i,j)I_bw(i,j)=255;elseI_bw(i,j)=0;endelse if I_gray(i,j)>=T5(i,j)I_bw(i,j)=255;elseI_bw(i,j)=0;endendendendendsubplot(121),imshow(I);subplot(122),imshow(I_bw);。
matlab图像数据类型转换

图像数据在进行计算前要转化为double类型的,这样可以保证图像数据运算的精度。很多矩阵的很多矩阵数据也都是double的,要想显示其,必须先转换为图像的标准数据格式。如果转换前的数据符合图像数据标准(比如如果是double则要位于0~1之间,这个是由Matlab中的规定),那么可以直接使用im2uint8。
反之,imread根据文件中的图像种类作不同的处理。当文件中的图像为灰度图像时,imread把图像存入一个8位矩阵中,把色图矩阵转换为双精度矩阵,矩阵中每个元素值在[0,1]内;当为RGB图像时,imread把数据存入到一个8位RGB矩阵中。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
uint 8:无符号的8位(8bit)整型数据(unit 都是存储型)
int :整型数据
1、在MATLAB中,数值一般都采用double型(64位)存储和运算.
2、为了节省存储空间,MATLAB为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称为8位型像。
3、函数image能够直接显示8位图像,但8位型数据和double型数据在image中意义不一样,
பைடு நூலகம்
总之,im2uint8、im2double要跟uint8、double区别开来。
double 就是简单地把一个变量类型转换成double类型,数值大小不变;
matlab数据类型转换函数

matlab数据类型转换函数Matlab是一种强大的数学计算软件,它支持多种数据类型,包括数字、字符、逻辑、结构体等。
在Matlab中,数据类型转换函数可以将一个数据类型转换为另一个数据类型,这对于数据处理和分析非常有用。
本文将介绍Matlab中常用的数据类型转换函数。
1. num2str和str2numnum2str函数可以将数字转换为字符串,而str2num函数可以将字符串转换为数字。
例如,将数字123转换为字符串可以使用以下代码:```num = 123;str = num2str(num);```将字符串"123"转换为数字可以使用以下代码:```str = "123";num = str2num(str);```2. int2str和str2intint2str函数可以将整数转换为字符串,而str2int函数可以将字符串转换为整数。
例如,将整数123转换为字符串可以使用以下代码: ```num = 123;str = int2str(num);```将字符串"123"转换为整数可以使用以下代码:```str = "123";num = str2int(str);```3. char和doublechar函数可以将数字数组转换为字符数组,而double函数可以将字符数组转换为数字数组。
例如,将数字数组[1,2,3]转换为字符数组可以使用以下代码:```num = [1,2,3];str = char(num);```将字符数组"123"转换为数字数组可以使用以下代码:```str = "123";num = double(str);```4. cell2mat和mat2cellcell2mat函数可以将单元格数组转换为普通数组,而mat2cell函数可以将普通数组转换为单元格数组。
MATLAB图像处理工具箱支持四种基本图像类型

MATLAB图像处理工具箱支持四种根本图像类型:索引图像、灰度图像、二进制图像和RGB图像。
MATLAB直接从图像文件中读取的图像为RGB图像。
它存储在三维数组中。
这个三维数组有三个面,依次对应于红(Red)、绿(Green)、蓝(Blue)三种颜色,而面中的数据如此分别是这三种颜色的强度值,面中的元素对应于图像中的像素点。
设所得矩阵为X三维矩阵(256,256,3) ,X(:,:,1)代表红颜色的2维矩阵 X(:,:,2)代表绿颜色的2维矩阵, X(:,:,3)代表兰颜色的2维矩阵。
[X, map]=imread('34.bmp');r=double(X(:,:,1)); %r是256 x 256的红色信息矩阵g=double(X(:,:,2)); %g是256 x 256的绿色信息矩阵b=double(X(:,:,3)); %b是256 x 256的兰色信息矩阵索引图像数据包括图像矩阵X与颜色图数组map,其中颜色图map是按图像中颜色值进展排序后的数组。
对于每个像素,图像矩阵X包含一个值,这个值就是颜色图数组map中的索引。
颜色图map为m×3双精度矩阵,各行分别指定红、绿、蓝(R、G、B)单色值,map=[RGB],R、G、B为值域为[0,1]的实数值,m为索引图像包含的像素个数。
对于一样的数据,采用uint8格式比双精度格式节省内存空间,从而更经济。
在MATLAB中如果索引图像的颜色图小于256行,如此它的图像矩阵以uint8格式存储,否如此以双精度格式存储。
一:imread:从图像文件夹中读取图像。
A =imread(FILENAME,FMT) 读取图像到A,如果文件是包含一灰度图像,A是一二维矩阵,如果文件是包含一真彩色图像〔RGB〕,A是一三维矩阵〔M-by-N-by-3〕。
FILENAME :图像文件名;FMT:图像文件格式;文件必须在当前目录下,或在Matlab的一路径上。
Matlab数据类型及转换

此外,Matlab同时提供一种更灵活的单元格数组方法,使用函数cellstr可以将字符串数组转换为单元格数组:
(2)构建单元格数组:函数方法
Cell函数。如:
B = cell(2, 3);
B(1,3) = {1:3};
(3)访问数据
通过索引可直接访问单元格数组中的数据元素,例如:
N{1,1} = [1 2; 4 5];
N{1,2} = 'Name';
N{2,1} = 2-4i;
N{2,2} = 7;
2、浮点:(single;double)
浮点数:REALMAX('double')和REALMAX('single')分别返回双精度浮点和单精度浮点的最大值,REALMIN('double')和REALMIN ('single')分别返回双精度浮点和单精度浮点的最小值。
3、逻辑:(logical)
Matlab数据类型及转换 (2011-05-16 15:10:59)转载▼
标签: 杂谈 分类: 备忘录
Matlab中有15种基本数据类型,主要是整型、浮点、逻辑、字符、日期和时间、结构数组、单元格数组以及函数句柄等。
1、整型:(int8;uint8;int16;uint16;int32;uint32;int64;uint64)通过intmax(class)和intmin(class) 函数返回该类整型的最大值和最小值,例如intmax(‘int8’)=127;
MATLAB 图像处理命令使用

MATLAB 图像处理命令使用1.MATLAB中图像处理的一些简单函数A、imreadimread函数用于读入各种图像文件,其一般的用法为[X,MAP]=imread(‘filename’,‘fmt’)其中,X,MAP分别为读出的图像数据和颜色表数据,fmt为图像的格式,filename为读取的图像文件(可以加上文件的路径)。
例:[X,MAP]=imread(’flowers.tif’,’tif’);比较读取二值图像,灰度图像,索引图像,彩色图像的X和MAP的特点,可以利用size 函数用来显示数组的维数,了解数据的特点。
B=size(a) 返回数组a 的维数。
B、imwriteimwrite函数用于输出图像,其语法格式为:imwrite(X,map,filename,fmt)imwrite(X,map,filename,fmt)按照fmt指定的格式将图像数据矩阵X和调色板map写入文件filename。
C、imfinfoimfinfo函数用于读取图像文件的有关信息,其语法格式为imfinfo(filename,fmt)imfinfo函数返回一个结构info,它反映了该图像的各方面信息,其主要数据包括:文件名(路径)、文件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数、图像的类型等。
2.MATLAB中图像文件的显示imshowimshow函数是最常用的显示各种图像的函数,其语法如下:imshow(X,map)其中X是图像数据矩阵,map是其对应的颜色矩阵,若进行图像处理后不知道图像数据的值域可以用[]代替map。
(1)二进制(二值)图像显示方法,在MATLAB中一幅二值图像是uint8或双精度的,该矩阵仅包含0和1。
如果希望工具箱中的函数能将图像理解为二进制的,那么所有数据都要是逻辑数据,必须对其进行设置(将所有数据标志均设置on).可以对数据利用“~”取反操作实现图像逆转即黑白反色。
matlab中imread函数的用法

matlab中imread函数的用法MATLAB中imread函数的用法MATLAB是一款强大的数学工具,用于矩阵计算、数据分析、绘图和图像处理。
imread 函数是用于读入图像文件的函数之一。
读入的图像可以是常见的各种格式,比如BMP、GIF、JPEG、PNG等。
语法格式:```img = imread(filename)img = imread(filename, fmt)```filename为图像所在路径和文件名,fmt为文件格式(可选)。
如果fmt省略,则MATLAB会自动检测图像文件的格式。
函数返回值:img:读入的图像矩阵imread函数的常见用法1. 读入 RGB 彩色图像RGB彩色图像保存为三通道的图像,分别是红、绿、蓝三个颜色通道,每个通道的值范围是 [0,255]。
读入RGB图像:```img = imread('example.jpg');```2. 读入灰度图像灰度图像只有一个通道,通道数为1,每个像素点的值在[0,255]之间。
读入灰度图像:```img = imread('example_gray.jpg');3. 指定图像格式如果图像文件的格式不支持自动检测,可以使用fmt参数来指定图像文件的格式,如JPEG格式:```img = imread('example.jpg', 'jpg');```4. 读入部分图像使用imread函数可以读入部分图像,只需要指定图像文件中某一部分的范围即可,例如:```img = imread('example.jpg','PixelRegion',{[1 10],[1 10],[]});```使用PixelRegion选项,可以选择只读入图像的某一区域,前两个参数指定所选区域的行和列的范围,第三个参数指定通道范围(如果是灰度图像则省略)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
uint 8:无符号的8位(8bit)整型数据(unit 都是存储型)
int :整型数据
1、在MATLAB中,数值一般都采用double型(64位)存储和运算.
2、为了节省存储空间,MATLAB为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称为8位型像。
3、函数image能够直接显示8位图像,但8位型数据和double型数据在image中意义不一样,
4、对于索引图像,数据矩阵中的值指定该像素的颜色种类在色图矩阵中的行数。
当数据矩阵中的值为0时,表示用色图矩阵中第一行表示的颜色绘制;当数据矩阵中的值为1时,表示用色图矩阵中的第二行表示的颜色绘制该像素,数据与色图矩阵中的行数总是相差1。
所以,索引图像double型和uint8型在显示方法上没有什么不同,只是8位数据矩阵的值和颜色种类之间有一个偏差1。
调用格式均为image(x); colormap(map);
5、对于灰度图像,uint8表示范围[0,255],double型表示范围[0,1]。
可见,double型和uint8型灰度图像不一样,二者转换格式为:
I8=uint8 (round (I64*255)); !!double转换成uint 8
I64=double (I8)/255; !!!uint转换成double
反之,imread根据文件中的图像种类作不同的处理。
当文件中的图像为灰度图像时,imread 把图像存入一个8位矩阵中,把色图矩阵转换为双精度矩阵,矩阵中每个元素值在[0,1]内;当为RGB图像时,imread把数据存入到一个8位RGB矩阵中。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double
因此
I2=im2double(I1) :把图像数组I1转换成double精度类型;
如果不转换,在对uint8进行加减时会产生溢出
图像数据类型转换函数
默认情况下,matlab将图象中的数据存储为double型,即64位浮点数;matlab还支持无符号整型(uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。
im2double():将图象数组转换成double精度类型
im2uint8():将图象数组转换成unit8类型
im2uint16():将图象数组转换成unit16类型
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
默认情况下,matlab将图像中的数据存储为double型,即64位浮点数;matlab还支持无符号整型(uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。
但是,问题的真正的解释其实应该是这样的。
首先是在数据类型转换时候uint8和im2uint8的区别,uint的操作仅仅是将一个double类型的小数点后面的部分去掉;但是im2uint8是将输入中所有小于0的数设置为0,而将输入中所有大于1的数值设置为255,再将所有其他值乘以255。
图像数据在进行计算前要转化为double类型的,这样可以保证图像数据运算的精
度。
很多矩阵的很多矩阵数据也都是double的,要想显示其,必须先转换为图像的标准数据格式。
如果转换前的数据符合图像数据标准(比如如果是double则要位于0~1之间,这个是由Matlab中的规定),那么可以直接使用im2uint8。
如果转换前不满足这个分布规律,则使用uint8,将其自动切割至0~255(超过255的按255)最好使用mat2gray,这个函数可以把一个double类的任意数组转换成取值范围在[0,1]之间的,将一个矩阵转化为灰度图像的数据格式(double)另外,可以用isgray判断矩阵是否是一个图像数据矩阵。
matlab中用imshow()显示图像与图像矩阵的数据类型的关系
在matlab中,我们常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算。
在matlab中,为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型。
如果直接运行imshow(I),我们会发现显示的是一个白色的图像。
这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。
而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。
那么如何解决这个问题呢?笔者曾经用fix()函数把图像矩阵由实数形式转化成整数形式,但这样仍无法改变图像矩阵是double型的事实。
通过搜索,找到两个解决方法:imshow(I/256); -----------将图像矩阵转化到0-1之间imshow(I,[]); -----------自动调整数据的范围以便于显示(不明白原理!%lwb 添加内容:此处用了图像灰度拉伸方法,将图像最小的像素值变为0,最大的为255%)从实验结果看两种方法都解决了问题,但是从显示的图像看,第二种方法显示的图像明暗黑白对比的强烈些!不知什么原理!此外还找到一些方法,还没有试过,记录如下:
uint8和im2uint8的区别
图像数据在计算前需要转换为double,以保证精度; 很多矩阵数据也都是double的,要想显示其,必须先转换为图像的标准数据格式. 如果转换前的数据符合图像数据标准(比如如果是double则要位于0~1之间),那么可以直接使用im2uint8 如果转换前的数据分布不合规律,则使用uint8,将其自动切割至0~255(超过255的按255)最好使用mat2gray,将一个矩阵转化为灰度图像的数据格式(double) 另外,可以用isgray判断矩阵是否是一个图像数据矩阵
总之,im2uint8、im2double要跟uint8、double区别开来。
double 就是简单地把一个变量类型转换成double类型,数值大小不变;
比如 a=6 是个unit8类型的话,double(a)的结果还是6,不过现在这个6是double类型的。
函数im2double将输入转换成double类型。
如果输入是 uint8 unit16 或者是二值的logical 类型,则函数im2double 将其值归一化到0~1之间,当然就是double类型的了。
如果输入本身就是double类型,输出还是double类型,并不进行归一化。
!!!!!!!!!!!!!!!!!!!
imhist(I)
为图像,在灰度条上显示一个直方图。
直方图中bin的数目有图像的类型决定。
如果I是个灰度图像,imhist将使用默认值256个bins。
如果I是一个二值图像,imhist使用两bins。
imhist(I, n)
使用指定的n个bin来绘制直方图。
n同时也制定了颜色条的长度,如果是二值图像,n只能赋值为2。
imhist(X, map)
为索引文件显示直方图。
这个直方图在colormap图上显示像素值的分布。
colormap必须至少和X最大索引一样长。
[counts,x] = imhist(...)
bin应该是直方图直方的个数,要把灰度归为几类,有几个直方形,就有几个bin。
这样,如果设定了bins,那么其他颜色之类,应该以一种算法归于最近的bin。