资源描述
图像处理新技术的问题解答和图像旋转放大的matlab程序
———————————————————————————————— 作者:
———————————————————————————————— 日期:
15
个人收集整理 勿做商业用途
图像处理新技术
通信工程学院 信息工程系09班 宋辉 52080924
1. 在网络上应采用什么格式的图片?叙述一下该图片文件格式结构
在网络上一般采用JPG/JPEG或GIF格式的图片,
[1] jpg全名应该是JPEG
JPEG:联合摄影专家组
JPEG 是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的jpg/jpeg是24位的图像文件格式,24 位颜色存储单个光栅图像.也是一种高效率的压缩格式,JPEG 是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的。文件格式是JPEG(联合图像专家组)标准的产物,是面向连续色调静止图像的一种压缩标准。其最初目的是使用64Kbps的通信线路传输720×576 分辨率压缩后的图像。通过损失极少的分辨率,可以将图像所需存储量减少至原大小的10%。由于其高效的压缩效率和标准化要求,目前已广泛用于彩色传真、静止图像、电话会议、印刷及新闻图片的传送上。
JPEG文件格式介绍
JPEG文件使用的数据存储方式有多种.最常用的格式称为JPEG文件交换格式(JPEG File Inter
change Format,JFIF)。而JPEG文件大体上可以分成两个部分:标记码(Tag)和压缩数据.
标记码由两个字节构成,其前一个字节是固定值0xFF,后一个字节则根据不同意义有不同数
值。在每个标记码之前还可以添加数目不限的无意义的0xFF填充,也就说连续的多个0xFF可以被
理解为一个0xFF,并表示一个标记码的开始.而在一个完整的两字节的标记码后,就是该标记码
对应的压缩数据流,记录了关于文件的诸种信息。
整个文件的大体结构
JFIF格式的JPEG文件(*.jpg)的一般顺序为:
SOI(0xFFD8)
APP0(0xFFE0)
[APPn(0xFFEn)]可选
DQT(0xFFDB)
SOF0(0xFFC0)
DHT(0xFFC4)
SOS(0xFFDA)
压缩数据
EOI(0xFFD9)
常用的标记有SOI、APP0、DQT、SOF0、DHT、DRI、SOS、EOI。
注意,SOI等都是标记的名称。在文件中,标记码是以标记代码形式出现。例如SOI的标记代
码为0xFFD8,即在JPEG文件中的如果出现数据0xFFD8,则表示此处为一个SOI标记。
本文附录列出一张完整的JPEG定义的标记表,供读者查阅.这里仅列出几个常用标记的标记
代码、占用字节长度和表示的意义。
[2] GIF格式介绍
〈Gif 数据流> ::= 头部 <逻辑视屏〉 〈数据〉* 尾记录
〈逻辑视屏〉 ::= 逻辑视屏描述块 [全局色表]
〈数据> ::= <成象块> |〈特殊用途块〉
〈成象块> ::= [图象控制扩充] <成象块〉
<成象块> ::= 〈基于表的图象> |纯文本扩充
<基于表的图象〉 ::= 图象描述符 [局部色表] 图象数据
〈特殊用途块> ::= 应用扩充 |注释扩充
gif数据流中的数据块可以分为三组:控制块、成象块和特殊用途块.
控制块,如:头部、逻辑视屏描述块、图像控制扩充和尾记录,包含用于控制处理数据流或设置硬件参数的信息.
成像块,如:图像描述符和纯文本扩充,包含用于在显示设备上成像的信息和数据。
特殊用途块,如:注释扩充和应用扩充,包含那些既不用于处理数据流也不用于在显示设备上成象的信息。
除了逻辑视屏描述块和全局色表之外,特殊用途块的作用域是整个数据流,而其他控制块的作用域是有限的,仅限于对他们后面的成象块起作用.特殊用途块不对任何控制块构成限制,它对于解码过程来说是透明的.成象块及扩充用于控制块及扩充的作用域限定。块的标记分为三段:除尾记录0x3b之外,0x00~0x7f用于成象块;0x80~0xf9用于控制块;0xfa~0xff用于特殊用途块。解码器通过识别块标记来处理块的作用域。
解释:
色表- gif格式利用色表来显示基于光栅的图像。色表分为全局色表和局部色表。全局色表对于那些没有设置局部色表的图像起作用。全局色表的作用域是整个数据流.局部色表对于紧接在其后的单张图像起作用。这两种色表都是可选的.
全局色表这东西是我们感兴趣的东西,它有点像png格式定义种的调色板,如果要修改gif图片的颜色,哈哈,修改这个全局色表就可以。如果有全局色表块,那么它一定从gif流的14个字节开始(头部6个 + 逻辑视频描述块7个).
以下是各数据块的说明,如果注明为版本89a的话,则说明这个数据块不会在87a版的协议中出现.
头部(6个字节)
标识符(3 字节) -——GIF
版本(3 字节) ——-87a (or 89a)
逻辑视屏描述块
逻辑屏幕宽(2字节)
逻辑屏幕高(2字节)
Packed Fields (1字节)
背景色索引(1字节)
象素高宽比(1字节)
Packed Fields说明:
全局色表标志 1 Bit
颜色方案 3 Bits
短标志 1 Bit
全局色表尺寸 3 Bits
解释:
背景颜色索引 - 为背景颜色指向全局色表。背景颜色是指那些没有背图像覆盖的视屏部分的颜色。若全局色表标志位置为0,则该字段也被值0,并且被忽略。
象素高宽比 — 用于计算原图像中像素的近似高宽比。如果该字段的值为非0,则象素的高宽比由下面的公式计算:
高宽比 = (象素高宽比 + 15) / 64
该字段的取值范围从最宽的比值4:1到最高的比值1:4,递增的步幅为1/64.
取值: 0 — 没有比值,1~255 - 用于计算的值。
全局色表标志 — 指示有没有全局色表,如果该标志位置1,则全局色表会紧接在该块之后出现。该位也用于解释是否选用背景颜色索引字段。若该位置1,则背景颜色索引字段的值将指向背景颜色表。
色彩方案 - 提供给原始图像的每个颜色的位数减1。这个值代表图像中所使用的整个调色板的大小,而不是图像中所使用的颜色的数量。例如,若该字段的值为3,则图像中所使用的调色板的每个色值占4位.
短标志 — 表明全局色表是否被排序。如果该位置1,则全局色表按照重要性递减的原则进行了排序.典型地,是按照颜色的使用频度进行递减排序,使用频度最高的颜色排在色表的最前面。这样便可帮助解码器选择最好的颜色子集来成象.
全局色表的尺寸 - 如果全局色表标志位置1,则该字段的值记录全局色表中所占用的字节数。
全局色表
该块包含一个按照字节顺序表示红-绿-蓝三元色的色表。全局色表用于那些没有局部色表的图像和纯文本扩充。在逻辑视屏描述块中的全局色表标志位置1时表示有全局色表。全局色表紧接在逻辑视屏描述块之后,占用的字节数为:
3*2^(全局色表尺寸+1)
数据组成格式为:
Red 0
Green 0
Blue 0
……
Red n
Green n
Blue n
图像控制扩充(版本-89a)
图像控制扩充包含在处理一个成象块时所需的参数。扩充只包括一个数据子块。该块是可选的。通常只有一个图像控制扩充在成象块之前。这也是在一个数据流中对成象控制扩充的唯一限制.
数据组成格式为:
扩充导入符(1字节)
图象控制标记(1字节)
块尺寸(1字节)
延长时间(2字节)
透明颜色索引(1字节)
块结束(1字节)
Packed Fields说明:
保留 3 Bits
配置方法 3 Bits
用户输入标志 1 Bit
透明颜色标志 1 Bit
解释:
扩充引入 — 用于识别一个扩充块的开始,该字段为固定值0x21.
图像控制标号 — 识别当前块是否为图形控制扩充。该字段为固定值 0xF9。
块尺寸 - 块中所包含的字节数。从块尺寸字段开始到快结束符(不含结束符).该字段包含固定值4。
配置方法 - 指示图像显示后的处理方法.值:
0 — 无指定的配置,解码器不需要做任何处理。
1 - 不做配值。图像将被留在原位置.
2 - 恢复背景颜色.图像所占的区域必须备恢复为背景颜色。
3 - 恢复以前的颜色。解码器需要将图像区域恢复为原来成象的颜色。
4—7 — 未定义。
用户输入标志 - 说明在继续处理之前是否需要用户输入。可以和输入延时一起使用。
透明标志 — 表明在透明索引字段是否给定透明索引。
延时 — 如果不为0, 该字段指定以1/100秒为单位的时延数.
透明索引 - 如果遇到透明索引,则显示设备的相关象素不被改变,继续处理下一个象素。
块终止符 — 这个0长度字段标志着图像控制扩充得结束。
图像描述符
每一幅图像必须在逻辑视屏描述块中所定义的逻辑视屏界限之内。图像描述符包含处理一个基于图像的表的必要参数。在这个块中给定的坐标是参照逻辑视屏的像素坐标.该块是一个成象块,在其前面可以选择加上一个或多个控制块,如:图像控制扩充,或者是后面接有局部色表;图像描述符后面总是图像数据。它是一幅图所必需的。一幅图像对应一个图像描述符。
数据组成格式为:
图象分隔符(1字节)
图象左坐标(2字节)
图象顶坐标(2字节)
图象宽度(2字节)
图象高度(2字节)
(2字节)
(1字节)
Packed Fields说明:
局部色表标志 1 Bit
隔行处理标志 1 Bit
短标志 1 Bit
保留 2 Bits
局部色表尺寸 3 Bits
解释:
图像分隔符 — 用于识别图像描述符的开始。取固定值0x2c
局部色表
该块包含一个按照红-绿-兰三原色的顺序排列的色表。该表作用于紧跟其后的图像数据。当局不色表标志位置1时,该表出现,且其后紧跟图像的描述符,它所包含的字节数等于
3*2^(局部色表尺寸+1)
数据组成格式为:
Red 0
Green 0
Blue 0
……
Red n
Green n
Blue n
基于表的图像数据
基于表的图像数据由一系列子块组成,每个子块最多255字节,包含一个为图中每个象素所指定的有效色表的索引。索引的顺序用LZW算法进行编码。
数据组成格式为:
LZW 最小编码尺寸(1字节)
图象数据数据子块(n字节)
解释:
LZW 最小编码尺寸:该字节用于决定在图像数据中用 LZW 编码最初的位数。
注释扩充(版本—89a)
注释扩充包含实际不属于gif数据流的文本信息。它适用于包括图像注释、描述或者任何其他非控制和非图像数据。注释扩充将被解码器忽略,或者被保留到以后处理。在任何情况下注释扩充也不能中断对数据流的处理。该块是可选的;在数据流中的出现量不加限制。
数据组成格式为:
扩充导入符(1字节)
注释标记(1字节)
注释数据数据子块(n字节)
块结束符(1字节)
解释:
扩充导入符 — 标识扩充的开始。该字段为固定值0x21。
注释标号 - 标示某块为注释扩充。该段为固定值0xFE。
注释数据 - 按照子块顺序,每个注释最少1字节最多255字节.序列结尾用块结束符标识。
块结束符 —用来标识注释扩充的结束。
纯文本扩充(版本-89a)
纯文本扩充包括纯文本数据和将数据显示为图像所必需的参数.文本数据将用7位可印刷ASCII码字符编码。文本数据用在块字段中定义的单元格字符元素来成象.每个字符用一个单元成象.该块使用全局色表。它可以被图形控制扩充来修改。该块为可选块。
数据组成格式为:
扩充导入符(1字节)
纯文本标记(1字节)
块尺寸(1字节)
文本格左坐标(2字节)
文本格顶坐标(2字节)
文本格宽度(2字节)
文本格高度(2字节)
字符单元宽度(1字节)
字符单元宽度(1字节)
文本前景色索引(1字节)
文本背景色索引(1字节)
纯文本数据数据子块(n字节)
块结束符(1字节)
解释:
扩充导入符 - 标识一个扩充块的开始。取固定值0x21.
纯文本标记 — 标识当前块为原文扩充。取固定值0x01。
块尺寸 — 扩充中的字节数,取固定值12.
文本格左位置 - 逻辑视屏的左边,用象素表示的左边列数,
文本格顶位置 — 逻辑视屏的上边,用象素表示的上边行数.
原文数据 - 子块序列,每个子块最少1字节最多255字节。该序列遇到块结束符时结束.
块结束符– 0,用来标志块结束.
应用扩充(版本-89a)
应用扩充包含应用说明信息;它遵守如下所述的扩充块的语法,块标记为0xff.
数据组成格式为:
扩充导入符(1字节)
扩充标记(1字节)
块尺寸(2字节)
应用标识符(8字节)
应用证明码(3字节)
应用数据数据子块(n字节)
块结束符(1字节)
解释:
扩充引入符 — 定义该块位扩充块。取固定值0x21.
应用扩充标记 — 标识该块为应用扩充块。取固定值0xFF。
块尺寸 - 指示该块中包含的字节数。取固定值11。
应用标识符 — 8格可印刷ASCII字符用来标识该应用所属的应用扩充。
应用证明码 - 3格字节的序列用于证明应用标识符。一个应用程序可以一种算法来计算一个二进制码来唯一地识别这个应用是否数于这个应用扩充。
尾记录
该块为一个单字段块,用来指示该数据流的结束。取固定值0x3b
2。 什么是BMP文件?叙述一下该图片文件格式结构。
BMP(全称Bitmap)是Window操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。 由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
BMP文件存储结构的格式可以在Windows中的WINGDI。h文件中找到定义.
BMP文件总体上由4部分组成,分别是位图文件头、位图信息头、调色板和图像数据,如表5-1所示。
表5—1 BMP文件的组成结构
位图文件头(bitmap-file header)
位图信息头(bitmap-information header)
彩色表/调色板(color table)
位图数据(bitmap-data)
下面来详细看一下每个组成部分的细节。
1.位图文件头(bitmap—file header)
位图文件头(bitmap—file header)包含了图像类型、图像大小、图像数据存放地址和两个保留未使用的字段。
打开WINGDI。h文件,搜索"BITMAPFILEHEADER"就可以定位到BMP文件的位图文件头的数据结构定义。
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
表5—2列出了tagBITMAPFILEHEADER中各字段的含义.
表5—2 tagBITMAPFILEHEADER结构
字 段 名
大小(单位:字节)
描 述
bfType
2
位图类别,根据不同的操作
系统而不同,在Windows
中,此字段的值总为‘BM’
bfSize
4
BMP图像文件的大小
bfReserved1
2
总为0
bfReserved2
2
总为0
bfOffBits
4
BMP图像数据的地址
2.位图信息头(bitmap-information header)
位图信息头(bitmap—information header)包含了位图信息头的大小、图像的宽高、图像的色深、压缩说明图像数据的大小和其他一些参数。
打开WINGDI.h文件,搜索"tagBITMAPINFOHEADER"就可以定位到BMP文件的位图信息头的数据结构定义。
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
表5-3列出了tagBITMAPFILEHEADER中各字段的含义。
表5-3 tagBITMAPFILEHEADER结构
字 段 名
大小
(单位:
字节)
描 述
biSize
4
本结构的大小,根据不同的操作系统而不同,在Windows中,此字段的值总为28h字节=40字节
biWidth
4
BMP图像的宽度,单位像素
biHeight
4
总为0
biPlanes
2
总为0
biBitCount
2
BMP图像的色深,即一个像素用多少位表示,常见有1、4、8、16、24和32,分别对应单色、16色、256色、16位高彩色、24位真彩色和32位增强型真彩色
biCompression
4
压缩方式,0表示不压缩,1表示RLE8压缩,2表示RLE4压缩,3表示每个像素值由指定的掩码决定
biSizeImage
4
BMP图像数据大小,必须是4的倍数,图像数据大小不是4的倍数时用0填充补足
biXPelsPerMeter
4
水平分辨率,单位像素/m
biYPelsPerMeter
4
垂直分辨率,单位像素/m
biClrUsed
4
BMP图像使用的颜色,0表示使用全部颜色,对于256色位图来说,此值为100h=256
biClrImportant
4
重要的颜色数,此值为0时所有颜色都重要,对于使用调色板的BMP图像来说,当显卡不能够显示所有颜色时,此值将辅助驱动程序显示颜色
3.彩色表/调色板(color table)
彩色表/调色板(color table)是单色、16色和256色图像文件所特有的,相对应的调色板大小是2、16和256,调色板以4字节为单位,每4个字节存放一个颜色值,图像 的数据是指向调色板的索引.
可以将调色板想象成一个数组,每个数组元素的大小为4字节,假设有一256色的BMP图像的调色板数据为:
调色板[0]=黑、调色板[1]=白、调色板[2]=红、调色板[3]=蓝…调色板[255]=黄
图像数据01 00 02 FF表示调用调色板[1]、调色板[0]、调色板[2]和调色板[255]中的数据来显示图像颜色。
在早期的计算机中,显卡相对比较落后,不一定能保证显示所有颜色,所以在调色板中的颜色数据应尽可能将图像中主要的颜色按顺序排列在前面,位图信息 头的biClrImportant字段指出了有多少种颜色是重要的。
每个调色板的大小为4字节,按蓝、绿、红存储一个颜色值。
打开WINGDI。h文件,搜索"tagRGBTRIPLE"就可以定位到BMP文件的调色板的数据结构定义.
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
表5-4列出了tagRGBTRIPLE中各字段的含义。
表5-4 tagRGBTRIPLE结构
字 段 名
大小(单位:字节)
描 述
rgbBlue
1
蓝色值
rgbGreen
1
绿色值
rgbRed
1
红色值
rgbReserved
1
保留,总为0
4.位图数据(bitmap—data)
如果图像是单色、16色和256色,则紧跟着调色板的是位图数据,位图数据是指向调色板的索引序号.
如果位图是16位、24位和32位色,则图像文件中不保留调色板,即不存在调色板,图像的颜色直接在位图数据中给出。
16位图像使用2字节保存颜色值,常见有两种格式:5位红5位绿5位蓝和5位红6位绿5位蓝,即555格式和565格式。555格式只使用了15 位,最后一位保留,设为0。
24位图像使用3字节保存颜色值,每一个字节代表一种颜色,按红、绿、蓝排列.
32位图像使用4字节保存颜色值,每一个字节代表一种颜色,除了原来的红、绿、蓝,还有Alpha通道,即透明色。
如果图像带有调色板,则位图数据可以根据需要选择压缩与不压缩,如果选择压缩,则根据BMP图像是16色或256色,采用RLE4或RLE8压缩算 法压缩。
RLE4是压缩16色图像数据的,RLE4采用表5—5所示方式压缩数据.
表5—5 RLE4压缩方法
方 案
1字节
2字节
3字节
4字节
N字节
A
重复次数
颜色索引
B
设为0
后面有效的
颜色索引数
颜色索引
颜色索引
颜色索引…
3具备什么条件才能进行数据压缩:数据存在冗余 (重复数据、可忽略数据)、不敏感因素 (颜色、亮度、频率、细节)、数据传输与存储空间的限制 (压缩 → 传输或存储 → 解压缩)
4冗余指的是什么:冗余- 信息所具有的各种性质中多余的无用空间。
指出三种冗余:1空间冗余, 2 时间冗余,3 结构冗余。
5 指出霍夫曼压缩编码的特点:1 编码长度可变,压缩与解压缩较慢, 2 硬件实现困难, 3 编码效率取决于信号源的数据出现概率。
6 编写一个程序,将一个图像放大3倍
源程序如下:
%Matlab Program1-1
filename=input();
Image=imread(filename)
Function ImOut=myzoom2(Image)
A=double(Image);
[a,b]=size(A);
x=3;
for t=0:x—1
for k=1:a
for l=1:b
if t==x—1
temp(k*x—t,l)=A(k,l);
else
temp(k*x-t,l)=0;
end
end
end
end
for t=0:x-1
for k=1:a*x
for l=1:b
if t==2
ImOut(k,l*x—t)=temp(k,l);
else
ImOut(k,l*x-t)=0;
end
end
end
end
for t=1:x—1
for k=1:a—1
for l=1:b*x
ImOut(k*x—t+1,l)=ImOut(k*x-x+1,l)+。。.
(ImOut((k+1)*x-x+1,l)-ImOut(k*x-x+1,l))/x*(x-t);
end
end
end
for t=1:x-1
for k=1:a*x
for l=1:b—1
ImOut(k,l*x—t+1)=ImOut(k,l*x—x+1)+...
(ImOut(k,(l+1)*x-x+1)—ImOut(k,l*x-x+1))/x*(x—t);
end
end
end
return个人收集整理,勿做商业用途个人收集整理,勿做商业用途
7. 编写一个程序,将一个图像旋转45度
源程序如下:
%Matlab Program1-2
filename=input();
Image=imread(filename);
Image=rgb2gray(Image);
A=45;
Angle=3.14*A/180;
[X,Y]=size(Image);
imshow(Image);
LeftTop(1,1)=—(Y-1)*sin(Angle);
LeftTop(1,2)=(Y—1)*cos(Angle);
LeftBottom(1,1)=0;
LeftBottom(1,2)=0;
RightTop(1,1)=(X-1)*cos(Angle)—(Y-1)*sin(Angle);
RightTop(1,2)=(X—1)*sin(Angle)+(Y—1)*cos(Angle);
RightBottom(1,1)=(X-1)*cos(Angle);
RightBottom(1,2)=(X-1)*sin(Angle);
Xnew=max([LeftTop(1,1),LeftBottom(1,1),RightTop(1,1),RightBottom(1,1)])—min([LeftTop(1,1),LeftBottom(1,1),RightTop(1,1),RightBottom(1,1)]);
Ynew=max([LeftTop(1,2),LeftBottom(1,2),RightTop(1,2),RightBottom(1,2)])—min([LeftTop(1,2),LeftBottom(1,2),RightTop(1,2),RightBottom(1,2)]);
ImageNew=zeros(round(Xnew),round(Ynew))+255;
for indexX=0:(X—1)
for indexY=0:(Y-1)
ImageNew(round(indexX*cos(Angle)—indexY*sin(Angle))+round(abs(min([LeftTop(1,1),LeftBottom(1,1),RightTop(1,1),RightBottom(1,1)])))+1,1+round(indexX*sin(Angle)+indexY*cos(Angle))+round(abs(min([LeftTop(1,2),LeftBottom(1,2),RightTop(1,2),RightBottom(1,2)]))))=Image(indexX+1,indexY+1);
end
end本文为互联网收集,请勿用作商业用途本文为互联网收集,请勿用作商业用途
%显示
figure;
imshow((ImageNew)/255)
展开阅读全文