使用Matlab将24位图转为8位图的方法
MATLAB图像处理

附2
MATLAB的数字图像处理
●所谓数字图像处理(digital image processing),就是 利用计算机对图像进行去除噪声、增强、恢复、分割、
提取特征等的理论、方法和技术。
1 数字图像的基本概念
● 图像分辨率 清晰度 绝对清晰度 视觉效果
● Resolution (分辨率)单位
dpi (display pixels / inch)
汉王指纹考勤机
指纹识别系统
纹形(箕形、斗形、弓形) 模式区 全局特征(描述了 指纹的总体结构) 核心点 三角点
指纹的基本特征
纹数
局部特征(指指纹纹乱上的节点的特征,这 些特征提供了指纹唯一性的确认信息)
指纹识别系统
纹形可以分为箕形、弓形、斗形,如下图所示。其他的 指纹图案都是基于这三种基本图案
箕形纹
●
位图
matlab图像数据类型转换

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型。
8、24、32位图位数的相互转换

利达光电股份有限公司 | 彭军
9
2010 年 4 月 23 日
位图位数的转换
namespace BitmapConverter { class NeverBitmap { struct BitmapFileHeader {//位图文件头 public UInt16 bfType; public UInt32 bfSize; public UInt16 bfReserved1; public UInt16 bfReserved2; public UInt32 bfOffBits; } struct BitmapInfoHeader {//位图信息头 public UInt32 biSize; public UInt32 biWidth; public UInt32 biHeight; public UInt16 biPlanes; public UInt16 biBitCount; public UInt32 biCompression; public UInt32 biSizeImage; public UInt32 biXPelsPerMeter; public UInt32 biYPelsPerMeter; public UInt32 biClrUsed; public UInt32 biClrImportant; } struct RGBQUAD {//位图调色板项 public byte rgbBlue; public byte rgbGreen; public byte rgbRed; public byte rgbReserved; }
利达光电股份有限公司 | 彭军 5
2010 年 4 月 23 日
位图位数的转换
return; } if (tbxDirectory.Text.Trim() == tbxSaveDir.Text.Trim()) { MessageBox.Show("两个目录不能相同!", "错误"); return; } progressBar1.Value = 0; progressBar1.Minimum = 0; progressBar1.Maximum = files.Length; for (int i = 0; i < files.Length; i++) { ListViewItem lvi = listView1.Items[i]; UInt16 choose = Convert.ToUInt16(cbxBitCount.Text.Trim().ToString()); string savepath=tbxSaveDir.Text.Trim() +"\\"+ GetFileName(lvi.SubItems[0].Text.Trim()); NeverBitmap nb = new NeverBitmap(lvi.SubItems[0].Text.Trim(),savepath); if (lvi.SubItems[1].Text == cbxBitCount.Text) { progressBar1.Value++; lvi.SubItems[0].Text += " 无需转换"; continue; } else if (lvi.SubItems[1].Text == "8") { switch (choose) { case 24: nb.Bit8To24(); break;
matlab数据类型及转换

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,:))。
matlab实现图像的放大及旋转

实验三图像的几何操作一、图像的基本运算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函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。
C#图片灰度处理(位深度24→位深度8)

/// <summary>
/// 将源图像灰度化,并转化为8位灰度图像。
/// </summary>
/// <param name="original"> 源图像。 </param>
/// <returns> 8位灰度图像。 </returns>
posScan += offset;
}
// 内存解锁
Marshal.Copy(rgbValues, 0, ptr, scanBytesLength);
original.UnlockBits(bmpData); // 解锁内存区域
{
blue = rgbValues[posScan];
green = rgbValues[posScan + 1];
red = rgbValues[posScan + 2];
int width = bmpData.Width;
int height = bmpData.Height;
int stride = bmpData.Stride; // 扫描线的宽度,比实际图片要大
// 分别设置两个位置指针,指向源数组和目标数组
int posScan = 0, posDst = 0;
byte[] rgbValues = new byte[scanBytesLength]; // 为目标数组分配内存
public static Bitmap RgbToGrayScale(Bitmap original)
{
if (original != null)
Matlab数据类型及转换
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;
c = N{1,2}
d = N{1,1}(2,2)
9、函数句柄
函数句柄是用于间接调用一个函数的Matlab值或数据类型。在调用其它函数时可以传递函数句柄,也可在数据结构中保存函数句柄备用。通过命令形式 fhandle = @functionname 可以创建函数句柄,例如 trigFun=@sin,或匿名函数sqr = @(x) x.^2;。
图像数据类型转换函数
默认情况下,matlab将图像中的数据存储为double型,即64位浮点数;matlab还支持无符号整型(uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。
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')分别返回双精度浮点和单精度浮点的最小值。
MATLAB图像显示与格式转换
第五讲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位灰度图片(完整代码)
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),而是采用了位运算。
MATLAB仿真软件进行图像的输入、输出和格式变换
目录摘要 (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):一种称为联合图像专家组的图像压缩格式。