图像处理之图像加减

1. 图像加法运算

g ( x , y ) = f 1 ( x , y ) + f 2 ( x , y ) g(x,y) = f_1(x,y) + f_2(x,y) g(x,y)=f1(x,y)+f2(x,y)

1.1 和值处理

进行加法运算时,像素点的和值可能会超过灰度值范围,可采用以下方式处理:

  • 截断处理

如果 g ( x , y ) > 255 g(x,y)>255 g(x,y)>255,仍取 255 255 255。新图像 g ( x , y ) g(x,y) g(x,y)偏大,图像整体较亮。

  • 加权求和

g ( x , y ) = α f 1 ( x , y ) + ( 1 − α ) f 2 ( x , y ) g(x,y) = \alpha f_1(x,y) + (1-\alpha)f_2(x,y) g(x,y)=αf1(x,y)+(1α)f2(x,y)

1.2 加法运算主要应用

  • 多幅图像相加求平均去除叠加性噪声。若图像中存在的各点噪声为互不相关的加性噪声,且均值为0,对同一景物连续摄取多幅图像,再对多幅图像相加取平均,消除噪声;
  • 将一幅图像的内容经配准后叠加到另一幅图像上去,以改善图像的视觉效果;
  • 在多光谱图像中,通过加法运算加宽波段,如绿色波段和红色波段图像相加可以得到近似全色图像;
  • 用于图像合成和图像拼接。
    在这里插入图片描述
    在这里插入图片描述
clc, clear, close all;
Image1 = imread('desert.jpg');
Image2 = imread('car.jpg');
Image3 = imadd(Image1, Image2);
imshow(Image3);

在这里插入图片描述

2. 图像减法运算

g ( x , y ) = f 1 ( x , y ) − f 2 ( x , y ) g(x,y) = f_1(x,y) - f_2(x,y) g(x,y)=f1(x,y)f2(x,y)

2.1 差值处理

进行加法运算时,像素点的差值可能为负值,可采用以下方式处理:

  • 截断处理

如果 g ( x , y ) < 0 g(x,y)<0 g(x,y)<0,仍取 0 0 0。新图像 g ( x , y ) g(x,y) g(x,y)偏小,图像整体较暗。

  • 取绝对值

g ( x , y ) = ∣ f 1 ( x , y ) − f 2 ( x , y ) ∣ g(x,y) = |f_1(x,y) - f_2(x,y) | g(x,y)=f1(x,y)f2(x,y)

2.2 减法运算主要应用

  • 显示两幅图像的差异,检测同一场景两幅图像之间的变化。如运动目标检测中的背景减法、视频中镜头边界的检测;
  • 去除不需要的叠加性图案。叠加性图案可能是缓慢变化的背景阴影或周期性的噪声,或在图像上每一个像素处均已知的附加污染等,如电视制作的蓝屏技术;
  • 图像分割。如分割运动的车辆,减法去掉静止部分,剩余的是运动元素和噪声;
  • 生成合成图像。
    在这里插入图片描述
    在这里插入图片描述
Image1 = imread('desert.jpg');
Image2 = imread('car.jpg');
Image3 = imsubtract(Image1, Image2);	% 截断处理
Image4 = imabsdiff(Image1, Image2);		% 绝对值处理
imshowpair(Image3, Image4, 'Montage');

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Image1 = imread('hallforeground.bmp');
Image2 = imread('hallback.bmp');
Image3 = imsubtract(Image2, Image1);
Image4 = imabsdiff(Image1, Image2);
imshowpair(Image3, Image4, 'Montage');

在这里插入图片描述

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenCvSharp是一个针对C#开发人员的OpenCV封装库,可以方便地进行图像处理图像加减图像处理中的基本操作之一,可以通过OpencvSharp来实现。 首先,我们需要加载待处理的图像。可以使用`Cv2.ImRead`方法来读取图像文件,并将其转换为`Mat`对象。例如,可以通过以下代码加载一张图像: ```csharp Mat image = Cv2.ImRead("image.jpg", ImreadModes.Color); ``` 在进行图像加减操作之前,我们需要创建一个与原始图像大小相等的空图像作为结果存储的容器。可以通过`Mat.Zeros`方法来创建一个全黑的图像: ```csharp Mat result = new Mat(image.Size(), image.Type(), new Scalar(0, 0, 0)); ``` 接下来,可以使用`Cv2.Add`和`Cv2.Subtract`方法来进行图像加减操作。例如,可以使用以下代码将图像的像素值减去一个固定值: ```csharp // 将每个像素的值减去100 Cv2.Subtract(image, new Scalar(100, 100, 100), result); ``` 另外,如果想要对两张图像进行加减操作,则可以使用以下代码: ```csharp Mat image2 = Cv2.ImRead("image2.jpg", ImreadModes.Color); // 将两张图像的像素值相加 Cv2.Add(image, image2, result); ``` 最后,可以使用`Cv2.ImShow`方法来显示处理后的图像,并使用`Cv2.WaitKey`方法等待用户按下键盘上的任意键才能关闭显示窗口: ```csharp Cv2.ImShow("Result Image", result); Cv2.WaitKey(0); Cv2.DestroyAllWindows(); ``` 通过以上步骤,我们就可以使用OpenCvSharp进行图像加减操作了。当然,OpenCvSharp还提供了许多其他的图像处理方法,可以根据具体需求进行选择和使用。 ### 回答2: 在使用OpenCvSharp进行图像加减操作时,我们可以通过对图像的像素值进行加减运算来实现。首先,使用Mat类来加载原始图像和目标图像。然后,通过在每个像素上进行运算来获取结果图像。 例如,对于图像加法,可以按照以下步骤进行操作: 1. 加载原始图像和目标图像:使用Mat类的FromFile方法加载原始图像和目标图像。 2. 检查图像的大小和通道数是否相同:确保原始图像和目标图像的大小和通道数相同,否则可能会导致运算错误。 3. 创建结果图像:使用Mat类的Zeros方法创建一个与原始图像和目标图像大小和通道数相同的结果图像。 4. 进行加法运算:对于每个像素,将原始图像和目标图像的对应像素相加并将结果存储在结果图像中。可以使用Mat类的At方法来访问每个像素的值。 5. 显示和保存结果:可以使用imshow函数显示结果图像,并使用imwrite函数将结果保存到本地。 图像减法的操作与图像加法类似,只需要将相加操作改为相减操作即可。需要注意的是,在进行相减运算时,可能会出现结果超出像素值范围的情况,可以使用阈值函数限制结果像素值的范围。 通过以上步骤,我们可以使用OpenCvSharp进行图像加减操作,并获取到相应的结果图像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值