基于arm嵌入式图像处理系统设计与实现论文内容摘要:
滤波器的主要功能是使 拥有不同灰度的点看起来更接近于它的临近值。 中值滤波器使用非常普遍,这是因为对于一定类型的随机噪声,它提供了一种优秀的去噪能力,比小尺寸的线性平滑滤波器的模糊程度明显要低。 中值滤波器对处理脉冲噪声 (椒盐噪声 )非常有效,因为这种噪声是以黑白点叠加在图像上的。 《基于 ARM 嵌入式图像处理系统设计与实现》 第 10 页 共 31 页 尽管在图像处理中,中值滤波器是用得最广泛的统计滤波器,但这并不是说它是唯一的。 所谓中值就是一系列像素值的第 50%个值,当我们取 100%个值,此时就是最大滤波器,相反,当取 0%的值时就变成了最小滤波器。 图像缩放(平移以及转置) 一般采用插值法,有 如下几种插值算法 : 最邻近插值(近邻取样法): 最临近插值的的思想很简单。 对于通过反向变换得到的的一个浮点坐标,对其进行简单的取整,得到一个整数型坐标,这个整数型坐标对应的像素值就是目的像素的像素值,也就是说,取浮点坐标最邻近的左上角点(对于 DIB 是右上角,因为它的扫描行是逆序存储的)对应的像素值。 可见,最邻近插值简单且直观,但得到的图像质量不高。 双线性内插值: 对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为 (i+u,j+v),其中i、 j 均为非负整数, u、 v为 [0,1)区间的浮点数,则这个像素得值 f(i+u,j+v) 可由原图像中坐标为 (i,j)、 (i+1,j)、 (i,j+1)、 (i+1,j+1)所对应的周围四个像素的值决定,即: f(i+u,j+v) = (1u)(1v)f(i,j) + (1u)vf(i,j+1) + u(1v)f(i+1,j) + uvf(i+1,j+1) 其中 f(i,j)表示源图像 (i,j)处的的像素值,以此类推 这就是双线性内插值法。 双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。 由于双线性插值具有低通滤波器的性质,使高频分量受损,所以 可能会使图像轮廓在一定程度上变得模糊。 三次卷积法能够克服以上两种算法的不足,计算精度高,但计算量大,他考虑一个浮点坐标 (i+u,j+v)周围的 16 个邻点,目的像素值 f(i+u,j+v)可由如下插值公式得到: f(i+u,j+v) = [A] * [B] * [C] [A]=[ S(u + 1) S(u + 0) S(u 1) S(u 2) ] ┏ f(i 1, j1) f(i1, j+0) f(i1, j+1) f(i1, j+2) ┓ [B]=┃ f(i+0, j 1) f(i+0, j+0) f(i+0, j+1) f(i+0, j+2) ┃ 《基于 ARM 嵌入式图像处理系统设计与实现》 第 11 页 共 31 页 ┃ f(i+1, j 1) f(i+1, j+0) f(i+1, j+1) f(i+1, j+2) ┃ ┗ f(i+2, j 1) f(i+2, j+0) f(i+2, j+1) f(i+2, j+2) ┛ ┏ S(v + 1) ┓ [C]=┃ S(v + 0) ┃ ┃ S(v 1) ┃ ┗ S(v 2) ┛ ┏ 1 2*Abs(x)^2+Abs(x)^3 , 0=Abs(x)1 S(x)={ 48*Abs(x)+5*Abs(x)^2Abs(x)^3 , 1=Abs(x)2 ┗ 0 , Abs(x)=2 S(x)是对 Sin(x*Pi)/x 的逼近( Pi是圆周率 —— π )最邻近插值(近邻取样法)、双线性内插值、三次卷积法 等插值算法对于旋转变换、错切变换、一般线性变换 和 非线性变换 都适用。 《基于 ARM 嵌入式图像处理系统设计与实现》 第 12 页 共 31 页 5 程序主要源代码分析 图像数据存储的主程序如下 : FILE*file=fopen(,wb)。 writebmpfileheader(file)。 /*写文件头函数 */ writebmpinfoheader(file)。 /* 写信息头函数 */ writeimagedata(file)。 /* 写图像数据函数 */ fclose(fi le)。 写文件头和写信息头函数比较简单,这里 bfSize 为 230454。 b iWidth,biHeight为 320,240。 bi Sizelmage 为 230400。 biXPelsPerMeter,bi YPelsPerMeter,biClrUsed,biCIrImportant 均为 Oa 以下给出 writeimagedata(file)II 数的原型 : voidwriteimagedata(FILE* file) { Int datapointer。 Int mydata。 for (int i= 0。 i = 239。 i++)/*共 240 行 */ datapointer data+(239i )*3 20。 /*data 为采集映射时图像数据首地址,计算每一要写入的行在内存中的首地址*/ for(int j= 0。 j = 31 9。 j + + )/* 共 320 列 */ { mydata=*( datapointer+j)。 fwrite(amp。 mydata,1, 1, fil e)。 /*写入一行数据 */ } } } 《基于 ARM 嵌入式图像处理系统设计与实现》 第 13 页 共 31 页 图像平滑模块 Typedef struct {unsigned short bfType。 Unsigned bfSize。 Unsigned short bfReserved 1。 Unsigned short bfReserved 2。 Unsigned bfOffBits。 }BMPHEADER。 BMPHEADER header。 Typedef struct {unsigned biSize。 unsigned biWidth。 unsigned biHeight。 unsigned short biplanes。 unsigned short biBitCount。 unsigned biCompression。 unsigned biSizelmage。 unsigned biXpelsPerMeter。 unsigned biYpelsPerMeter。 unsigned biClrUsed。 unsigned biClrUsed。 unsigned biClrImportant。 }BMPINFOHEADER。 BMPINFOHEADER infobeader。 在进行处理之前,先读取文件信息,假设我们将采集到的数据存放成 文件; FILE*fp。 Fp=fopen(“ ” ,“ rb” )。 fread(amp。 (),2,1,fp)。 《基于 ARM 嵌入式图像处理系统设计与实现》 第 14 页 共 31 页 fread(amp。 (),4,1,fp)。 fread(amp。 (),2,1,fp)。 fread(amp。 (),4,1,fp)。 fread(amp。 ((BMPINFOHEADER),1,fp)。 接下来,将图像数据存入我们的内存中,并将图像数据灰度化: Unsigned char*prodata。 Unsigned char*middledata。 Int size=。 Prodata=malloc(size)。 Fread(prodata,1,size,fp)。 Fclose(fp)。 For(z=0,z。 z++) {middledata[z]=(unsigned char)(*prodata+z+2)*3 +(unsigned char )(*(prodata+z+1)* + (unsigned char)(*prodata +z)*)。 Z++。 Middledata[z]=middledata[z1]。 Z++。 Middledata[z]=middledata[z1]。 } Memcpy(prodata,middledata,)。 以下是高斯平滑的主程序: Double Template[9]。 /*运算模版 */ Double Coef=(double)()。 /*模版均值 */ /*模版个稀疏声明 */ Template[0]=。 Template[1]=。 Template[2]=。 Template[3]=。 Template[4]=。 Template[5]=。 Template[6]=。 Template[7]=。 Template[8]=。 《基于 ARM 嵌入式图像处理系统设计与实现》 第 15 页 共 31 页 For(x=1。 xXSaveDim1。 x++) {for(y=1。 yYSaveDim1。 y++) {/*XsaveDim,YsaveDim 为图像存储尺寸, x, y 从 1 开始并且以 XsaveDim1,YsaveDim1结束,是为了去除边界 */ for( j=1。 j3。 j++) {for(k=0。 k3。 k++) {/*j, k 为模版内部循环变量 */ Result+=(*(prodata+GetPixelOffset(x=j1,y+k1)))*Template[3*j+k]。 } }/*GetPixelOffset 为我们自己定义的函数,返回对应 x,y坐标的像素在数据空间中的存储位置,返回值为 (XSaveDim*y+x)*()*/ Result*=Coed。 If(Result255) {Result=255。 } Z=GetPixelOffset(x,y)。 Middledata[z]=(unsigned char)(Result+)。 Z++。 Middledata[z]=middledata[z1]。 Z++。 Middledata[z]=middledata[z2]。 } } 图像平移主要代码 int Main(int argc, char **argv) { ARMTargetInit()。 OSInit()。 uHALr_ResetMMU()。 LCD_Init()。 《基于 ARM 嵌入式图像处理系统设计与实现》 第 16 页 共 31 页 LCD_printf(LCD initialization is OK\n)。 LCD_printf(320 x 2。基于arm嵌入式图像处理系统设计与实现论文
相关推荐
和片外存储器技术支持快速突发 (Burst)访问模式的开发。 ARM7TDMI有 4种存储器周期的基本类型 :空闲周期、非顺序周期、顺序周期和协处理器寄存器传送周期。 4)嵌入式 ICERT逻辑: 嵌入式 ICERT逻辑为 ARM7TDMI核提供了集成的在片调试支持。 可以使用嵌入式 ICERT逻辑来编写断点或观察断点出现的条件。 嵌入式 ICERT逻辑包含调试通信通道 (DCC
3。 31 编程接口 32 数据传输的软件实现 33 本论文的通信流程图 34 服务端的网络编程 34 客户端的 Socket 编程 37 论文总结 40 参考文献: 41 致谢 43 清华 大学 2020 届毕业 设计说明书 第 1 页 共 43 页 1 绪论 研究背景 作为 种无线联网技术, WiFi 已经得到了业界的关注。 WiFi 终端涉及手机、 PC(笔记本电脑 )、平板电视、数码相机
} /* Check if the Pin Reset flag is set */ else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET) { . printf(\r\n\n External Reset occurred....)。 } printf(\r\n No need to configure RTC....)。 . /* Wait
用寄存器,指令执行速度更快。 大多数数据操作都在寄存器中完成。 寻址方式灵活简单,执行效率高。 指令长度固定。 ARM 体系结构简介 1. ARM 微处理器工作状态 ARM微处理器的工作状态一般有两种,并可在两种状态之间切换。 第一种为 ARM状态,此时处理器执行 32 位的字对齐的 ARM指令。 10 第二种为 Thumb 状态,此时处理器执行 16 位的、半字对齐的
个脉冲计数功能及一个带可选频率的 PWM 通道。 ⑹实时时钟( RTC) 实时时钟提供一组连续运行的计数器,这些计数器由低功耗的 32kHZ的振荡器驱动。 RTC 可作为通用的基准时间( timebase)使用,也可用于时钟、日历或报警。 当 STR71x在 Standby 模式下, RTC 可以继续工作,此时, RTC 由低功耗电源稳压器供电, 32kHz XXX 大学毕业设
、下载、删除等。 利用这些工具,用户可以方便地从多媒体数据库中有选择地获取自己所需的与对象有关的内容,并提供了内容的操作和位流编辑功能,可应用于交互式家庭购物,淡入淡出的数字化效果等。 MPEG4提供了高效的自然或合成的多媒体数据编码方法。 它可以把自然场景或对象组合起来成为合成的多媒体数据。 ( 2) 高效的压缩性 MPEG4 基于更高的编码效率。 同已有的或即将形成的其它标准相比