@[TOC] 图像的代数运算在图像处理中有着广泛的应用,它除了可以实现自身所需的算数操作,还能为许多复杂的图像处理提供准备。例如,图像减法就可以用来检测同一场景或物体生成的两幅或多副图像的误差。可以使用MATLAB基本算数符(﹢、﹣、·、/)来执行图像的算数操作,但在此之前必须将图像转换为适合进行基本操作的双精度类型。在MATLAB中,图像运算函数无需再进行数据类型之间的转换,这些函数能够接受uint8和uint16的数据,并且返回相同格式的图像结果。 下表是一个常见的MATLAB图像运算函数集合。
函数名 | 功能描述 |
Imabsdiff | 用于计算两幅图像的绝对差值 |
imcomplement | 用于补足一幅图像 |
imlincomb | 用于计算两幅图像的线性组合 |
clear
close all
clc
bw=imread('circbw.tif');
bw2=imcomplement(bw);
subplot(231)
imshow(bw)
title('二值原始图像')
subplot(234)
imshow(bw2)
title('二值图像求补')
I=imread('cell.tif');
J=imcomplement(I);
subplot(232)
imshow(I)
title('原始图像灰度图像')
subplot(235)
imshow(J)
title('灰度图像求补')
RGB=imread('onion.png');
RGB1=imcomplement(RGB);
subplot(233)
imshow(RGB)
title('RGB原始图像')
subplot(236)
imshow(RGB1)
title('RGB图像求补')
2.利用imlincomb函数将图像的灰度值放大1.5倍
clear
clc
close all
I=imread('pout.tif');
J=imlincomb(1.5,I);
subplot(121);
imshow(I)
title('原始图像')
subplot(122)
imshow(J)
title('放大1.5倍后的图像')
3.利用imlincomb函数计算两幅图像的平均值。
clear
clc
close all
A1=imread('rice.png');
A2=imread('cameraman.tif');
K=imlincomb(0.3,A1,0.3,A2);
subplot(131)
subimage(A1)
title('原始图像rice')
subplot(132)
subimage(A2)
title('原始图像cameraman')
subplot(133)
subimage(K)
title('图像平均')
4.图像的加法运算
图像相加一般用于对同一场景的多重影像叠加求平均的图像,以便有效地降低加性随机噪声。在MATLAB中,imadd函数用于实现图像的相加,该函数的调用格式如下:
Z=imadd(X,Y):将矩阵X中的每一个元素与矩阵Y中对应的元素相加,返回值为Z
clear
clc
close all
I=imread('rice.png');
J=imread('cameraman.tif');
K=imadd(I,J,'uint16');%图像相加,并把结果存为16位的形式
subplot(131)
imshow(I)
title('rice原始图像')
subplot(132)
imshow(J)
title('cameraman原始图像')
subplot(133)
imshow(K,[]);%注意把结果压缩到0~255范围内显示
title('相加图像')
5.利用imnoise函数对噪声进行相加运算
clear
close all
clc
a=imread('pout.tif');
a1=imnoise(a,'gaussian',0,0.007);
a2=imnoise(a,'gaussian',0,0.007);
a3=imnoise(a,'gaussian',0,0.007);
a4=imnoise(a,'gaussian',0,0.007);
K=imlincomb(0.25,a1,0.25,a2,0.25,a3,0.25,a4);
subplot(131)
imshow(a)
subplot(132)
imshow(a1)
subplot(133)
imshow(K)
6.图像的减法运算
图像的减法运算也称为差分运算,经常用于检测变化及运动的物体。在Matlab中可以用图像数组直接相减来实现,也可以调用imsubtract函数来实现。该函数的调用格式如下:
Z=imsubtract(X,Y):将矩阵X中的每一个元素与矩阵Y中对应的元素相减,返回值为Z
clear
close all
clc
i=imread('eight.tif');
subplot(221)
imshow(i)
back=imopen(i,strel('disk',15));
subplot(222)
imshow(back)
i1=imsubtract(i,back);
subplot(223)
imshow(i1)
i2=imsubtract(i,45);
subplot(224)
imshow(i2)
7.利用两种函数去图像的相减值和绝对值
clear
close all
clc
coins=imread('coins.png');
background=imopen(coins,strel('disk',15));
coins1=imsubtract(coins,background);
subplot(221)
imshow(coins)
title('原始图像')
subplot(222)
imshow(background)
title('背景图像')
subplot(223)
imshow(coins1)
title('imsubtract函数相减结果')
K=imabsdiff(coins,background);
subplot(224)
imshow(K,[])
title('imabsdiff函数相减结果')
8.降低R图像的亮度
clear
close all
clc
R=imread('peppers.png');
R2=imsubtract(R,100);
subplot(121)
imshow(R)
title('原始图像')
subplot(122)
imshow(R2)
title('降低后的图像')
9.图像的乘法运算
图像的乘法运算主要用于实现图像的掩膜处理,即屏蔽掉图像的某些部分。图像的缩放就是指一幅图像乘以一个常数。若缩放因素大于1,则图像的亮度将增强;若因素小于1,则会使图像变暗。在MATLAB中,immultiply函数用于实现两幅图像的相乘。该函数的调用格式如下:
Z=immultiply(X,Y):将矩阵X中的每一个元素与矩阵Y中的元素对应相乘,返回值为Z
clear
close all
clc
I=imread('rice.png');
I1=uint16(I);
I2=immultiply(I1,I1);%图像自乘
I3=immultiply(I,1.5);%图像扩大像素
I4=immultiply(I,0.5);%图像缩小像素
subplot(221)
imshow(I)
title('原始图像')
subplot(222)
imshow(I2)
title('图像自乘')
subplot(223)
imshow(I3)
title('图像扩大像素')
subplot(224)
imshow(I4)
title('图像缩小像素')
10.图像的除法运算
图像的除法运算用于校正由于照明不良或者传感器的非线性影响造成的偏差,此外图像的除法运算还被用于产生比率图像,在MATLAB中调用imdivide函数进行两幅图像的相除。调用格式如下:
Z=imdivide(X,Y):将矩阵X中的每一个元素除以矩阵Y中对应的元素,返回值为Z
clear
close all
clc
I=imread('coins.png');
subplot(221)
imshow(I)
title('原始图像')
background=imopen(I,strel('disk',15));
Ip=imdivide(I,background);
subplot(222)
imshow(Ip,[])
title('图像与背景相除')
J=imdivide(I,3);
subplot(223)
imshow(J)
title('图像与3相除的效果')
K=imdivide(I,0.6);
subplot(224)
imshow(K)
title('图像与0.6相除的效果')