




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章 图像的合成本章要点: þ 图像的差影法 þ 图像的逻辑运算10.1图像的差影法本小节介绍:ø 图像的差影法基本理论ø 图像加运算ø 图像减运算10.1.1图像的差影法基本理论差影法实际是对图像进行代数运算的一种不同的叫法,代数运算是指对两幅输入图像进行点对点的加、减、乘、除计算而得到输出图像的运算。而对于相加和相乘的情况则可能不止有两幅图像参加运算。下面我们来看一看这四种代数运算的数学表达式:加运算 c(x,y)=a(x,y)b(x,y) (101)减运算 c(x,y)=a(x,y)b(x,y) (102)乘运算 c(x,y)=a(x
2、,y)×b(x,y) (103)除运算 c(x,y)=a(x,y)÷b(x,y) (104)其中a(x,y)和b(x,y)为输入图像,而c(x,y)为输出图像。以上四种运算在实际中有很重要的作用。图像相加的一个重要应用就是对同一场景的多幅图像求平均值,它可以有效地降低随机噪声的影响,这是因为对于一幅有噪声的图像s(x,y),可以看成是由原始无噪声的图像f(x,y)和噪声g(x,y)叠加而成的,即 s(x,y)=g(x,y)+f(x,y) (105)如果叠加在图像上的噪声g(x,y)是非相关、具有零均值的随机噪声时,那么,把针对同一目标物在相同条件下,做m次重复摄取的图像相加
3、,取平均值作为输出图像,即: (106)这样输出的平均图像(x ,y)中随机噪声的含量,比单幅图像s(x,y)的噪声含量大大削弱了,这样,便达到了使图像变平滑的处理目的。图像相减可用于去除一幅图像中所不需要的图案,也可以用于检测同一场景的两幅图之间的变化,例如检测物体运动。对于同一场景的两幅图s(x,y)、f(x,y),因为是同一场景,所以目标图像的背景是大致相同的,当两幅图进行相减时,相同位置的背景点因为灰度值相同,结果变成了黑点,而目标图像因为位置不同,所以相减后值不为0,这样一来,处理后的图像就只在两个目标图像的位置有像素点,背景变为全黑,此时,我们计算两个目标之间的距离就非常简单了,这
4、也就达到了检测物体运动的目的。乘法和除法在数字图像处理中一般应用得不多,但它们的用途也很重要。数字化对一幅图像各点的敏感程度可能有变化,乘和除运算有可能纠正这种影响。除运算可产生对颜色和多光谱图像分析十分重要的比率图像,而用一幅图像乘某一图像可以遮住该图像中的某些部分,仅留下感兴趣的物体。10.1.2图像加运算1. 理论基础现在来具体分析一下加运算为什么能消减噪声。假定同一目标物在相同条件下,做m次重复摄取的图像s(x,y),其中含有的噪声g(x,y)是非相关、具有零均值的随机噪声,那么图像s(x,y)可以看成是由原始无噪声的图像f(x,y)和噪声g(x,y)叠加而成的,即 s(x,y)=g(
5、x,y)+f(x,y)对于图像中任意点,我们定义其功率信噪比为p(x,y)= ,表示期望算符。因为我们假定每幅图的噪声都是互不相干的、噪声均值等于0的随机噪声,这就意味着全部满足: (107) (ij) (108)和 (ij) (109)如果对m幅图像作加法后平均化,可得: (1010)则功率信噪比为: (1011) 根据公式108、109可以将公式1011变形为: (1012)现在我们注意到式(1012)的分母的第二项等于0(因为107)而且,因为m 个噪声样本来自相同的样本集,分母的第一项中求和项都相同。所以有: (1013)因此,对m幅图像进行平均,使图像中每一点的功率信噪比提高了m倍。
6、幅度信噪比是功率信噪比的开平方,即: (1014)随着图像的数目增多,其消除噪声的效果也就越来越好。下面介绍一个简单的加运算的思路,这里只计算两幅图的加法。首先将两幅图的像素读到内存缓冲区中,将两幅图的对应位置相同的像素点的灰度值相加,如果结果大于255,则置为255,否则将结果存在内存中,当所有像素点都处理完后,将内存中的结果复制回原图像。 2实现步骤(1)获取第一幅图的首地址,及图像的高和宽。(2)开辟一块内存缓冲区,并初始化为255。(3)选取进行加运算的第二幅图并获取第二幅图的首地址,及图像的高和宽。(4)将两幅图的对应像素点进行加运算,结果大于255,则置为255,不大于将结果保存下
7、来。(5)将内存中的结果复制回第一幅图的数据区。3. 编程代码/* *函数名称:add(lpbyte p_data, lpbyte p_databk,int wide,int height) *函数类型:void *参数说明:p_data 原图像首地址* p_databk 背景图像首地址* wide,height 原图像的高和宽 *功能:对图像进行加运算。 */ void tuxianghechengdib:add(lpbyte p_data, lpbyte p_databk,int wide,int height) int i,j; /循环变量lpbyte lpsrc; /原图像像素指针 l
8、pbyte lpdst; /目标像素指针 lpbyte lpsrcbk; /背景像素指针 lpbyte temp=new bytewide*height; /新图像缓冲区/初始化新分配的内存为255memset(temp,255,wide*height);/进行每个像素的加运算 for(j=1;j<height-1;j+)for(i=1;i<wide-1;i+)/获得原像素指针lpsrc=p_data+wide*j+i;/获得目标像素指针lpdst=temp+wide*j+i;/获得背景像素指针lpsrcbk=p_databk+wide*j+i;/进行加运算 if(*lpsrc+*
9、lpsrcbk)>255) *lpdst=255; else *lpdst=(*lpsrc+*lpsrcbk); memcpy(p_data, temp,wide*height); /复制处理后的图像delete temp; 4. 处理效果图 (a)原图 (b)背景 (c)相加效果图图10-1相加效果图由以上三幅图可以看出,加运算将两幅不同的图重叠起来,并使原来图中较暗的部分变亮了。10.1.3图像减运算1. 理论基础减运算的目的是为了从图像中去除不需要的图像,只保留所关心的图像,比如医生想观察药物在人身体中的流动情况,但是由于脊椎等的影响,图像很模糊,为了获得清晰的图像,我们可以先获得
10、一张病人未吃药的图像,用带有药物的图像减去没有药物的图像,因为是一个人的影像,所以脊椎等干扰图像是相同的,减处理后,就只剩下药物的影像了。利用这种原理,也可以用来识别物体在特定区域的运动情况。本节介绍的是减运算的基本原理,运算的两幅图要求完全对准,这在实际中是很难达到的。在这里我们就不讨论了。 2. 实现步骤(1)获取需要提取图像的数据首地址,及图像的高和宽。(2)开辟一块内存缓冲区,初始化为255。(3)选择背景图像,并获取其首地址,及图像的高和宽。(4)用第一幅图像的每一个像素点的灰度值减去背景图像的相应像素的灰度值,结果小于0,则该点置为0,不小于0,则保存在缓冲区中。(5)将内存中的结
11、果复制回第一幅图的数据区。3. 编程代码 /* *函数名称:sub(lpbyte p_data, lpbyte p_databk,int wide,int height) *函数类型:void *参数说明:p_data 原图像首地址* p_databk 背景图像首地址* wide,height 原图像的高和宽 *功能:对图像进行减运算。 */ void tuxianghechengdib:sub(lpbyte p_data, lpbyte p_databk, int wide, int height) int i,j; /循环变量 lpbyte lpsrc; /原图像像素指针lpbyte lp
12、dst; /目标像素指针lpbyte lpsrcbk; /背景像素指针lpbyte temp=new bytewide*height; /新图像缓冲区/初始化新分配的内存为255memset(temp,255,wide*height);/进行每个像素的减运算for(j=1;j<height-1;j+)for(i=1;i<wide-1;i+)/获得原像素指针 lpsrc=p_data+wide*j+i; /获得目标像素指针 lpdst=temp+wide*j+i; /获得背景像素指针 lpsrcbk=p_databk+wide*j+i; /进行减运算 if(*lpsrc-*lpsrc
13、bk)<0) *lpdst=0; else *lpdst=(*lpsrc-*lpsrcbk);memcpy(p_data, temp,wide*height); /复制处理后的图像delete temp; 4. 处理效果图 (a)原图 (b)背景 (c)相减效果图图10-2 相减效果图很明显减运算将图像进行了分离。10.2图像的逻辑运算逻辑运算是数学中关于集合的一类运算,其基本运算是交、并、补三种。与运算的法则是当两个值都是1时两个数与的结果等于1,其它全为0。或运算的法则是当两个值都是0时两个数或的结果等于0,其它全为1。非运算的法则是当数值为0结果为1,当数值为1结果为0。与或运算是
14、将两个数先进行与运算,再进行或运算,与非方法类似。异或运算的法则是当运算的两个数取值不同,结果为1,相同则为0。本节介绍六种运算是用来处理两幅二值图:ø 与运算ø 或运算ø 非运算ø 或非运算ø 与非运算ø 异或运算10.2.1与运算1.实现步骤(1)把二值图像转化为0、1值;(2)循环两幅图像的像素点;(3)像素点相与;(4)把0、1值转化为二值图像数据,为0的像素置0,为1的像素置255。2. 编程代码/* *函数名称:yuyunsuan(lpbyte p_data, lpbyte p_databk,int wide,int he
15、ight) *函数类型:void *参数说明:p_data 原图像首地址* p_databk 背景图像首地址* wide,height 原图像的高和宽 *功能:对图像进行与运算。 */void tuxianghechengdib:yuyunsuan(lpbyte p_data, lpbyte p_databk, int wide, int height)int i,j; /循环变量lpbyte temp1=new bytewide*height; /新图像缓冲区 lpbyte temp2=new bytewide*height; memset( temp1,0,wide*height); me
16、mset( temp2,0,wide*height);/对原图二值化for(j=0;j<height;j+)for(i=0;i<wide;i+)if(p_datawide*j+i>128) temp1wide*j+i=1; /对背景二值化for(j=0;j<height;j+)for(i=0;i<wide;i+)if(p_databkwide*j+i>128) temp2wide*j+i=1; /进行每个像素的与运算 for(j=1;j<height-1;j+)for(i=1;i<wide-1;i+) if( temp2wide*j+i=1&am
17、p;& temp1wide*j+i=1) temp1wide*j+i=255;else temp1wide*j+i=0; memcpy(p_data, temp1,wide*height); /复制处理后的图像delete temp1;delete temp2;4.处理效果图 (a)原图 (b)背景 (c) 与运算效果图图10-3与运算效果图可以看出与运算在对图像进行二值化的同时保留了原图和背景中相同的部分,去除了不同的部分。10.2.2或运算1.实现步骤(1)把二值图像转化为0、1值;(2)循环两幅图像的像素点;(3)两像素点同时为0置0,否则置1;(4)把0、1值转化为二值图像数据
18、,为0的像素置0,为1的像素置255。2.编程代码/* *函数名称:huoyunsuan(lpbyte p_data, lpbyte p_databk,int wide,int height) *函数类型:void *参数说明:p_data 原图像首地址* p_databk 背景图像首地址* wide,height 原图像的高和宽 *功能:对图像进行或运算。 */ void tuxianghechengdib:huoyunsuan(lpbyte p_data, lpbyte p_databk, int wide, int height) int i,j; /循环变量lpbyte temp1=n
19、ew bytewide*height; /新图像缓冲区 lpbyte temp2=new bytewide*height; memset( temp1,0,wide*height); memset( temp2,0,wide*height);/对原图二值化for(j=0;j<height;j+)for(i=0;i<wide;i+)if(p_datawide*j+i>128) temp1wide*j+i=1; /对背景二值化for(j=0;j<height;j+)for(i=0;i<wide;i+)if(p_databkwide*j+i>128) temp2w
20、ide*j+i=1; /进行每个像素的或运算 for(j=1;j<height-1;j+) for(i=1;i<wide-1;i+) if( temp2wide*j+i=0&& temp1wide*j+i=0) temp1wide*j+i=0;else temp1wide*j+i=255; memcpy(p_data, temp1,wide*height); /复制处理后的图像delete temp1;delete temp2;4处理效果图 (a)原图 (b)背景 (c) 或运算效果图图10-4 或运算效果图通过观察可以看出或运算的效果和加运算有些近似,只是或运算对
21、图像进行了二值化。10.2.3非运算1.实现步骤(1)把二值图像转化为0、1值;(2)循环两幅图像的像素点;(3)像素点值为1置0,为0置1;(4)把0、1值转化为二值图像数据,为0的像素置0,为1的像素置255。2.编程代码/* *函数名称:feiyunsuan() *函数类型:void *功能:对图像进行非运算。 */ void tuxianghechengdib:feiyunsuan()int i,j; /循环变量byte* p_data;/图像指针int wide,height; /原图的高和宽p_data=getdata();wide=getwidth();height=gethei
22、ght();lpbyte p_temp1=new bytewide*height; /新图像缓冲区 memset(p_temp1,0,wide*height); /初始化为0/对原图二值化for(j=0;j<height;j+)for(i=0;i<wide;i+)if(p_datawide*j+i>128)p_temp1wide*j+i=1; /进行每个像素的非运算 for(j=1;j<height-1;j+) for(i=1;i<wide-1;i+) if(p_temp1wide*j+i=0 ) p_temp1wide*j+i=255;else p_temp1w
23、ide*j+i=0; memcpy(p_data,p_temp1,wide*height); /复制处理后的图像delete p_temp1;4处理效果图 (a)原图 (b) 非运算效果图 图10-5非运算效果图非运算实际上是对图像二值化后进行反色变换的结果。10.2.4或非运算1.实现步骤(1)把二值图像转化为0、1值;(2)循环两幅图像的像素点;(3)两像素点同时为0置1,否则置0;(4)把0、1值转化为二值图像数据,为0的像素置0,为1的像素置255。2.编程代码/* *函数名称:huofei(lpbyte p_data, lpbyte p_databk,int wide,int hei
24、ght) *函数类型:void *参数说明:p_data 原图像首地址* p_databk 背景图像首地址* wide,height 原图像的高和宽 *功能:对图像进行或非运算。 */ void tuxianghechengdib:huofei(lpbyte p_data, lpbyte p_databk, int wide, int height)int i,j; /循环变量 lpbyte temp1=new bytewide*height; /新图像缓冲区 lpbyte temp2=new bytewide*height; memset( temp1,0,wide*height); mem
25、set( temp2,0,wide*height);/对原图二值化for(j=0;j<height;j+)for(i=0;i<wide;i+)if(p_datawide*j+i>128) temp1wide*j+i=1; /对背景二值化for(j=0;j<height;j+)for(i=0;i<wide;i+)if(p_databkwide*j+i>128) temp2wide*j+i=1; /进行每个像素的与运算 for(j=1;j<height-1;j+)for(i=1;i<wide-1;i+) if( temp2wide*j+i=0&
26、;& temp1wide*j+i=0) temp1wide*j+i=255;else temp1wide*j+i=0; memcpy(p_data, temp1,wide*height); /复制处理后的图像delete temp1;delete temp2;4.处理效果图 (a)原图 (b)背景 (c) 或非运算效果图图10-6或非运算效果图10.2.5与非运算1.实现步骤(1)把二值图像转化为0、1值;(2)循环两幅图像的像素点;(3)两像素点同时为1置0,否则置1;(4)把0、1值转化为二值图像数据,为0的像素置0,为1的像素置255。2.编程代码/* *函数名称:yufei(l
27、pbyte p_data, lpbyte p_databk,int wide,int height) *函数类型:void *参数说明:p_data 原图像首地址* p_databk 背景图像首地址* wide,height 原图像的高和宽 *功能:对图像进行与非运算。 */void tuxianghechengdib:yufei(lpbyte p_data, lpbyte p_databk, int wide, int height)int i,j; /循环变量lpbyte temp1=new bytewide*height; /新图像缓冲区 lpbyte temp2=new bytewid
28、e*height; memset( temp1,0,wide*height); memset( temp2,0,wide*height);/对原图二值化for(j=0;j<height;j+)for(i=0;i<wide;i+)if(p_datawide*j+i>128) temp1wide*j+i=1; /对背景二值化for(j=0;j<height;j+)for(i=0;i<wide;i+)if(p_databkwide*j+i>128) temp2wide*j+i=1; /进行每个像素的与非运算 for(j=1;j<height-1;j+) fo
29、r(i=1;i<wide-1;i+) if( temp2wide*j+i=1&& temp1wide*j+i=1) temp1wide*j+i=0;else temp1wide*j+i=255; memcpy(p_data, temp1,wide*height); /复制处理后的图像delete temp1;delete temp2;3效果图 (a)原图 (b)背景 (c) 与非运算效果图图10-7与非运算效果图10.2.6异或运算1.实现步骤(1)把二值图像转化为0、1值;(2)循环两幅图像的像素点;(3)两像素点相同置0,不同置1;(4)把0、1值转化为二值图像数据,为0的像素置0,为1的像素置255。2.编程代码/* *函数名称:yihuo(lpbyte p_data, lpbyte p_databk,int wide,int height) *函数类型:void *参数说明:p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业员工培训管理
- 挑战杯比赛流程
- 2025年高二政治下册复习知识点总结模版
- 《美丽的小兴安岭》教案-教师工作计划总结模版
- 阿勒泰职业技术学院《舞蹈编导一》2023-2024学年第二学期期末试卷
- 陇南师范高等专科学校《现代生物医药进展》2023-2024学年第二学期期末试卷
- 陕西师范大学《硬笔书法》2023-2024学年第一学期期末试卷
- 陕西服装工程学院《表演(音乐剧)》2023-2024学年第二学期期末试卷
- 陕西省咸阳市兴平市2025年三年级数学第二学期期末预测试题含解析
- 公共管理第三讲泰勒的科学管理理论
- 青少年心理咨询的特殊挑战试题及答案
- 学校信息化设备运维服务方案
- 《中央八项规定精神学习教育》专题讲座
- 上海市建设工程施工图设计文件勘察设计质量疑难问题汇编(2024 版)
- 光伏板智能清扫机器人结构设计
- (正式版)SHT 3115-2024 石油化工管式炉轻质浇注料衬里工程技术规范
- JND-Ⅱ增量型双路闸门开度仪
- 线路改迁工程施工组织设计方案
- 完整解读2021年新修订的《种子法》实用专题PPT讲授课件
- 团体心理辅导在班会中的应用PPT课件
- 金二系统及账册核销PPT课件
评论
0/150
提交评论