图像的代数运算
图像的代数运算是两幅输入图像之间进行的点对点的加、减、乘、除运算后得到输出图像的过程。
一、图像的加法运算
图像相加一般用于对同一场景的多幅图像求平均效果,以便有效地降低具有叠加性质的随机噪声。
代码如下:
clear all; close all; I1 = imread('flower1.jpg'); I2 = imread('flower2.jpg'); I3 = imadd(I1, I2); %图像的加法运算 subplot(2, 2, 1), imshow(I1), title('原始图像1'); subplot(2, 2, 2), imshow(I2), title('原始图像2'); subplot(2, 2, 3), imshow(I3), title('处理后的图象');
处理后的图像显示如下:
两幅图像的像素值相加时,产生的结果很可能超过图像数据类型所支持的最大值,尤其对于uint8类型的图像,溢出的情况最为常见。当数据值发生溢出时,imadd函数将数据截取为数据类型所支持的最大值,这种截取效果称之为饱和。为了避免出现饱和现象,在进行加法计算前,最好将图像转换为一种数据范围较宽的数据类型。
二、图像的减法运算
图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。
代码如下
clear all; close all; rice = imread('rice.jpg'); background = imerode(rice, strel('disk', 15)); %生成背景亮度图像 rice2 = imsubtract(rice, background); subplot(1, 2, 1), imshow(rice), title('原始图像'); subplot(1, 2, 2), imshow(rice2), title('处理后的图像');
处理后的图象显示如下:
三、图像的乘法运算
两幅图像进行乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分。一幅图像乘以一个常数通常被称为缩放,这是一种常见的图象处理操作。缩放通常将产生比简单添加像素偏移量自然得多的明暗效果,这是因为这种操作能够更好的维持图像的相关对比度。
代码如下:
clear all; close all; moon = imread('moon.jpg'); moon2 = immultiply(moon, 2); subplot(1, 2, 1), imshow(moon), title('原始图像'); subplot(1, 2, 2), imshow(moon2), title('处理后的图像');
处理后的图像显示如下:
四、图像的除法运算
除法运算可用于校正成像设备的非线性影响,这在特殊形态的图象(如断层扫描等医学图像)处理中常常用到。图像除法也可以用来检测两幅图像间的区别,但是除法操作给出的是相应像素值的变化比率,而不是每个像素的绝对差异,因而图像除法也成为比率变换。
代码如下:
clear all; close all; I = imread('rice.jpg'); I2 = double(I); J = double(I2 * 0.43 + 90); K = imdivide(I2, J); subplot(1, 2, 1), imshow(I), title('I'); subplot(1, 2, 2), imshow(K), title('K');
处理后的图像显示如下: