图像的代数运算
- 实验目的:
1.了解图像的算术运算在数字图像处理中的初步应用。
2.体会图像算术运算处理的过程和处理前后图像的变化。
3.能够实现简单的图像处理
-
实验原理:
图像的代数运算包括加,减,乘,除,这些运算的主要对象是图像数据块中的数据。这四种代数运算可以由如下的公式表示:
C(x,y) = A(x,y) + B(x,y)
C(x,y) = A(x,y) - B(x,y)
C(x,y) = A(x,y) * B(x,y)
C(x,y) = A(x,y) / B(x,y)
其中A(x,y),B(x,y),C(x,y)分别是参与运算的图像数据块。
在MATLAB中,由于图像的数据实际上是以矩阵的形式存储的,故可以直接使用MATLAB的基本算术符(+、-、*、/
等),但是在此之前必须将图像转换为适合进行基本操作的双精度类型。但是MATLAB图像处理工具箱包含了一个能够实现所有非稀疏数值数据的算术操作的函数集合,能够更加方便地对图像进行算数操作。下表列举了所有图像处理工具箱中的图像代数运算函数。
表1 图像处理工具箱中的代数运算函数
函数名 功能描述
Imabsdiff 两幅图像的绝对差值
Imadd 两幅图像的加法
Imcomplement 补足一幅图像
Imdivide 两幅图像的除法
Imlincomb 计算两幅图像的线性组合
Immultiply 两幅图像的乘法
imsubtract 两幅图像的减法
在使用上述工具箱时,我们不再需要考虑直接数据的类型,也无需考虑直接算数计算得出的值会超出图像的位数。但图像的算数计算需要参与计算的图像的数据块大小相等。
- 实验步骤:
<!-- -->
-
图像的加法:
图像相加一般用于对同一场景的多幅图像求平均效果,以便有效地降低具有叠加性质的随机噪声。
为了体验加法,我们分别进行了如下的两个操作:两幅图像相加;单幅图像的数据整体加上某一个数值,以增加亮度。
代码如下:
clc;
close ;
clear;
path=“E:\文件资料\课程课件及相关资料\图像处理\作业\第二次作业”;
%%
%两幅图片相加
car1 = imread(‘car1.jpg’);
car2= imread(‘car2.jpg’);
K = imadd(car1,car2);
imshow(K);
exportgraphics(gca,path+“\add.jpg”)
讨论:可见图像的加法会使得两幅图像重合在一起,上述两幅图片差异较大,所在两幅图片叠加时,会产生较为模糊的图片。当两幅图片的背景差不多时,所得到的图像会更加清晰。图像的加法可以用于水印的处理上。
给图像的每一个像素加上一个常数可以使图像的亮度增加。
代码如下:
%%%%%图像增加,减少亮度
RGB = imread(‘cameraman.tif’);
RGB2 = imadd(RGB,50);
RGB3 = imsubtract(RGB,50);
subplot(1,3,1);imshow(RGB);
subplot(1,3,2);imshow(RGB2);
subplot(1,3,3);imshow(RGB3);
exportgraphics(gca,path+“\increase_brightness.jpg”)
clf;
讨论:给图像的每个像素加上一个常数会导致图像整体的亮度变亮,当减去一个常数,会导致图像整体变暗。但图像整体的对比度去发生了较大的变化。在运用图像加法的过程中,尤其要注意所加的数值大小,当数值过大时,会造成全局图像信息的丢失,即得到的整幅图像为全白。
-
图像的减法:
图像的减法常用于运动物体的检测以及图像差异的检测。图像减法也可以是更加复杂的图像处理的准备步骤。在MATLAB中可以用imsubstract这个函数来实现。
图像的减法可以减去图像的背景,以突出所需处理的对象。也可以减少图像的整体亮度(该部分可见图像的加法部分)。
减去背景的图像见上图的右图。
代码如下:
%%
%图像减法
cameraman = imread(‘cameraman.tif’);
background =imopen (cameraman, strel(‘disk’,15));
cameraman2 = imsubtract(cameraman, background);
gca=figure;
subplot(1,2,1);imshow(cameraman);
subplot(1,2,2);imshow(cameraman2);
exportgraphics(gca,path+“\subtract_background.jpg”)
clf;
讨论:background这个数据块实际上表示图像的背景的像素信息。所以当原始图像减去该背景数据块时,由于原始图像的背景与background的数据差不多,所以会导致所的图像的背景部分的像素几乎为0(如上图所示,其背景部分几乎是一团黑)。但是人物部分,由于background所对于的数据几乎为0,所以处理前后的图像的人物几乎不变。
-
图像的乘法:
两幅图像进行乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分。这是图像的加法所不具有的。图像的加法,减法会改变图像的亮度,但是图像的乘法会更好地保持原图像的明暗效果,更加的自然。处理前后的图像的对比度并不会出现明显的变化。
原始图像如下图的左图,经乘法操作后的图像如下图的右图。
代码如下:
%%
%图像乘法
I = imread(‘moon.tif’);
J = immultiply(I,1.5);
gca=figure;
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J);
exportgraphics(gca,path+“\mutiply_moon.jpg”)
clf;
讨论:如上图所示,月亮较亮的部分的亮度明显变大,月亮较暗的部分的亮度变化没那么明显。与图像的加法的结果相比,图像的乘法能够更加自然的保留原始图像的自然。当乘法的系数变大时,会发现图像出现明显的失真。例如每当系数为10
时,所得的结果如下:
-
图像的除法:
除法运算可用于校正成像设备的非线性影响。除法也可以用于图像差异的检测,这种差异的检测不同于图像的减法,该差异更多的体现像素值变化的比率。在MATLAB中可以使用imdivide实现图像的除法。
原始图像可见图像减法部分的图像。我们将原始图像除以除去背景后的图像,处理结果如下
代码如下:
%%
%图像除法
gca=figure;
Ip = imdivide(cameraman, cameraman2);
imshow(Ip, []);
exportgraphics(gca,path+“\divide_cameraman.jpg”)
讨论:处理后的图像,明显的反映了任务的轮廓,以及背景变化的部分。相较于图像的减法,该方法不需要参考图像。所以具有一定的优势。但是图像的除法的结果并没有图像的减法的效果明显。
-
图像的四则算术运算:
图像的四则运算能够将四则四则运算结合在一起。但是直接进行四则运算需要对图像进行截取。而MATLAb工具箱提供了imlincomb函数,可以忽略对图像的截取,更加方便的对图像进行处理。
代码如下:
%%
%图像四则运算
gca=figure;
I = imread(‘rice.png’);
J = imread(‘cameraman.tif’);
K = imlincomb(1.1,I,0.9,J,50,‘uint16’);
imshow(K,[])
exportgraphics(gca,path+“\Algebra.jpg”);
close all;文章来源:https://www.toymoban.com/news/detail-478408.html
clear all;文章来源地址https://www.toymoban.com/news/detail-478408.html
到了这里,关于图像四则运算(加减乘除)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!