使用Matlab将24位图转为8位图的方法
- 格式:doc
- 大小:28.00 KB
- 文档页数:1
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 8I64=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型。
Matlab中有15种大体数据类型,主如果整型、浮点、逻辑、字符、日期和时间、结构数组、单元格数组和函数句柄等。
一、整型:(int8;uint8;int16;uint16;int32;uint32;int64;uint64)通过intmax(class)和intmin(class) 函数返回该类整型的最大值和最小值,例如intmax(‘int8’)=127;二、浮点:(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/2021’ 实际上是一个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,:))。
实验三图像的几何操作一、图像的基本运算1、加法运算图像相加一般用于对同一场景的多幅图像求平均效果,以便有效地降低具有叠加性质的随机噪声。
直接采集的图像品质一般都较好,不需要进行加法运算处理,但是对于那些经过长距离模拟通信方式传送的图像(如卫星图像),这种处理是必不可少的。
在MA TLAB7.0中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用imadd函数来实现。
imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输入图像。
imadd函数的调用格式可参考图像处理的工具箱。
下面的程序可将图1两幅图像叠加在一起,叠加效果如图2所示。
imshow('rice.png');imshow('cameraman.tif');I=imread('rice.png');J=imread('cameraman.tif');K=imadd(I,J,'uint16');%大小必须一样imshow(K,[])图1 图2给图像的每一个像素加上一个常数可以使图像的亮度增加。
例如以下程序示例的处理效果如图3所示。
I=imread('rice.png');J=imadd(I,50);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);图32、减法运算图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。
图像减法可以作为许多图像处理过程的准备步骤。
例如,可以使用图像减法来检测一系列相同场景图像的差异。
图像减法与阈值化处理的综合使用通常是建立机器视觉系统最有效的方法之一。
当然,在利用图像减法处理图像时,往往需要考虑背景的更新机制,尽量补偿因天气、光线等因素对图像显示效果造成的影响。
在MATLAB7.0中,使用imsubtract函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。
第五讲M A T L A B可视化(三)图像显示M a t l a b进行图像处理的步骤如下:【目录】一、图像文件格式 (2)1、调色板 (2)2、图像类型 (2)3、图像文件格式 (3)二、读图像和图像信息 (3)1、读取图像 (3)2、读取图像信息 (4)三、图像类别与数据格式 (5)四、图像显示 (7)1、i m s h o w(I,n) (7)2、i m s h o w(I,[l o w,h i g h]) (8)3、i m s h o w(B W) (9)4、i m s h o w(X,M A P) (12)5、i m s h o w(R G B) (13)6、i m s h o w f i l e n a m e (14)7、s u b i m a g e (14)五、保存图像 (15)1、i m w r i t e函数 (15)六、图像数据格式转换 (16)1、索引图像 (16)2、灰度图像 (16)3、真彩色图像 (16)4、二值图像 (17)【正文】一、图像文件格式1、调色板调色板是包含不同颜色的颜色表,每种颜色以红、绿、蓝三种颜色的组合来表示,图像的每一个像素对应一个数字,而该数字对应调色板中的一种颜色。
调色板的单元个数是与图像的颜色数相对应的,256色图像的调色板就有256个单元。
真彩图像的每个像素直接用R、G、B三个字节来表示颜色,因此不需要调色板。
2、图像类型3、图像文件格式二、读图像和图像信息1、读取图像函数i m r e a d可以从任何M a t l a b支持的图像文件格式中,以任意位深度读取一幅图像。
格式为:[X,M A P]=i m r e a d(F I L E N A M E,'F M T'),其中:F I L E N A M E-为需要读入的图像文件名称,F M T-为图像格式。
【例】图像读取演示[X1,M A P1]=i m r e a d('演示图像-1位黑白.t i f');[X2,M A P2]=i m r e a d('演示图像-8位灰度.t i f');[X3,M A P3]=i m r e a d('演示图像-256色.t i f');[X4,M A P4]=i m r e a d('演示图像-16位灰度.t i f');[X5,M A P5]=i m r e a d('演示图像-24位色.t i f');[X6,M A P6]=i m r e a d('演示图像-48位色.t i f');w h o sN a m e S i z e B y t e s C l a s sM A P10x00d o u b l e a r r a yM A P20x00d o u b l e a r r a yM A P3256x36144d o u b l e a r r a yM A P40x00d o u b l e a r r a yM A P50x00d o u b l e a r r a yM A P60x00d o u b l e a r r a yX1427x427182329l o g i c a l a r r a yX2427x427182329u i n t8a r r a yX3427x427182329u i n t8a r r a yX4427x427364658u i n t16a r r a yX5427x427x3546987u i n t8a r r a yX6427x427x31093974u i n t16a r r a yG r a n d t o t a l i s1824058e l e m e n t s u s i n g2558750b y t e s2、读取图像信息可以通过调用i m f i n f o函数获得与图像文件有关的信息,格式如下:I N F O=i m f i n f o(F I L E N A M E,'F M T')其中:返回的I N F O是M a t l a b的一个结构体。
24位真彩色转换为8位灰度图片(完整代码)分类:C#2011-03-04 09:29 4343人阅读评论(5) 收藏举报nullfloatgdi+byte图像处理image图像的灰度与二值化/maozefa/archive/2011/12/09/2281656.html图像的灰度化与二值化是图像处理中最常见的处理方法,也是很多图像处理方法的基础,如图像灰度统计、图像识别等。
图像的灰度化与二值化方法较多,处理过程也比较简单。
但切不可因其简单而忽视效率。
如常用的图像灰度计算公式:gray = red * 0.299 + green * 0.587 + blue * 0.114,如果在程序代码中直接套用了这个公式,因浮点数的缘故导致代码执行效率较低,如改为定点整数运算,可使执行效率大大提高。
下面是图像的灰度与二值化代码:// 定义ARGB像素结构typedef union{ARGB Color;struct{BYTE Blue;BYTE Green;BYTE Red;BYTE Alpha;};}ARGBQuad, *PARGBQuad;//---------------------------------------------------------------------------// 图像数据data灰度化VOID Gray(BitmapData *data){PARGBQuad p = (PARGBQuad)data->Scan0;INT offset = data->Stride - data->Width * sizeof(ARGBQuad);for (UINT y = 0; y < data->Height; y ++, (BYTE*)p += offset){for (UINT x = 0; x < data->Width; x ++, p ++)p->Blue = p->Green = p->Red =(UINT)(p->Blue * 29 + p->Green * 150 + p->Red * 77 + 128) >> 8;}}//---------------------------------------------------------------------------// 图像数据data灰度同时二值化,threshold阀值VOID GrayAnd2Values(BitmapData *data, BYTE threshold){PARGBQuad p = (PARGBQuad)data->Scan0;INT offset = data->Stride - data->Width * sizeof(ARGBQuad);for (UINT y = 0; y < data->Height; y ++, (BYTE*)p += offset){for (UINT x = 0; x < data->Width; x ++, p ++){if (((p->Blue * 29 + p->Green * 150 + p->Red * 77 + 128) >> 8) < threshold) p->Color &= 0xff000000;elsep->Color |= 0x00ffffff;}}}//---------------------------------------------------------------------------因本文使用的是32位图像数据,所以图像的二值化没有采用通常的赋值操作p->Blue = p->Green = p->Red = 0(或者255),而是采用了位运算。
目录摘要 (I)Abstract (II)1 图像文件格式及图像类型 (1)1.1 MATLAB支持的几种图像文件格式: (1)1.2 matlab几种图像类型 (2)2 图像的输入 (4)3.图像的输入 (6)3.1以图像形式输出(图像的显示) (6)3.1.1索引图像的显示 (6)3.1.2灰度图像的显示 (7)3.1.3二值图像的显示 (8)3.1.4 RGB图像的显示 (8)3.2以图像文件的形式输出 (9)4 图像的保存 (11)5 图像类型转换 (13)5.1 RGB转换成灰度图像 (13)5.2 灰度图像转换为索引图像 (13)5.3 灰度图像转化为二值图像 (14)5.4 RGB图像转化为索引图像 (15)6 课设总结 (16)参考文献 (17)附录 (18)附录1:图像显示代码 (18)附录2:图像转换代码 (19)MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB 本身就是功能强大的数据可视化工具,可以通过各种形式显示分析数据,例如灰度直方图、等高线、蒙太奇混合、像素分析、图层变换以及材质贴图等。
利用可视化的图形,不仅能够评估图形图像的特性,还能够分析图像中的色彩分布等情况。
本次课程设计介就是Matlab环境下的一些最基本的图像处理操作,如读取、保存和显示不同格式的图像,并进行图像格式的相互变换如索引图像、灰度图像、RGB图像和二值图像的相互转换。
关键词:MATLAB ;图像处理;图像转换The MathWorks Inc. MATLAB is a U.S. commercial mathematics software for algorithm development, data visualization, data analysis and numerical calculation senior technical computing language and interactive environment, including MATLAB and Simulink two parts. As a powerful scientific computing platforms, it can almost satisfy all the calculations that needs. MATLAB itself is a powerful tool of data visualization that can display data through various forms, such as graylevel histogram, contours, montage mixing, pixel analysis, the layer texture and transformation. With visual graphics, it can not only evaluate image characteristics, but also analyze the distribution of color image.The curriculum is designed to refer some basic image processing operations Matlab environment, such as read, save and display images of different formats and image formats such as index mutual transform images, grayscale images, RGB image and binary image conversion.Keyword: MATLAB;image operation;image exchange1 图像文件格式及图像类型1.1 MATLAB支持的几种图像文件格式:⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像专家组的图像压缩格式。