数字图像处理_02.2_(图像代数运算)

1.图像代数运算简介

图像的代数运算通常是指两幅图像,或者多幅图像通过加、减、乘、除代数运算以得到输出图像的方法。
如果记输入图像为 h ( x , y ) h(x,y) h(x,y), g ( x , y ) g(x,y) g(x,y),输出图像为 f ( x , y ) f(x,y) f(x,y)。则具体的图像代数运算形式为:
f ( x , y ) = h ( x , y ) + g ( x , y ) f ( x , y ) = h ( x , y ) − g ( x , y ) f ( x , y ) = h ( x , y ) ∗ g ( x , y ) f ( x , y ) = h ( x , y ) / g ( x , y ) f(x,y)=h(x,y)+g(x,y) \\ f(x,y)=h(x,y)-g(x,y) \\ f(x,y)=h(x,y)*g(x,y)\\ f(x,y)=h(x,y)/g(x,y) f(x,y)=h(x,y)+g(x,y)f(x,y)=h(x,y)g(x,y)f(x,y)=h(x,y)g(x,y)f(x,y)=h(x,y)/g(x,y)

  • 加法运算
    主要用于1.去除叠加性的随机噪声,2.实现图像的叠加效果

  • 减法运算
    主要用于1.差影法监测物体运动变化,2.混合图像的分离,3.计算图像梯度

  • 乘法运算
    主要用于掩膜mask

  • 除法运算
    主要用于1.设备的校正,2.图像差异的比较

2.具体实现

图像代数运算可以自己实现也可以使用OpenCV中的函数实现,这里两种都给出,但在实际的使用中多以CV自带函数的使用。
这里给出图像素材(obj,bg,mask,noise)如下:
在这里插入图片描述
1.加法运算实现:

img_add0=obj+bg
#相加大于255会出现溢出显示错误
img_add=cv.add(obj*0.5,bg*0.5)
#add()返回的是int类型,所乘系数为权值防止相加溢出255
img_add2=cv.addWeighted(obj,0.5,bg,0.5,0)
#addWeighted()返回的是浮点类型,第五个参数为位移

原输入图像:
在这里插入图片描述
加法运算后(img_add0,img_add,img_add2):在这里插入图片描述
2.减法实现

img_sub=img_add2-bg*0.5
img_sub2=cv.subtract(img_add2*1.0,bg*0.5)
#注意两个参数要为同类型,否则报错

原输入图像为:
在这里插入图片描述
输出图像(img_sub,img_sub2):在这里插入图片描述
3.乘法实现

img_mul=obj*(mask/255)
img_mul2=cv.multiply(obj/1.0,mask/255)
#注意两个参数要为同类型,否则报错
#对掩膜mask进行归一化处理,也是防止相乘后结果溢出

原输入图像为:在这里插入图片描述
输出图像(img_mul,img_mul2):
在这里插入图片描述
4.除法实现

img_div=obj/(np.float64(noise)+1)
#直接相除应注意除数为0的情况,故要转为浮点后+1
img_div2=cv.divide(obj,noise+1)

原始输入图像为:在这里插入图片描述
输出图像为:
在这里插入图片描述
做一个小的图片合成实验:

img_step1=cv.multiply(obj*1.0,mask/255)
img_step2=cv.multiply(flower*1.0,1-(mask/255))
img_step3=cv.addWeighted(img_step1,0.5,img_step2,0.5,0)

原图像素材(obj,flower,mask):
在这里插入图片描述
输出图像(img_step1,img_step2,img_step3):在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值